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
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 #ifndef _MOBILEC_H_
00126 #define _MOBILEC_H_
00127
00128 #include "macros.h"
00129
00130 #ifdef WIN32
00131 #ifdef _MC_DLL
00132
00133 #define EXPORTMC _declspec(dllexport)
00134 #else
00135
00136 #define EXPORTMC
00137 #endif
00138 #else
00139
00140 #define EXPORTMC
00141 #endif
00142
00143
00144
00145 #define MC_Wait(arg1) \
00146 MC_MainLoop(arg1)
00147
00148 #include <embedch.h>
00149 #ifdef __cplusplus
00150 extern "C" {
00151 #endif
00152
00153
00154
00155 struct agent_s;
00156 typedef int (*MC_AgentInitCallbackFunc_t)(
00157 ChInterp_t interp,
00158 struct agent_s* agent,
00159 void* user_data);
00160
00161 #ifndef _ERROR_CODE_E_
00162 #define _ERROR_CODE_E_
00163
00164
00165
00166
00167 typedef enum error_code_e {
00168 MC_SUCCESS = 0,
00169 MC_ERR,
00170 MC_ERR_CONNECT,
00171 MC_ERR_PARSE,
00172 MC_ERR_EMPTY,
00173 MC_ERR_INVALID,
00174 MC_ERR_INVALID_ARGS,
00175 MC_ERR_NOT_FOUND,
00176 MC_ERR_MEMORY,
00177 MC_ERR_SEND,
00178 MC_WARN_DUPLICATE
00179 } error_code_t;
00180 #endif
00181
00185 enum MC_ThreadIndex_e{
00186 MC_THREAD_DF=0,
00187 MC_THREAD_AMS,
00188 MC_THREAD_ACC,
00189 MC_THREAD_CP,
00190 MC_THREAD_AGENT,
00191 MC_THREAD_ALL };
00192
00193
00197 typedef enum MC_SteerCommand_e {
00198 MC_RUN = 0,
00199 MC_SUSPEND,
00200 MC_RESTART,
00201 MC_STOP
00202 } MC_SteerCommand_t;
00203
00212 enum MC_Signal_e{
00213 MC_NO_SIGNAL =0x00,
00214 MC_RECV_CONNECTION=0x01,
00215 MC_RECV_MESSAGE =0x02,
00216 MC_RECV_AGENT =0x04,
00217 MC_RECV_RETURN =0x08,
00218 MC_EXEC_AGENT =0x10,
00219 MC_ALL_SIGNALS =0x20
00220 };
00221
00225 typedef struct agency_s {
00226 int client;
00227 int server;
00228 char *hostName;
00229 char *filename;
00230 int portno;
00231 int portnoc;
00232 int initInterps;
00233 struct mc_platform_s* mc_platform;
00234 int default_agentstatus;
00235 int threads;
00236 int enable_security;
00237 int stack_size[MC_THREAD_ALL];
00238 int bluetooth;
00239
00240 char* priv_key_filename;
00241 char* known_host_filename;
00242 error_code_t last_error;
00243
00244
00245 MC_AgentInitCallbackFunc_t agentInitCallback;
00246 void* agentInitUserData;
00247 } agency_t;
00248 typedef agency_t* agency_p;
00249 typedef agency_p MCAgency_t;
00250
00254 typedef struct MCAgencyOptions_s{
00255 int threads;
00256 int default_agent_status;
00257 int modified;
00258 int enable_security;
00259 unsigned char passphrase[32];
00261
00262 int stack_size[MC_THREAD_ALL];
00264 char *known_host_filename;
00265 char *priv_key_filename;
00266 int initInterps;
00267 int bluetooth;
00268 ChOptions_t* ch_options;
00269
00270 unsigned long long initialized;
00271
00272
00273 } MCAgencyOptions_t;
00274 #define MC_INITIALIZED_CODE 63280583
00275
00276 typedef struct stationary_agent_info_s{
00277 void* args;
00278 struct agent_s* agent;
00279 MCAgency_t attr;
00280 MCAgency_t agency;
00281 THREAD_T thread;
00282 } stationary_agent_info_t;
00283
00284 #ifndef AGENT_T
00285 #define AGENT_T
00286 typedef struct agent_s agent_t;
00287 typedef agent_t* MCAgent_t;
00288 typedef agent_t* agent_p;
00289 #endif
00290
00291 enum MC_AgentType_e{ MC_NONE = -1, MC_REMOTE_AGENT = 0, MC_LOCAL_AGENT, MC_RETURN_AGENT };
00292
00296 enum MC_AgentStatus_e{
00297 MC_NO_STATUS = -1,
00298 MC_WAIT_CH = 0,
00299 MC_WAIT_MESSGSEND,
00300 MC_AGENT_ACTIVE,
00301 MC_AGENT_NEUTRAL,
00302 MC_AGENT_SUSPENDED,
00303 MC_WAIT_FINISHED
00304 };
00305
00307 struct fipa_acl_message_s;
00308 #ifndef _FIPA_PERFORMATIVE_E_
00309 #define _FIPA_PERFORMATIVE_E_
00310 enum fipa_performative_e
00311 {
00312 FIPA_ERROR=-1,
00313 FIPA_ZERO,
00314 FIPA_ACCEPT_PROPOSAL,
00315 FIPA_AGREE,
00316 FIPA_CANCEL,
00317 FIPA_CALL_FOR_PROPOSAL,
00318 FIPA_CONFIRM,
00319 FIPA_DISCONFIRM,
00320 FIPA_FAILURE,
00321 FIPA_INFORM,
00322 FIPA_INFORM_IF,
00323 FIPA_INFORM_REF,
00324 FIPA_NOT_UNDERSTOOD,
00325 FIPA_PROPOGATE,
00326 FIPA_PROPOSE,
00327 FIPA_PROXY,
00328 FIPA_QUERY_IF,
00329 FIPA_QUERY_REF,
00330 FIPA_REFUSE,
00331 FIPA_REJECT_PROPOSAL,
00332 FIPA_REQUEST,
00333 FIPA_REQUEST_WHEN,
00334 FIPA_REQUEST_WHENEVER,
00335 FIPA_SUBSCRIBE
00336 };
00337 #endif
00338
00346 EXPORTMC int
00347 MC_AclDestroy(struct fipa_acl_message_s* message);
00348
00354 EXPORTMC extern struct fipa_acl_message_s*
00355 MC_AclNew(void);
00356
00365 EXPORTMC extern int MC_AclPost(MCAgent_t agent, struct fipa_acl_message_s* message);
00366
00377 EXPORTMC extern struct fipa_acl_message_s*
00378 MC_AclReply(struct fipa_acl_message_s* acl_message);
00379
00387 EXPORTMC extern struct fipa_acl_message_s* MC_AclRetrieve(MCAgent_t agent);
00388
00397 EXPORTMC extern int MC_AclSend(MCAgency_t attr, struct fipa_acl_message_s* acl);
00398
00406 EXPORTMC extern struct fipa_acl_message_s* MC_AclWaitRetrieve(MCAgent_t agent);
00407
00408
00409 enum fipa_performative_e;
00410 enum fipa_protocol_e;
00411
00412 EXPORTMC enum fipa_protocol_e MC_AclGetProtocol(
00413 struct fipa_acl_message_s* acl);
00414
00415 EXPORTMC char* MC_AclGetConversationID(
00416 struct fipa_acl_message_s* acl);
00417
00418 EXPORTMC enum fipa_performative_e MC_AclGetPerformative(
00419 struct fipa_acl_message_s* acl);
00420
00421 EXPORTMC int MC_AclGetSender(
00422 struct fipa_acl_message_s* acl,
00423 char** name,
00424
00425 char** address
00426
00427 );
00428
00429 EXPORTMC const char* MC_AclGetContent(
00430 struct fipa_acl_message_s* acl);
00431
00432 EXPORTMC int MC_AclSetProtocol(
00433 struct fipa_acl_message_s* acl,
00434 enum fipa_protocol_e performative );
00435
00436 EXPORTMC int MC_AclSetConversationID(
00437 struct fipa_acl_message_s* acl,
00438 char* id);
00439
00440 EXPORTMC int MC_AclSetPerformative(
00441 struct fipa_acl_message_s* acl,
00442 enum fipa_performative_e performative );
00443
00444 EXPORTMC int MC_AclSetSender(
00445 struct fipa_acl_message_s* acl,
00446 const char* name,
00447 const char* address );
00448
00449 EXPORTMC int MC_AclAddReceiver(
00450 struct fipa_acl_message_s* acl,
00451 const char* name,
00452 const char* address );
00453
00454 EXPORTMC int MC_AclAddReplyTo(
00455 struct fipa_acl_message_s* acl,
00456 const char* name,
00457 const char* address);
00458
00459 EXPORTMC int MC_AclSetContent(
00460 struct fipa_acl_message_s* acl,
00461 const char* content );
00462
00463
00464
00465
00474 EXPORTMC extern int MC_AddAgent(
00475 MCAgency_t attr,
00476 MCAgent_t agent);
00477
00488 int MC_AddStationaryAgent(
00489 MCAgency_t agency,
00490 void* (*agent_thread)(stationary_agent_info_t*),
00491 const char* name,
00492 void* agent_args);
00493
00506 int MC_AddAgentInitCallback(
00507 MCAgency_t agency,
00508 MC_AgentInitCallbackFunc_t function,
00509 void* user_data);
00510
00523 int MC_AgentAddTask(
00524 MCAgent_t agent,
00525 const char* code,
00526 const char* return_var_name,
00527 const char* server,
00528 int persistent);
00529
00542 int MC_AgentAddTaskFromFile(
00543 MCAgent_t agent,
00544 const char* filename,
00545 const char* return_var_name,
00546 const char* server,
00547 int persistent);
00548
00557 extern MCAgency_t
00558 MC_AgentInfo_GetAgency(stationary_agent_info_t* stationary_agent_info);
00559
00570 extern MCAgent_t
00571 MC_AgentInfo_GetAgent(stationary_agent_info_t* stationary_agent_info);
00572
00581 extern void*
00582 MC_AgentInfo_GetAgentArgs(stationary_agent_info_t* stationary_agent_info);
00583
00592 extern int MC_AgentReturnArrayDim(
00593 MCAgent_t agent,
00594 int task_num );
00595
00605 extern int MC_AgentReturnArrayExtent(
00606 MCAgent_t agent,
00607 int task_num,
00608 int index);
00609
00619 extern int MC_AgentReturnArrayNum(
00620 MCAgent_t agent,
00621 int task_num);
00622
00632 extern const void* MC_AgentReturnDataGetSymbolAddr(
00633 MCAgent_t agent,
00634 int task_num );
00635
00644 extern size_t MC_AgentReturnDataSize(
00645 MCAgent_t agent,
00646 int task_num );
00647
00657 extern int MC_AgentReturnDataType(
00658 MCAgent_t agent,
00659 int task_num );
00660
00670 extern int MC_AgentReturnIsArray(
00671 MCAgent_t agent,
00672 int task_num );
00673
00689 extern const void*
00690 MC_AgentVariableRetrieve(
00691 MCAgent_t agent,
00692 const char* var_name,
00693 int task_num);
00694
00709 int
00710 MC_AgentVariableRetrieveInfo(
00711 MCAgent_t agent,
00712 const char* var_name,
00713 int task_num,
00714 const void** data,
00715 int* dim,
00716 const int** extent
00717 );
00718
00736 extern int
00737 MC_AgentVariableSave(MCAgent_t agent, const char* var_name);
00738
00739 EXPORTMC int
00740 MC_Barrier(MCAgency_t attr, int id);
00741
00751 EXPORTMC extern int MC_BarrierDelete(MCAgency_t attr, int id);
00752
00768 EXPORTMC extern int MC_BarrierInit(MCAgency_t attr, int id, int num_procs);
00769
00778 #ifdef OBS
00779 EXPORTMC extern int MC_ChInitializeOptions(MCAgency_t attr, ChOptions_t *options);
00780 #endif
00781
00782
00798 EXPORTMC int
00799 MC_CallAgentFunc(
00800 MCAgent_t agent,
00801 const char* funcName,
00802 void* returnVal,
00803 int numArgs,
00804 ...);
00805
00822 EXPORTMC extern int MC_CallAgentFuncArg(
00823 MCAgent_t agent,
00824 const char* funcName,
00825 void* returnVal,
00826 void* arg
00827 );
00828
00839 EXPORTMC extern int MC_CallAgentFuncV(
00840 MCAgent_t agent,
00841 const char* funcName,
00842 void* returnVal,
00843 va_list ap);
00844
00845
00846
00847
00848
00849
00850
00851
00852 EXPORTMC extern int MC_CallAgentFuncVar
00853 (
00854 MCAgent_t agent,
00855 const char* funcName,
00856 void* returnVal,
00857 ChVaList_t arglist
00858 );
00859
00860
00874 EXPORTMC extern MCAgent_t
00875 MC_ComposeAgent(
00876 const char* name,
00877 const char* home,
00878 const char* owner,
00879 const char* code,
00880 const char* return_var_name,
00881 const char* server,
00882 int persistent
00883 );
00884
00901 EXPORTMC extern MCAgent_t
00902 MC_ComposeAgentS(
00903 const char* name,
00904 const char* home,
00905 const char* owner,
00906 const char* code,
00907 const char* return_var_name,
00908 const char* server,
00909 int persistent,
00910 const char* workgroup_code
00911 );
00912
00928 EXPORTMC extern MCAgent_t
00929 MC_ComposeAgentWithWorkgroup(
00930 const char* name,
00931 const char* home,
00932 const char* owner,
00933 const char* code,
00934 const char* return_var_name,
00935 const char* server,
00936 int persistent,
00937 const char* workgroup_code
00938 );
00939
00954 EXPORTMC extern MCAgent_t
00955 MC_ComposeAgentFromFile(
00956 const char* name,
00957 const char* home,
00958 const char* owner,
00959 const char* filename,
00960 const char* return_var_name,
00961 const char* server,
00962 int persistent
00963 );
00964
00982 EXPORTMC extern MCAgent_t
00983 MC_ComposeAgentFromFileS(
00984 const char* name,
00985 const char* home,
00986 const char* owner,
00987 const char* filename,
00988 const char* return_var_name,
00989 const char* server,
00990 int persistent,
00991 const char* workgroup_code
00992 );
00993
01009 EXPORTMC extern MCAgent_t
01010 MC_ComposeAgentFromFileWithWorkgroup(
01011 const char* name,
01012 const char* home,
01013 const char* owner,
01014 const char* filename,
01015 const char* return_var_name,
01016 const char* server,
01017 int persistent,
01018 const char* workgroup_code
01019 );
01020
01031 EXPORTMC extern int MC_CondBroadcast(MCAgency_t attr, int id);
01032
01048 EXPORTMC extern int MC_CondSignal(MCAgency_t attr, int id);
01049
01060 EXPORTMC extern int MC_CondReset(MCAgency_t attr, int id);
01061
01075 EXPORTMC extern int MC_CondWait(MCAgency_t attr, int id);
01076
01086 int MC_CopyAgent(MCAgent_t* agent_out, const MCAgent_t agent_in);
01087
01096 EXPORTMC extern int MC_DeleteAgent(MCAgent_t agent);
01097
01109 EXPORTMC extern int MC_DeleteAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01110
01121 EXPORTMC extern int MC_End(MCAgency_t attr);
01122
01133 int MC_DestroyServiceSearchResult(
01134 char** agentName,
01135 char** serviceName,
01136 int* agentID,
01137 int numResult);
01138
01139
01150 EXPORTMC extern MCAgent_t MC_FindAgentByName(MCAgency_t attr, const char *name);
01151
01160 EXPORTMC extern MCAgent_t MC_FindAgentByID(MCAgency_t attr, int ID);
01161
01170 EXPORTMC extern void* MC_GetAgentExecEngine(MCAgent_t agent);
01171
01175 EXPORTMC extern int MC_GetAgentID(MCAgent_t agent);
01176
01177
01178
01179
01180
01181
01182 EXPORTMC extern char* MC_GetAgentName(MCAgent_t agent);
01183
01189 EXPORTMC extern int MC_GetAgentNumTasks(MCAgent_t agent);
01190
01207 EXPORTMC extern int MC_GetAgentReturnData(
01208 MCAgent_t agent,
01209 int task_num,
01210 void **data,
01211 int *dim,
01212 int **extent);
01213
01219 EXPORTMC extern int MC_GetAgentStatus(MCAgent_t agent);
01220
01226 EXPORTMC extern enum MC_AgentType_e MC_GetAgentType(MCAgent_t agent);
01227
01233 EXPORTMC extern char* MC_GetAgentXMLString(MCAgent_t agent);
01234
01242 EXPORTMC extern int MC_HaltAgency(MCAgency_t agency);
01243
01254 EXPORTMC extern MCAgency_t MC_Initialize(
01255 int port,
01256 MCAgencyOptions_t *options);
01257
01270 EXPORTMC extern int MC_InitializeAgencyOptions(struct MCAgencyOptions_s* options);
01271
01277 EXPORTMC extern int MC_MainLoop(MCAgency_t attr);
01278
01287 EXPORTMC extern int MC_LoadAgentFromFile(MCAgency_t attr, const char* filename);
01288
01298 EXPORTMC extern int MC_MigrateAgent(MCAgent_t agent, const char* hostname, int port);
01299
01314 EXPORTMC extern int MC_MutexLock(MCAgency_t attr, int id);
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326 EXPORTMC extern int MC_MutexUnlock(MCAgency_t attr, int id);
01327
01345 EXPORTMC extern int MC_RegisterService(
01346 MCAgency_t agency,
01347
01348
01349
01350 MCAgent_t agent,
01351 int agentID,
01352 const char *agentName,
01353 char **serviceNames,
01354 int numServices);
01355
01363 EXPORTMC extern int MC_ResumeAgency(MCAgency_t agency);
01364
01370 EXPORTMC extern MCAgent_t MC_RetrieveAgent(MCAgency_t attr);
01371
01383 EXPORTMC extern int MC_SemaphorePost(MCAgency_t attr, int id);
01384
01398 EXPORTMC extern int MC_SemaphoreWait(MCAgency_t attr, int id);
01399
01411 EXPORTMC extern int MC_SetDefaultAgentStatus(MCAgency_t agency, enum MC_AgentStatus_e status);
01412
01426 EXPORTMC extern int MC_SetThreadOn(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index);
01427
01436 EXPORTMC extern int MC_SetThreadsAllOn(MCAgencyOptions_t* options);
01437
01451 EXPORTMC extern int MC_SetThreadOff(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index );
01452
01461 EXPORTMC extern int MC_SetThreadsAllOff(MCAgencyOptions_t* options);
01462
01468 EXPORTMC extern int MC_PrintAgentCode(MCAgent_t agent);
01469
01475 EXPORTMC extern char * MC_RetrieveAgentCode(MCAgent_t agent);
01476
01484 EXPORTMC extern int MC_ResetSignal(MCAgency_t attr);
01485
01501 EXPORTMC extern int MC_SearchForService(
01502
01503 MCAgency_t attr,
01504 const char *searchString,
01505
01506 char*** agentNames,
01507 char*** serviceNames,
01508 int** agentIDs,
01509 int* numResults);
01510
01517 EXPORTMC extern int MC_SendAgent(MCAgency_t attr,
01518 const char *message);
01519
01526 EXPORTMC extern int MC_SendAgentFile(MCAgency_t attr,
01527 const char *filename);
01528
01537 EXPORTMC extern int MC_SendAgentMigrationMessage(MCAgency_t attr,
01538 const char *message,
01539 const char *hostname,
01540 int port);
01541
01550 EXPORTMC extern int MC_SendAgentMigrationMessageFile(MCAgency_t attr,
01551 const char *filename,
01552 const char *hostname,
01553 int port);
01554
01563 EXPORTMC extern int MC_SetAgentStatus(MCAgent_t agent, enum MC_AgentStatus_e status);
01564
01580 EXPORTMC extern int MC_Steer( MCAgency_t attr, int (*funcptr)(void* data), void *arg);
01581
01590 EXPORTMC extern enum MC_SteerCommand_e MC_SteerControl(void);
01591
01600 EXPORTMC extern int MC_SyncDelete(MCAgency_t attr, int id);
01601
01617 EXPORTMC extern int MC_SyncInit(MCAgency_t attr, int id);
01618
01624 EXPORTMC extern int MC_TerminateAgent(MCAgent_t agent);
01625
01626
01627 EXPORTMC extern int
01628 MC_TerminateAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01634
01635
01642 EXPORTMC extern int MC_WaitAgent(MCAgency_t attr);
01643
01652 EXPORTMC extern MCAgent_t MC_WaitRetrieveAgent(MCAgency_t attr);
01653
01667 EXPORTMC extern int MC_WaitSignal(MCAgency_t attr, int signals);
01668
01669 #ifdef __cplusplus
01670 }
01671 #endif
01672
01673 #endif
01674