Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

manager.h

Go to the documentation of this file.
00001 /*
00002  * XetPan: a libEtPan! based Mail User Agent
00003  * Copyright (C) 2002-2003 Melvin Hadasht
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation; either version 2 of the License, or
00008  * (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
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

Generated on Wed Oct 22 15:50:41 2003 for XetPan by doxygen 1.3.2