00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef MANAGER_H
00022 #define MANAGER_H
00023
00024 #include <pthread.h>
00025
00026 #include "clist.h"
00027
00028 #include "xetpan-types.h"
00029
00030 #include "remote.h"
00031
00032 typedef struct XePManager_s XePManager;
00033
00034 struct XePManager_s
00035 {
00036 XePRemote *remote;
00037 int fd_write;
00038 clist *pending_queue;
00039 int thread_count;
00040 int max_threads;
00041 };
00042
00043 typedef enum
00044 {
00045 XEP_MANAGER_THREAD_STATE_NONE,
00046 XEP_MANAGER_THREAD_STATE_RUNNING,
00047 XEP_MANAGER_THREAD_STATE_IDLE
00048 } XePManagerThreadState;
00049
00050 typedef struct XePManagerThread_s XePManagerThread;
00051
00052 struct XePManagerThread_s
00053 {
00054 pthread_mutex_t data_mutex;
00055 pthread_mutex_t queue_mutex;
00056 pthread_cond_t cond;
00057 pthread_t thread_id;
00058 XePManagerThreadState state;
00059 int cancel;
00060 clist *queue;
00061 int fd_write;
00062 };
00063
00064 typedef enum
00065 {
00066 XEP_MANAGER_NONE,
00067 XEP_MANAGER_CAPABILITY,
00068 XEP_MANAGER_CREATE,
00069 XEP_MANAGER_DELETE,
00070 XEP_MANAGER_RENAME,
00071 XEP_MANAGER_SUBSCRIBE,
00072 XEP_MANAGER_UNSUBSCRIBE,
00073 XEP_MANAGER_LIST,
00074 XEP_MANAGER_LSUB,
00075 XEP_MANAGER_STATUS,
00076 XEP_MANAGER_APPEND,
00077 XEP_MANAGER_CLOSE,
00078 XEP_MANAGER_EXPUNGE,
00079 XEP_MANAGER_SEARCH,
00080 XEP_MANAGER_FETCH_FIELDS,
00081 XEP_MANAGER_GET_BODYSTRUCTURE,
00082 XEP_MANAGER_MIME_FIND_DEFAULT,
00083 XEP_MANAGER_FETCH_PART,
00084 XEP_MANAGER_FETCH,
00085 XEP_MANAGER_FLAGS_CHANGE,
00086 XEP_MANAGER_LIST_FLAGS_CHANGE,
00087 XEP_MANAGER_STORE,
00088 XEP_MANAGER_COPY,
00089 XEP_MANAGER_PROCESSING,
00090 XEP_MANAGER_SEARCHING,
00091 XEP_MANAGER_UPDATE,
00092 XEP_MANAGER_CHECK,
00093 XEP_MANAGER_SMTP_SEND,
00094 XEP_MANAGER_DISCONNECT,
00095 XEP_MANAGER_MAILBOX_DISCONNECT,
00096 XEP_MANAGER_EXIT,
00097 XEP_MANAGER_DONE,
00098 XEP_MANAGER_EXIT_DONE
00099 } XePManagerMsgType;
00100
00101 typedef void (*XePManagerMsgCb)(void *data, void *arg_out);
00102
00103 typedef struct XePManagerMsg_s XePManagerMsg;
00104
00105 struct XePManagerMsg_s
00106 {
00107 XePManagerMsgType type;
00108 void *source;
00109 XePManagerThread *target;
00110 void *arg_in;
00111 void *arg_out;
00112 clist *callbacks;
00113 XetPan *xetpan;
00114 XePManagerMsgType *state;
00115 int flush_old;
00116 };
00117
00118 XePManagerMsg *
00119 a_Manager_msg_new(void);
00120
00121 void
00122 a_Manager_msg_free(XePManagerMsg *msg);
00123
00124 void
00125 a_Manager_msg_set_type(XePManagerMsg *msg, XePManagerMsgType type);
00126
00132 void
00133 a_Manager_msg_flush_old(XePManagerMsg *msg);
00134
00135 XePManagerMsgType
00136 a_Manager_msg_get_type(XePManagerMsg *msg);
00137
00138 void
00139 a_Manager_msg_set_source(XePManagerMsg *msg, void *source);
00140
00141 void *
00142 a_Manager_msg_get_source(XePManagerMsg *msg);
00143
00144 void
00145 a_Manager_msg_set_target(XePManagerMsg *msg, void *target);
00146
00147 void *
00148 a_Manager_msg_get_target(XePManagerMsg *msg);
00149
00150 void
00151 a_Manager_msg_set_source_target(XePManagerMsg *msg,
00152 void *source,
00153 void *target);
00154
00155 void
00156 a_Manager_msg_add_callback(XePManagerMsg *msg,
00157 XePManagerMsgCb callback,
00158 void *data);
00159
00160 void
00161 a_Manager_msg_set_arg_in(XePManagerMsg *msg, void *arg_in);
00162
00163 void *
00164 a_Manager_msg_get_arg_in(XePManagerMsg *msg);
00165
00166 void
00167 a_Manager_msg_set_arg_out(XePManagerMsg *msg, void *arg_out);
00168
00169 void *
00170 a_Manager_msg_get_arg_out(XePManagerMsg *msg);
00171
00172 void
00173 a_Manager_msg_set_args(XePManagerMsg *msg, void *arg_in, void *arg_out);
00174
00175 XePManagerThreadState
00176 a_Manager_thread_get_state_safe(XePManagerThread *thread);
00177
00178 int
00179 a_Manager_thread_data_is_locked(XePManagerThread *thread);
00180
00181 void
00182 a_Manager_msg_set_state_holder(XePManagerMsg *msg,
00183 XePManagerMsgType *state_holder);
00184
00185 void
00186 a_Manager_msg_submit(XePManagerMsg *msg);
00187
00188 void
00189 a_Manager_init(XetPan *xetpan);
00190
00191 void
00192 a_Manager_quit(XetPan *xetpan);
00193
00194 #endif