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 #endif
00131
00132 #ifndef THREAD_T
00133 #ifdef _WIN32
00134 #define THREAD_T HANDLE
00135 #else
00136 #define THREAD_T pthread_t
00137 #endif
00138 #endif
00139
00140 #ifdef WIN32
00141 #ifdef _MC_DLL
00142
00143 #define EXPORTMC _declspec(dllexport)
00144 #else
00145
00146 #define EXPORTMC
00147 #endif
00148 #else
00149
00150 #define EXPORTMC
00151 #endif
00152
00153
00154
00155 #define MC_Wait(arg1) \
00156 MC_MainLoop(arg1)
00157
00158 #include <embedch.h>
00159 #ifdef __cplusplus
00160 extern "C" {
00161 #endif
00162
00163 #ifndef _ERROR_CODE_E_
00164 #define _ERROR_CODE_E_
00165
00166
00167
00168
00169 typedef enum error_code_e {
00170 MC_SUCCESS = 0,
00171 MC_ERR,
00172 MC_ERR_CONNECT,
00173 MC_ERR_PARSE,
00174 MC_ERR_EMPTY,
00175 MC_ERR_INVALID,
00176 MC_ERR_INVALID_ARGS,
00177 MC_ERR_NOT_FOUND,
00178 MC_ERR_MEMORY,
00179 MC_ERR_SEND,
00180 MC_WARN_DUPLICATE
00181 } error_code_t;
00182 #endif
00183
00187 enum MC_ThreadIndex_e{
00188 MC_THREAD_DF=0,
00189 MC_THREAD_AMS,
00190 MC_THREAD_ACC,
00191 MC_THREAD_CP,
00192 MC_THREAD_AGENT,
00193 MC_THREAD_ALL };
00194
00195
00199 typedef enum MC_SteerCommand_e {
00200 MC_RUN = 0,
00201 MC_SUSPEND,
00202 MC_RESTART,
00203 MC_STOP
00204 } MC_SteerCommand_t;
00205
00214 enum MC_Signal_e{
00215 MC_NO_SIGNAL =0x00,
00216 MC_RECV_CONNECTION=0x01,
00217 MC_RECV_MESSAGE =0x02,
00218 MC_RECV_AGENT =0x04,
00219 MC_RECV_RETURN =0x08,
00220 MC_EXEC_AGENT =0x10,
00221 MC_ALL_SIGNALS =0x20
00222 };
00223
00227 typedef struct agency_s {
00228 int client;
00229 int server;
00230 char *hostName;
00231 char *filename;
00232 int portno;
00233 int portnoc;
00234 int initInterps;
00235 struct mc_platform_s* mc_platform;
00236 int default_agentstatus;
00237 int threads;
00238 int enable_security;
00239 int stack_size[MC_THREAD_ALL];
00240
00241 char* priv_key_filename;
00242 char* known_host_filename;
00243 error_code_t last_error;
00244 } agency_t;
00245 typedef agency_t* agency_p;
00246 typedef agency_p MCAgency_t;
00247
00251 typedef struct MCAgencyOptions_s{
00252 int threads;
00253 int default_agent_status;
00254 int modified;
00255 int enable_security;
00256 unsigned char passphrase[32];
00258
00259 int stack_size[MC_THREAD_ALL];
00261 char *known_host_filename;
00262 char *priv_key_filename;
00263 int initInterps;
00264 ChOptions_t* ch_options;
00265 } MCAgencyOptions_t;
00266
00267 typedef struct stationary_agent_info_s{
00268 void* args;
00269 struct agent_s* agent;
00270 MCAgency_t attr;
00271 MCAgency_t agency;
00272 THREAD_T thread;
00273 } stationary_agent_info_t;
00274
00275 #ifndef AGENT_T
00276 #define AGENT_T
00277 typedef struct agent_s agent_t;
00278 typedef agent_t* MCAgent_t;
00279 typedef agent_t* agent_p;
00280 #endif
00281
00282 enum MC_AgentType_e{ MC_NONE = -1, MC_REMOTE_AGENT = 0, MC_LOCAL_AGENT, MC_RETURN_AGENT };
00283
00287 enum MC_AgentStatus_e{
00288 MC_NO_STATUS = -1,
00289 MC_WAIT_CH = 0,
00290 MC_WAIT_MESSGSEND,
00291 MC_AGENT_ACTIVE,
00292 MC_AGENT_NEUTRAL,
00293 MC_AGENT_SUSPENDED,
00294 MC_WAIT_FINISHED
00295 };
00296
00298 struct fipa_acl_message_s;
00299 #ifndef _FIPA_PERFORMATIVE_E_
00300 #define _FIPA_PERFORMATIVE_E_
00301 enum fipa_performative_e
00302 {
00303 FIPA_ERROR=-1,
00304 FIPA_ZERO,
00305 FIPA_ACCEPT_PROPOSAL,
00306 FIPA_AGREE,
00307 FIPA_CANCEL,
00308 FIPA_CALL_FOR_PROPOSAL,
00309 FIPA_CONFIRM,
00310 FIPA_DISCONFIRM,
00311 FIPA_FAILURE,
00312 FIPA_INFORM,
00313 FIPA_INFORM_IF,
00314 FIPA_INFORM_REF,
00315 FIPA_NOT_UNDERSTOOD,
00316 FIPA_PROPOGATE,
00317 FIPA_PROPOSE,
00318 FIPA_PROXY,
00319 FIPA_QUERY_IF,
00320 FIPA_QUERY_REF,
00321 FIPA_REFUSE,
00322 FIPA_REJECT_PROPOSAL,
00323 FIPA_REQUEST,
00324 FIPA_REQUEST_WHEN,
00325 FIPA_REQUEST_WHENEVER,
00326 FIPA_SUBSCRIBE
00327 };
00328 #endif
00329
00337 EXPORTMC int
00338 MC_AclDestroy(struct fipa_acl_message_s* message);
00339
00345 EXPORTMC extern struct fipa_acl_message_s*
00346 MC_AclNew(void);
00347
00356 EXPORTMC extern int MC_AclPost(MCAgent_t agent, struct fipa_acl_message_s* message);
00357
00368 EXPORTMC extern struct fipa_acl_message_s*
00369 MC_AclReply(struct fipa_acl_message_s* acl_message);
00370
00378 EXPORTMC extern struct fipa_acl_message_s* MC_AclRetrieve(MCAgent_t agent);
00379
00388 EXPORTMC extern int MC_AclSend(MCAgency_t attr, struct fipa_acl_message_s* acl);
00389
00397 EXPORTMC extern struct fipa_acl_message_s* MC_AclWaitRetrieve(MCAgent_t agent);
00398
00399
00400 enum fipa_performative_e;
00401 enum fipa_protocol_e;
00402
00403 EXPORTMC enum fipa_protocol_e MC_AclGetProtocol(
00404 struct fipa_acl_message_s* acl);
00405
00406 EXPORTMC char* MC_AclGetConversationID(
00407 struct fipa_acl_message_s* acl);
00408
00409 EXPORTMC enum fipa_performative_e MC_AclGetPerformative(
00410 struct fipa_acl_message_s* acl);
00411
00412 EXPORTMC int MC_AclGetSender(
00413 struct fipa_acl_message_s* acl,
00414 char** name,
00415
00416 char** address
00417
00418 );
00419
00420 EXPORTMC const char* MC_AclGetContent(
00421 struct fipa_acl_message_s* acl);
00422
00423 EXPORTMC int MC_AclSetProtocol(
00424 struct fipa_acl_message_s* acl,
00425 enum fipa_protocol_e performative );
00426
00427 EXPORTMC int MC_AclSetConversationID(
00428 struct fipa_acl_message_s* acl,
00429 char* id);
00430
00431 EXPORTMC int MC_AclSetPerformative(
00432 struct fipa_acl_message_s* acl,
00433 enum fipa_performative_e performative );
00434
00435 EXPORTMC int MC_AclSetSender(
00436 struct fipa_acl_message_s* acl,
00437 const char* name,
00438 const char* address );
00439
00440 EXPORTMC int MC_AclAddReceiver(
00441 struct fipa_acl_message_s* acl,
00442 const char* name,
00443 const char* address );
00444
00445 EXPORTMC int MC_AclAddReplyTo(
00446 struct fipa_acl_message_s* acl,
00447 const char* name,
00448 const char* address);
00449
00450 EXPORTMC int MC_AclSetContent(
00451 struct fipa_acl_message_s* acl,
00452 const char* content );
00453
00454
00455
00456
00465 EXPORTMC extern int MC_AddAgent(
00466 MCAgency_t attr,
00467 MCAgent_t agent);
00468
00469
00470 int MC_AddStationaryAgent(
00471 MCAgency_t agency,
00472 void* (*agent_thread)(stationary_agent_info_t*),
00473 const char* name,
00474 void* agent_args);
00475
00476
00489 int MC_AgentAddTask(
00490 MCAgent_t agent,
00491 const char* code,
00492 const char* return_var_name,
00493 const char* server,
00494 int persistent);
00495
00508 int MC_AgentAddTaskFromFile(
00509 MCAgent_t agent,
00510 const char* filename,
00511 const char* return_var_name,
00512 const char* server,
00513 int persistent);
00514
00523 extern MCAgency_t
00524 MC_AgentInfo_GetAgency(stationary_agent_info_t* stationary_agent_info);
00525
00536 extern MCAgent_t
00537 MC_AgentInfo_GetAgent(stationary_agent_info_t* stationary_agent_info);
00538
00547 extern void*
00548 MC_AgentInfo_GetAgentArgs(stationary_agent_info_t* stationary_agent_info);
00549
00558 extern int MC_AgentReturnArrayDim(
00559 MCAgent_t agent,
00560 int task_num );
00561
00571 extern int MC_AgentReturnArrayExtent(
00572 MCAgent_t agent,
00573 int task_num,
00574 int index);
00575
00585 extern int MC_AgentReturnArrayNum(
00586 MCAgent_t agent,
00587 int task_num);
00588
00598 extern const void* MC_AgentReturnDataGetSymbolAddr(
00599 MCAgent_t agent,
00600 int task_num );
00601
00610 extern size_t MC_AgentReturnDataSize(
00611 MCAgent_t agent,
00612 int task_num );
00613
00623 extern int MC_AgentReturnDataType(
00624 MCAgent_t agent,
00625 int task_num );
00626
00636 extern int MC_AgentReturnIsArray(
00637 MCAgent_t agent,
00638 int task_num );
00639
00655 extern const void*
00656 MC_AgentVariableRetrieve(
00657 MCAgent_t agent,
00658 const char* var_name,
00659 int task_num);
00660
00675 int
00676 MC_AgentVariableRetrieveInfo(
00677 MCAgent_t agent,
00678 const char* var_name,
00679 int task_num,
00680 const void** data,
00681 int* dim,
00682 const int** extent
00683 );
00684
00702 extern int
00703 MC_AgentVariableSave(MCAgent_t agent, const char* var_name);
00704
00705 EXPORTMC int
00706 MC_Barrier(MCAgency_t attr, int id);
00707
00717 EXPORTMC extern int MC_BarrierDelete(MCAgency_t attr, int id);
00718
00734 EXPORTMC extern int MC_BarrierInit(MCAgency_t attr, int id, int num_procs);
00735
00744 #ifdef OBS
00745 EXPORTMC extern int MC_ChInitializeOptions(MCAgency_t attr, ChOptions_t *options);
00746 #endif
00747
00748
00764 EXPORTMC int
00765 MC_CallAgentFunc(
00766 MCAgent_t agent,
00767 const char* funcName,
00768 void* returnVal,
00769 int numArgs,
00770 ...);
00771
00788 EXPORTMC extern int MC_CallAgentFuncArg(
00789 MCAgent_t agent,
00790 const char* funcName,
00791 void* returnVal,
00792 void* arg
00793 );
00794
00805 EXPORTMC extern int MC_CallAgentFuncV(
00806 MCAgent_t agent,
00807 const char* funcName,
00808 void* returnVal,
00809 va_list ap);
00810
00811
00812
00813
00814
00815
00816
00817
00818 EXPORTMC extern int MC_CallAgentFuncVar
00819 (
00820 MCAgent_t agent,
00821 const char* funcName,
00822 void* returnVal,
00823 ChVaList_t arglist
00824 );
00825
00826
00840 EXPORTMC extern MCAgent_t
00841 MC_ComposeAgent(
00842 const char* name,
00843 const char* home,
00844 const char* owner,
00845 const char* code,
00846 const char* return_var_name,
00847 const char* server,
00848 int persistent
00849 );
00850
00867 EXPORTMC extern MCAgent_t
00868 MC_ComposeAgentS(
00869 const char* name,
00870 const char* home,
00871 const char* owner,
00872 const char* code,
00873 const char* return_var_name,
00874 const char* server,
00875 int persistent,
00876 const char* workgroup_code
00877 );
00878
00894 EXPORTMC extern MCAgent_t
00895 MC_ComposeAgentWithWorkgroup(
00896 const char* name,
00897 const char* home,
00898 const char* owner,
00899 const char* code,
00900 const char* return_var_name,
00901 const char* server,
00902 int persistent,
00903 const char* workgroup_code
00904 );
00905
00920 EXPORTMC extern MCAgent_t
00921 MC_ComposeAgentFromFile(
00922 const char* name,
00923 const char* home,
00924 const char* owner,
00925 const char* filename,
00926 const char* return_var_name,
00927 const char* server,
00928 int persistent
00929 );
00930
00948 EXPORTMC extern MCAgent_t
00949 MC_ComposeAgentFromFileS(
00950 const char* name,
00951 const char* home,
00952 const char* owner,
00953 const char* filename,
00954 const char* return_var_name,
00955 const char* server,
00956 int persistent,
00957 const char* workgroup_code
00958 );
00959
00975 EXPORTMC extern MCAgent_t
00976 MC_ComposeAgentFromFileWithWorkgroup(
00977 const char* name,
00978 const char* home,
00979 const char* owner,
00980 const char* filename,
00981 const char* return_var_name,
00982 const char* server,
00983 int persistent,
00984 const char* workgroup_code
00985 );
00986
00997 EXPORTMC extern int MC_CondBroadcast(MCAgency_t attr, int id);
00998
01014 EXPORTMC extern int MC_CondSignal(MCAgency_t attr, int id);
01015
01026 EXPORTMC extern int MC_CondReset(MCAgency_t attr, int id);
01027
01041 EXPORTMC extern int MC_CondWait(MCAgency_t attr, int id);
01042
01052 int MC_CopyAgent(MCAgent_t* agent_out, const MCAgent_t agent_in);
01053
01062 EXPORTMC extern int MC_DeleteAgent(MCAgent_t agent);
01063
01075 EXPORTMC extern int MC_DeleteAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01076
01087 EXPORTMC extern int MC_End(MCAgency_t attr);
01088
01099 int MC_DestroyServiceSearchResult(
01100 char** agentName,
01101 char** serviceName,
01102 int* agentID,
01103 int numResult);
01104
01105
01116 EXPORTMC extern MCAgent_t MC_FindAgentByName(MCAgency_t attr, const char *name);
01117
01126 EXPORTMC extern MCAgent_t MC_FindAgentByID(MCAgency_t attr, int ID);
01127
01136 EXPORTMC extern void* MC_GetAgentExecEngine(MCAgent_t agent);
01137
01141 EXPORTMC extern int MC_GetAgentID(MCAgent_t agent);
01142
01143
01144
01145
01146
01147
01148 EXPORTMC extern char* MC_GetAgentName(MCAgent_t agent);
01149
01155 EXPORTMC extern int MC_GetAgentNumTasks(MCAgent_t agent);
01156
01173 EXPORTMC extern int MC_GetAgentReturnData(
01174 MCAgent_t agent,
01175 int task_num,
01176 void **data,
01177 int *dim,
01178 int **extent);
01179
01185 EXPORTMC extern int MC_GetAgentStatus(MCAgent_t agent);
01186
01192 EXPORTMC extern enum MC_AgentType_e MC_GetAgentType(MCAgent_t agent);
01193
01199 EXPORTMC extern char* MC_GetAgentXMLString(MCAgent_t agent);
01200
01208 EXPORTMC extern int MC_HaltAgency(MCAgency_t agency);
01209
01220 EXPORTMC extern MCAgency_t MC_Initialize(
01221 int port,
01222 MCAgencyOptions_t *options);
01223
01236 EXPORTMC extern int MC_InitializeAgencyOptions(struct MCAgencyOptions_s* options);
01237
01243 EXPORTMC extern int MC_MainLoop(MCAgency_t attr);
01244
01253 EXPORTMC extern int MC_LoadAgentFromFile(MCAgency_t attr, const char* filename);
01254
01264 EXPORTMC extern int MC_MigrateAgent(MCAgent_t agent, const char* hostname, int port);
01265
01280 EXPORTMC extern int MC_MutexLock(MCAgency_t attr, int id);
01281
01282
01283
01284
01285
01286
01287
01288
01289
01290
01291
01292 EXPORTMC extern int MC_MutexUnlock(MCAgency_t attr, int id);
01293
01311 EXPORTMC extern int MC_RegisterService(
01312 MCAgency_t agency,
01313
01314
01315
01316 MCAgent_t agent,
01317 int agentID,
01318 const char *agentName,
01319 char **serviceNames,
01320 int numServices);
01321
01329 EXPORTMC extern int MC_ResumeAgency(MCAgency_t agency);
01330
01336 EXPORTMC extern MCAgent_t MC_RetrieveAgent(MCAgency_t attr);
01337
01349 EXPORTMC extern int MC_SemaphorePost(MCAgency_t attr, int id);
01350
01364 EXPORTMC extern int MC_SemaphoreWait(MCAgency_t attr, int id);
01365
01377 EXPORTMC extern int MC_SetDefaultAgentStatus(MCAgency_t agency, enum MC_AgentStatus_e status);
01378
01392 EXPORTMC extern int MC_SetThreadOn(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index);
01393
01402 EXPORTMC extern int MC_SetThreadsAllOn(MCAgencyOptions_t* options);
01403
01417 EXPORTMC extern int MC_SetThreadOff(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index );
01418
01427 EXPORTMC extern int MC_SetThreadsAllOff(MCAgencyOptions_t* options);
01428
01434 EXPORTMC extern int MC_PrintAgentCode(MCAgent_t agent);
01435
01441 EXPORTMC extern char * MC_RetrieveAgentCode(MCAgent_t agent);
01442
01450 EXPORTMC extern int MC_ResetSignal(MCAgency_t attr);
01451
01467 EXPORTMC extern int MC_SearchForService(
01468
01469 MCAgency_t attr,
01470 const char *searchString,
01471
01472 char*** agentNames,
01473 char*** serviceNames,
01474 int** agentIDs,
01475 int* numResults);
01476
01483 EXPORTMC extern int MC_SendAgent(MCAgency_t attr,
01484 const char *message);
01485
01492 EXPORTMC extern int MC_SendAgentFile(MCAgency_t attr,
01493 const char *filename);
01494
01503 EXPORTMC extern int MC_SendAgentMigrationMessage(MCAgency_t attr,
01504 const char *message,
01505 const char *hostname,
01506 int port);
01507
01516 EXPORTMC extern int MC_SendAgentMigrationMessageFile(MCAgency_t attr,
01517 const char *filename,
01518 const char *hostname,
01519 int port);
01520
01529 EXPORTMC extern int MC_SetAgentStatus(MCAgent_t agent, enum MC_AgentStatus_e status);
01530
01546 EXPORTMC extern int MC_Steer( MCAgency_t attr, int (*funcptr)(void* data), void *arg);
01547
01556 EXPORTMC extern enum MC_SteerCommand_e MC_SteerControl(void);
01557
01566 EXPORTMC extern int MC_SyncDelete(MCAgency_t attr, int id);
01567
01583 EXPORTMC extern int MC_SyncInit(MCAgency_t attr, int id);
01584
01590 EXPORTMC extern int MC_TerminateAgent(MCAgent_t agent);
01591
01592
01593 EXPORTMC extern int
01594 MC_TerminateAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01600
01601
01608 EXPORTMC extern int MC_WaitAgent(MCAgency_t attr);
01609
01618 EXPORTMC extern MCAgent_t MC_WaitRetrieveAgent(MCAgency_t attr);
01619
01633 EXPORTMC extern int MC_WaitSignal(MCAgency_t attr, int signals);
01634
01635 #ifdef __cplusplus
01636 }
01637 #endif
01638
01639 #endif
01640