00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef _WIN32
00035 #include "config.h"
00036 #else
00037 #include "winconfig.h"
00038 #endif
00039
00040 #include "include/ap_queue_template.h"
00041 #include "include/data_structures.h"
00042
00043 AP_QUEUE_STD_DEFN_TEMPLATE(connection_queue, connection)
00044
00045 AP_QUEUE_SEARCH_TEMPLATE(
00046 connection_queue,
00047 Search,
00048 connection,
00049 int,
00050 (node->connect_id == key)
00051 )
00052
00053 AP_QUEUE_REMOVE_TEMPLATE(
00054 connection_queue,
00055 Remove,
00056 connection,
00057 int,
00058 (node->connect_id == key)
00059 )
00060
00061 int
00062 connection_queue_Print(connection_queue_p queue)
00063 {
00064 int i;
00065 connection_p node;
00066 MUTEX_LOCK(queue->lock);
00067 for(i = 0; i < queue->size; i++) {
00068 node = (connection_p)ListSearch(queue->list, i);
00069 if (node != NULL) {
00070 printf("Connection id %d:\n\tremote:%s\n",
00071 node->connect_id,
00072 node->remote_hostname
00073 );
00074 }
00075 }
00076 MUTEX_UNLOCK(queue->lock);
00077 return i;
00078 }
00079
00080
00081 #include "include/interpreter_variable_data.h"
00082 AP_QUEUE_STD_DEFN_TEMPLATE(agent_variable_list, interpreter_variable_data)
00083
00084 AP_QUEUE_SEARCH_TEMPLATE(
00085 agent_variable_list,
00086 Search,
00087 interpreter_variable_data,
00088 char*,
00089 (!strcmp(node->name, key))
00090 )
00091
00092 AP_QUEUE_REMOVE_TEMPLATE(
00093 agent_variable_list,
00094 Remove,
00095 interpreter_variable_data,
00096 char*,
00097 (!strcmp(node->name, key))
00098 )
00099
00100
00101 #include "include/agent_file_data.h"
00102 AP_QUEUE_STD_DEFN_TEMPLATE(agent_file_list, agent_file_data)
00103
00104 AP_QUEUE_SEARCH_TEMPLATE(
00105 agent_file_list,
00106 Search,
00107 agent_file_data,
00108 char*,
00109 (!strcmp(node->name, key))
00110 )
00111
00112 AP_QUEUE_REMOVE_TEMPLATE(
00113 agent_file_list,
00114 Remove,
00115 agent_file_data,
00116 char*,
00117 (!strcmp(node->name, key))
00118 )
00119
00120
00121 AP_QUEUE_STD_DEFN_TEMPLATE(
00122 message_queue,
00123 message
00124 )
00125
00126 AP_QUEUE_SEARCH_TEMPLATE(
00127 message_queue,
00128 Search,
00129 message,
00130 int,
00131 (node->message_id == key)
00132 )
00133
00134 AP_QUEUE_REMOVE_TEMPLATE(
00135 message_queue,
00136 Remove,
00137 message,
00138 int,
00139 (node->message_id == key)
00140 )
00141
00142 int
00143 message_queue_Print(message_queue_p queue)
00144 {
00145 int i;
00146 message_p node;
00147 MUTEX_LOCK(queue->lock);
00148 for(i = 0; i < queue->size; i++) {
00149 node = (message_p)ListSearch(queue->list, i);
00150 if (node != NULL) {
00151 printf("Connection id %d:\n\tfrom:%s\n\tto:%s\n",
00152 node->message_id,
00153 node->from_address,
00154 node->to_address
00155 );
00156 }
00157 }
00158 MUTEX_UNLOCK(queue->lock);
00159 return i;
00160 }
00161
00162
00163
00164 #include "include/agent.h"
00165 AP_QUEUE_STD_DEFN_TEMPLATE(
00166 agent_queue,
00167 agent
00168 )
00169 AP_QUEUE_SEARCH_TEMPLATE(
00170 agent_queue,
00171 Search,
00172 agent,
00173 int,
00174 (node->id == key)
00175 )
00176 AP_QUEUE_SEARCH_TEMPLATE(
00177 agent_queue,
00178 SearchName,
00179 agent,
00180 char*,
00181 (!strcmp(node->name, key))
00182 )
00183 AP_QUEUE_REMOVE_TEMPLATE(
00184 agent_queue,
00185 Remove,
00186 agent,
00187 int,
00188 (node->id == key)
00189 )
00190 AP_QUEUE_REMOVE_TEMPLATE(
00191 agent_queue,
00192 RemoveName,
00193 agent,
00194 char*,
00195 (!strcmp(node->name, key))
00196 )
00197
00198 int
00199 agent_queue_Print(agent_queue_p queue)
00200 {
00201 int i;
00202 agent_p node;
00203 MUTEX_LOCK(queue->lock);
00204 for(i = 0; i < queue->size; i++) {
00205 node = (agent_p)ListSearch(queue->list, i);
00206 if (node != NULL) {
00207 MUTEX_LOCK(node->agent_status_lock);
00208 printf("agent id %d:\n\tname:%s status:%d\n",
00209 (int)node->id,
00210 node->name, node->agent_status);
00211 MUTEX_UNLOCK(node->agent_status_lock);
00212 }
00213 }
00214 MUTEX_UNLOCK(queue->lock);
00215 return i;
00216 }
00217
00218 int
00219 agent_queue_Flush(agent_queue_p queue)
00220 {
00221 int i;
00222 agent_p node;
00223 MUTEX_LOCK(queue->lock);
00224 for(i = 0; i < queue->size; i++) {
00225 node = (agent_p)ListSearch(queue->list, i);
00226 if (node != NULL) {
00227 MUTEX_LOCK(node->agent_status_lock);
00228 printf("flushing agent id %d: name:%s status:%d\n",
00229 (int)node->id, node->name, node->agent_status);
00230 MUTEX_UNLOCK(node->agent_status_lock);
00231 agent_queue_RemoveIndex((agent_queue_p)queue->list, i);
00232 }
00233 }
00234 MUTEX_UNLOCK(queue->lock);
00235 return i;
00236 }
00237
00238 AP_QUEUE_STD_DEFN_TEMPLATE(
00239 mail_queue,
00240 fipa_acl_message
00241 )
00242
00243 fipa_acl_message_p mail_queue_SearchReceivers( mail_queue_p mail_queue, const char* key)
00244 {
00245 listNode_t* parsenode;
00246 fipa_acl_message_t* node = NULL;
00247 fipa_acl_message_t* ret = NULL;
00248 int i;
00249
00250 MUTEX_LOCK(mail_queue->lock);
00251 if (mail_queue->list->listhead == NULL) {
00252 MUTEX_UNLOCK(mail_queue->lock);
00253 return NULL;
00254 }
00255 for(
00256 parsenode = (listNode_t*)mail_queue->list->listhead;
00257 parsenode != NULL;
00258 parsenode = (listNode_t*)parsenode->next
00259 )
00260 {
00261 node = (fipa_acl_message_t*)parsenode->node_data;
00262 for(i = 0; i < node->receiver->num; i++) {
00263 if ( !strcmp(
00264 node->receiver->fipa_agent_identifiers[i]->name,
00265 key) )
00266 {
00267 ret = node;
00268 parsenode = NULL;
00269 break;
00270 }
00271 }
00272 }
00273 return ret;
00274 }
00275
00276
00277 AP_QUEUE_STD_DEFN_TEMPLATE(
00278 mailbox_queue,
00279 agent_mailbox
00280 )
00281
00282
00283
00284 AP_QUEUE_STD_DEFN_TEMPLATE(
00285 interpreter_queue,
00286 AP_GENERIC
00287 )
00288
00289 AP_GENERIC_p interpreter_queue_CreateRetrieve( struct interpreter_queue_s *queue , ChOptions_t* interp_options) {
00290
00291
00292 struct AP_GENERIC_s *ret;
00293 ChInterp_t* interp;
00294 MUTEX_LOCK(queue->lock);
00295 if (queue->size <= 0) {
00296 interp = (ChInterp_t*)malloc(sizeof(ChInterp_t));
00297 if( Ch_Initialize(interp, interp_options) != CH_OK) {
00298
00299 MUTEX_UNLOCK(queue->lock);
00300 return NULL;
00301 }
00302
00303 agent_ChScriptInitVar(interp);
00304 ret = (struct AP_GENERIC_s*)interp;
00305 MUTEX_UNLOCK(queue->lock);
00306 return ret;
00307 }
00308 ret = (struct AP_GENERIC_s*)ListPop(queue->list);
00309 queue->size--;
00310 COND_SIGNAL(queue->cond);
00311 MUTEX_UNLOCK(queue->lock);
00312 return ret;
00313 }
00314
00315 int AP_GENERIC_Destroy(AP_GENERIC_t* blah) {
00316 return 0;
00317 }
00318
00319 AP_GENERIC_p AP_GENERIC_Copy(AP_GENERIC_p AP_GENERIC) {
00320 return NULL;
00321 }