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 #ifdef _WIN32
00129 #include<windows.h>
00130 #ifdef _MC_DLL
00131
00132 #define EXPORTMC _declspec(dllexport)
00133 #else
00134
00135 #define EXPORTMC
00136 #endif
00137 #else
00138
00139 #define EXPORTMC
00140 #endif
00141
00142
00143
00144 #define MC_Wait(arg1) \
00145 MC_MainLoop(arg1)
00146
00147 #include <embedch.h>
00148 #ifdef __cplusplus
00149 extern "C" {
00150 #endif
00151
00152
00153
00154 struct agent_s;
00155 typedef int (*MC_AgentInitCallbackFunc_t)(
00156 ChInterp_t interp,
00157 struct agent_s* agent,
00158 void* user_data);
00159
00160 #ifndef _ERROR_CODE_E_
00161 #define _ERROR_CODE_E_
00162
00163
00164
00165
00166 typedef enum error_code_e {
00167 MC_SUCCESS = 0,
00168 MC_ERR,
00169 MC_ERR_CONNECT,
00170 MC_ERR_PARSE,
00171 MC_ERR_EMPTY,
00172 MC_ERR_INVALID,
00173 MC_ERR_INVALID_ARGS,
00174 MC_ERR_NOT_FOUND,
00175 MC_ERR_MEMORY,
00176 MC_ERR_SEND,
00177 MC_WARN_DUPLICATE
00178 } error_code_t;
00179 #endif
00180
00184 enum MC_ThreadIndex_e{
00185 MC_THREAD_DF=0,
00186 MC_THREAD_AMS,
00187 MC_THREAD_ACC,
00188 MC_THREAD_CP,
00189 MC_THREAD_AGENT,
00190 MC_THREAD_ALL };
00191
00192
00196 typedef enum MC_SteerCommand_e {
00197 MC_RUN = 0,
00198 MC_SUSPEND,
00199 MC_RESTART,
00200 MC_STOP
00201 } MC_SteerCommand_t;
00202
00211 enum MC_Signal_e{
00212 MC_NO_SIGNAL =0x00,
00213 MC_RECV_CONNECTION=0x01,
00214 MC_RECV_MESSAGE =0x02,
00215 MC_RECV_AGENT =0x04,
00216 MC_RECV_RETURN =0x08,
00217 MC_EXEC_AGENT =0x10,
00218 MC_ALL_SIGNALS =0x20
00219 };
00220
00224 typedef struct agency_s {
00225 int client;
00226 int server;
00227 char *hostName;
00228 char *filename;
00229 int portno;
00230 int portnoc;
00231 int initInterps;
00232 struct mc_platform_s* mc_platform;
00233 int default_agentstatus;
00234 int threads;
00235 int enable_security;
00236 int stack_size[MC_THREAD_ALL];
00237 int bluetooth;
00238
00239 char* priv_key_filename;
00240 char* known_host_filename;
00241 error_code_t last_error;
00242
00243
00244 MC_AgentInitCallbackFunc_t agentInitCallback;
00245 void* agentInitUserData;
00246 } agency_t;
00247 typedef agency_t* agency_p;
00248 typedef agency_p MCAgency_t;
00249
00253 typedef struct MCAgencyOptions_s{
00254 int threads;
00255 int default_agent_status;
00256 int modified;
00257 int enable_security;
00258 unsigned char passphrase[32];
00260
00261 int stack_size[MC_THREAD_ALL];
00263 char *known_host_filename;
00264 char *priv_key_filename;
00265 int initInterps;
00266 int bluetooth;
00267 ChOptions_t* ch_options;
00268
00269 unsigned long long initialized;
00270
00271
00272 } MCAgencyOptions_t;
00273 #define MC_INITIALIZED_CODE 63280583
00274
00275 typedef struct stationary_agent_info_s{
00276 void* args;
00277 struct agent_s* agent;
00278 MCAgency_t attr;
00279 MCAgency_t agency;
00280 #ifdef _WIN32
00281 HANDLE thread;
00282 #else
00283 pthread_t thread;
00284 #endif
00285 } stationary_agent_info_t;
00286
00287 #ifndef AGENT_T
00288 #define AGENT_T
00289 typedef struct agent_s agent_t;
00290 typedef agent_t* MCAgent_t;
00291 typedef agent_t* agent_p;
00292 #endif
00293
00294 enum MC_AgentType_e{ MC_NONE = -1, MC_REMOTE_AGENT = 0, MC_LOCAL_AGENT, MC_RETURN_AGENT };
00295
00299 enum MC_AgentStatus_e{
00300 MC_NO_STATUS = -1,
00301 MC_WAIT_CH = 0,
00302 MC_WAIT_MESSGSEND,
00303 MC_AGENT_ACTIVE,
00304 MC_AGENT_NEUTRAL,
00305 MC_AGENT_SUSPENDED,
00306 MC_WAIT_FINISHED
00307 };
00308
00310 struct fipa_acl_message_s;
00311 #ifndef _FIPA_PERFORMATIVE_E_
00312 #define _FIPA_PERFORMATIVE_E_
00313 enum fipa_performative_e
00314 {
00315 FIPA_ERROR=-1,
00316 FIPA_ZERO,
00317 FIPA_ACCEPT_PROPOSAL,
00318 FIPA_AGREE,
00319 FIPA_CANCEL,
00320 FIPA_CALL_FOR_PROPOSAL,
00321 FIPA_CONFIRM,
00322 FIPA_DISCONFIRM,
00323 FIPA_FAILURE,
00324 FIPA_INFORM,
00325 FIPA_INFORM_IF,
00326 FIPA_INFORM_REF,
00327 FIPA_NOT_UNDERSTOOD,
00328 FIPA_PROPOGATE,
00329 FIPA_PROPOSE,
00330 FIPA_PROXY,
00331 FIPA_QUERY_IF,
00332 FIPA_QUERY_REF,
00333 FIPA_REFUSE,
00334 FIPA_REJECT_PROPOSAL,
00335 FIPA_REQUEST,
00336 FIPA_REQUEST_WHEN,
00337 FIPA_REQUEST_WHENEVER,
00338 FIPA_SUBSCRIBE
00339 };
00340 #endif
00341
00349 EXPORTMC int
00350 MC_AclDestroy(struct fipa_acl_message_s* message);
00351
00357 EXPORTMC extern struct fipa_acl_message_s*
00358 MC_AclNew(void);
00359
00368 EXPORTMC extern int MC_AclPost(MCAgent_t agent, struct fipa_acl_message_s* message);
00369
00380 EXPORTMC extern struct fipa_acl_message_s*
00381 MC_AclReply(struct fipa_acl_message_s* acl_message);
00382
00390 EXPORTMC extern struct fipa_acl_message_s* MC_AclRetrieve(MCAgent_t agent);
00391
00400 EXPORTMC extern int MC_AclSend(MCAgency_t attr, struct fipa_acl_message_s* acl);
00401
00409 EXPORTMC extern struct fipa_acl_message_s* MC_AclWaitRetrieve(MCAgent_t agent);
00410
00411
00412 enum fipa_performative_e;
00413 enum fipa_protocol_e;
00414
00415 EXPORTMC enum fipa_protocol_e MC_AclGetProtocol(
00416 struct fipa_acl_message_s* acl);
00417
00418 EXPORTMC char* MC_AclGetConversationID(
00419 struct fipa_acl_message_s* acl);
00420
00421 EXPORTMC enum fipa_performative_e MC_AclGetPerformative(
00422 struct fipa_acl_message_s* acl);
00423
00424 EXPORTMC int MC_AclGetSender(
00425 struct fipa_acl_message_s* acl,
00426 char** name,
00427
00428 char** address
00429
00430 );
00431
00432 EXPORTMC const char* MC_AclGetContent(
00433 struct fipa_acl_message_s* acl);
00434
00435 EXPORTMC int MC_AclSetProtocol(
00436 struct fipa_acl_message_s* acl,
00437 enum fipa_protocol_e performative );
00438
00439 EXPORTMC int MC_AclSetConversationID(
00440 struct fipa_acl_message_s* acl,
00441 const char* id);
00442
00443 EXPORTMC int MC_AclSetPerformative(
00444 struct fipa_acl_message_s* acl,
00445 enum fipa_performative_e performative );
00446
00447 EXPORTMC int MC_AclSetSender(
00448 struct fipa_acl_message_s* acl,
00449 const char* name,
00450 const char* address );
00451
00452 EXPORTMC int MC_AclAddReceiver(
00453 struct fipa_acl_message_s* acl,
00454 const char* name,
00455 const char* address );
00456
00457 EXPORTMC int MC_AclAddReplyTo(
00458 struct fipa_acl_message_s* acl,
00459 const char* name,
00460 const char* address);
00461
00462 EXPORTMC int MC_AclSetContent(
00463 struct fipa_acl_message_s* acl,
00464 const char* content );
00465
00466
00467
00468
00477 EXPORTMC extern int MC_AddAgent(
00478 MCAgency_t attr,
00479 MCAgent_t agent);
00480
00491 int MC_AddStationaryAgent(
00492 MCAgency_t agency,
00493 void* (*agent_thread)(stationary_agent_info_t*),
00494 const char* name,
00495 void* agent_args);
00496
00509 int MC_AddAgentInitCallback(
00510 MCAgency_t agency,
00511 MC_AgentInitCallbackFunc_t function,
00512 void* user_data);
00513
00526 int MC_AgentAddTask(
00527 MCAgent_t agent,
00528 const char* code,
00529 const char* return_var_name,
00530 const char* server,
00531 int persistent);
00532
00542 EXPORTMC int MC_AgentAttachFile(
00543 MCAgent_t agent,
00544 const char* name,
00545 const char* filepath);
00546
00559 EXPORTMC int MC_AgentListFiles(
00560 MCAgent_t agent,
00561 int task_num,
00562 char*** names,
00563 int* num_files );
00564
00570 EXPORTMC int MC_AgentRetrieveFile(
00571 MCAgent_t agent,
00572 int task_num,
00573 const char* name,
00574 const char* save_path);
00575
00588 int MC_AgentAddTaskFromFile(
00589 MCAgent_t agent,
00590 const char* filename,
00591 const char* return_var_name,
00592 const char* server,
00593 int persistent);
00594
00603 extern MCAgency_t
00604 MC_AgentInfo_GetAgency(stationary_agent_info_t* stationary_agent_info);
00605
00616 extern MCAgent_t
00617 MC_AgentInfo_GetAgent(stationary_agent_info_t* stationary_agent_info);
00618
00627 extern void*
00628 MC_AgentInfo_GetAgentArgs(stationary_agent_info_t* stationary_agent_info);
00629
00638 extern int MC_AgentReturnArrayDim(
00639 MCAgent_t agent,
00640 int task_num );
00641
00651 extern int MC_AgentReturnArrayExtent(
00652 MCAgent_t agent,
00653 int task_num,
00654 int index);
00655
00665 extern int MC_AgentReturnArrayNum(
00666 MCAgent_t agent,
00667 int task_num);
00668
00678 extern const void* MC_AgentReturnDataGetSymbolAddr(
00679 MCAgent_t agent,
00680 int task_num );
00681
00690 extern size_t MC_AgentReturnDataSize(
00691 MCAgent_t agent,
00692 int task_num );
00693
00703 extern int MC_AgentReturnDataType(
00704 MCAgent_t agent,
00705 int task_num );
00706
00716 extern int MC_AgentReturnIsArray(
00717 MCAgent_t agent,
00718 int task_num );
00719
00735 extern const void*
00736 MC_AgentVariableRetrieve(
00737 MCAgent_t agent,
00738 const char* var_name,
00739 int task_num);
00740
00755 int
00756 MC_AgentVariableRetrieveInfo(
00757 MCAgent_t agent,
00758 const char* var_name,
00759 int task_num,
00760 const void** data,
00761 int* dim,
00762 const int** extent
00763 );
00764
00782 extern int
00783 MC_AgentVariableSave(MCAgent_t agent, const char* var_name);
00784
00785 EXPORTMC int
00786 MC_Barrier(MCAgency_t attr, int id);
00787
00797 EXPORTMC extern int MC_BarrierDelete(MCAgency_t attr, int id);
00798
00814 EXPORTMC extern int MC_BarrierInit(MCAgency_t attr, int id, int num_procs);
00815
00824 #ifdef OBS
00825 EXPORTMC extern int MC_ChInitializeOptions(MCAgency_t attr, ChOptions_t *options);
00826 #endif
00827
00828
00844 EXPORTMC int
00845 MC_CallAgentFunc(
00846 MCAgent_t agent,
00847 const char* funcName,
00848 void* returnVal,
00849 int numArgs,
00850 ...);
00851
00868 EXPORTMC extern int MC_CallAgentFuncArg(
00869 MCAgent_t agent,
00870 const char* funcName,
00871 void* returnVal,
00872 void* arg
00873 );
00874
00885 EXPORTMC extern int MC_CallAgentFuncV(
00886 MCAgent_t agent,
00887 const char* funcName,
00888 void* returnVal,
00889 va_list ap);
00890
00891
00892
00893
00894
00895
00896
00897
00898 EXPORTMC extern int MC_CallAgentFuncVar
00899 (
00900 MCAgent_t agent,
00901 const char* funcName,
00902 void* returnVal,
00903 ChVaList_t arglist
00904 );
00905
00906
00920 EXPORTMC extern MCAgent_t
00921 MC_ComposeAgent(
00922 const char* name,
00923 const char* home,
00924 const char* owner,
00925 const char* code,
00926 const char* return_var_name,
00927 const char* server,
00928 int persistent
00929 );
00930
00947 EXPORTMC extern MCAgent_t
00948 MC_ComposeAgentS(
00949 const char* name,
00950 const char* home,
00951 const char* owner,
00952 const char* code,
00953 const char* return_var_name,
00954 const char* server,
00955 int persistent,
00956 const char* workgroup_code
00957 );
00958
00974 EXPORTMC extern MCAgent_t
00975 MC_ComposeAgentWithWorkgroup(
00976 const char* name,
00977 const char* home,
00978 const char* owner,
00979 const char* code,
00980 const char* return_var_name,
00981 const char* server,
00982 int persistent,
00983 const char* workgroup_code
00984 );
00985
01000 EXPORTMC extern MCAgent_t
01001 MC_ComposeAgentFromFile(
01002 const char* name,
01003 const char* home,
01004 const char* owner,
01005 const char* filename,
01006 const char* return_var_name,
01007 const char* server,
01008 int persistent
01009 );
01010
01028 EXPORTMC extern MCAgent_t
01029 MC_ComposeAgentFromFileS(
01030 const char* name,
01031 const char* home,
01032 const char* owner,
01033 const char* filename,
01034 const char* return_var_name,
01035 const char* server,
01036 int persistent,
01037 const char* workgroup_code
01038 );
01039
01055 EXPORTMC extern MCAgent_t
01056 MC_ComposeAgentFromFileWithWorkgroup(
01057 const char* name,
01058 const char* home,
01059 const char* owner,
01060 const char* filename,
01061 const char* return_var_name,
01062 const char* server,
01063 int persistent,
01064 const char* workgroup_code
01065 );
01066
01077 EXPORTMC extern int MC_CondBroadcast(MCAgency_t attr, int id);
01078
01094 EXPORTMC extern int MC_CondSignal(MCAgency_t attr, int id);
01095
01106 EXPORTMC extern int MC_CondReset(MCAgency_t attr, int id);
01107
01121 EXPORTMC extern int MC_CondWait(MCAgency_t attr, int id);
01122
01132 int MC_CopyAgent(MCAgent_t* agent_out, const MCAgent_t agent_in);
01133
01142 EXPORTMC extern int MC_DeleteAgent(MCAgent_t agent);
01143
01155 EXPORTMC extern int MC_DeleteAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01156
01167 EXPORTMC extern int MC_End(MCAgency_t attr);
01168
01179 int MC_DestroyServiceSearchResult(
01180 char** agentName,
01181 char** serviceName,
01182 int* agentID,
01183 int numResult);
01184
01185
01196 EXPORTMC extern MCAgent_t MC_FindAgentByName(MCAgency_t attr, const char *name);
01197
01206 EXPORTMC extern MCAgent_t MC_FindAgentByID(MCAgency_t attr, int ID);
01207
01216 EXPORTMC extern void* MC_GetAgentExecEngine(MCAgent_t agent);
01217
01221 EXPORTMC extern int MC_GetAgentID(MCAgent_t agent);
01222
01223
01224
01225
01226
01227
01228 EXPORTMC extern char* MC_GetAgentName(MCAgent_t agent);
01229
01235 EXPORTMC extern int MC_GetAgentNumTasks(MCAgent_t agent);
01236
01253 EXPORTMC extern int MC_GetAgentReturnData(
01254 MCAgent_t agent,
01255 int task_num,
01256 void **data,
01257 int *dim,
01258 int **extent);
01259
01265 EXPORTMC extern int MC_GetAgentStatus(MCAgent_t agent);
01266
01272 EXPORTMC extern enum MC_AgentType_e MC_GetAgentType(MCAgent_t agent);
01273
01284 EXPORTMC int
01285 MC_GetAllAgents(MCAgency_t attr, MCAgent_t **agents, int* num_agents);
01286
01292 EXPORTMC extern char* MC_GetAgentXMLString(MCAgent_t agent);
01293
01301 EXPORTMC extern int MC_HaltAgency(MCAgency_t agency);
01302
01313 EXPORTMC extern MCAgency_t MC_Initialize(
01314 int port,
01315 MCAgencyOptions_t *options);
01316
01329 EXPORTMC extern int MC_InitializeAgencyOptions(struct MCAgencyOptions_s* options);
01330
01336 EXPORTMC extern int MC_MainLoop(MCAgency_t attr);
01337
01346 EXPORTMC extern int MC_LoadAgentFromFile(MCAgency_t attr, const char* filename);
01347
01357 EXPORTMC extern int MC_MigrateAgent(MCAgent_t agent, const char* hostname, int port);
01358
01373 EXPORTMC extern int MC_MutexLock(MCAgency_t attr, int id);
01374
01375
01376
01377
01378
01379
01380
01381
01382
01383
01384
01385 EXPORTMC extern int MC_MutexUnlock(MCAgency_t attr, int id);
01386
01404 EXPORTMC extern int MC_RegisterService(
01405 MCAgency_t agency,
01406
01407
01408
01409 MCAgent_t agent,
01410 int agentID,
01411 const char *agentName,
01412 char **serviceNames,
01413 int numServices);
01414
01422 EXPORTMC extern int MC_ResumeAgency(MCAgency_t agency);
01423
01429 EXPORTMC extern MCAgent_t MC_RetrieveAgent(MCAgency_t attr);
01430
01442 EXPORTMC extern int MC_SemaphorePost(MCAgency_t attr, int id);
01443
01457 EXPORTMC extern int MC_SemaphoreWait(MCAgency_t attr, int id);
01458
01470 EXPORTMC extern int MC_SetDefaultAgentStatus(MCAgency_t agency, enum MC_AgentStatus_e status);
01471
01485 EXPORTMC extern int MC_SetThreadOn(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index);
01486
01495 EXPORTMC extern int MC_SetThreadsAllOn(MCAgencyOptions_t* options);
01496
01510 EXPORTMC extern int MC_SetThreadOff(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index );
01511
01520 EXPORTMC extern int MC_SetThreadsAllOff(MCAgencyOptions_t* options);
01521
01527 EXPORTMC extern int MC_PrintAgentCode(MCAgent_t agent);
01528
01534 EXPORTMC extern char * MC_RetrieveAgentCode(MCAgent_t agent);
01535
01543 EXPORTMC extern int MC_ResetSignal(MCAgency_t attr);
01544
01560 EXPORTMC extern int MC_SearchForService(
01561
01562 MCAgency_t attr,
01563 const char *searchString,
01564
01565 char*** agentNames,
01566 char*** serviceNames,
01567 int** agentIDs,
01568 int* numResults);
01569
01576 EXPORTMC extern int MC_SendAgent(MCAgency_t attr,
01577 const char *message);
01578
01585 EXPORTMC extern int MC_SendAgentFile(MCAgency_t attr,
01586 const char *filename);
01587
01596 EXPORTMC extern int MC_SendAgentMigrationMessage(MCAgency_t attr,
01597 const char *message,
01598 const char *hostname,
01599 int port);
01600
01609 EXPORTMC extern int MC_SendAgentMigrationMessageFile(MCAgency_t attr,
01610 const char *filename,
01611 const char *hostname,
01612 int port);
01613
01622 EXPORTMC extern int MC_SetAgentStatus(MCAgent_t agent, enum MC_AgentStatus_e status);
01623
01639 EXPORTMC extern int MC_Steer( MCAgency_t attr, int (*funcptr)(void* data), void *arg);
01640
01649 EXPORTMC extern enum MC_SteerCommand_e MC_SteerControl(void);
01650
01659 EXPORTMC extern int MC_SyncDelete(MCAgency_t attr, int id);
01660
01676 EXPORTMC extern int MC_SyncInit(MCAgency_t attr, int id);
01677
01683 EXPORTMC extern int MC_TerminateAgent(MCAgent_t agent);
01684
01685
01686 EXPORTMC extern int
01687 MC_TerminateAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01693
01694
01701 EXPORTMC extern int MC_WaitAgent(MCAgency_t attr);
01702
01711 EXPORTMC extern MCAgent_t MC_WaitRetrieveAgent(MCAgency_t attr);
01712
01726 EXPORTMC extern int MC_WaitSignal(MCAgency_t attr, int signals);
01727
01728 #ifdef __cplusplus
01729 }
01730 #endif
01731
01732 #endif
01733