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 int bluetooth;
00241
00242 char* priv_key_filename;
00243 char* known_host_filename;
00244 error_code_t last_error;
00245 } agency_t;
00246 typedef agency_t* agency_p;
00247 typedef agency_p MCAgency_t;
00248
00252 typedef struct MCAgencyOptions_s{
00253 int threads;
00254 int default_agent_status;
00255 int modified;
00256 int enable_security;
00257 unsigned char passphrase[32];
00259
00260 int stack_size[MC_THREAD_ALL];
00262 char *known_host_filename;
00263 char *priv_key_filename;
00264 int initInterps;
00265 int bluetooth;
00266 ChOptions_t* ch_options;
00267 } MCAgencyOptions_t;
00268
00269 typedef struct stationary_agent_info_s{
00270 void* args;
00271 struct agent_s* agent;
00272 MCAgency_t attr;
00273 MCAgency_t agency;
00274 THREAD_T thread;
00275 } stationary_agent_info_t;
00276
00277 #ifndef AGENT_T
00278 #define AGENT_T
00279 typedef struct agent_s agent_t;
00280 typedef agent_t* MCAgent_t;
00281 typedef agent_t* agent_p;
00282 #endif
00283
00284 enum MC_AgentType_e{ MC_NONE = -1, MC_REMOTE_AGENT = 0, MC_LOCAL_AGENT, MC_RETURN_AGENT };
00285
00289 enum MC_AgentStatus_e{
00290 MC_NO_STATUS = -1,
00291 MC_WAIT_CH = 0,
00292 MC_WAIT_MESSGSEND,
00293 MC_AGENT_ACTIVE,
00294 MC_AGENT_NEUTRAL,
00295 MC_AGENT_SUSPENDED,
00296 MC_WAIT_FINISHED
00297 };
00298
00300 struct fipa_acl_message_s;
00301 #ifndef _FIPA_PERFORMATIVE_E_
00302 #define _FIPA_PERFORMATIVE_E_
00303 enum fipa_performative_e
00304 {
00305 FIPA_ERROR=-1,
00306 FIPA_ZERO,
00307 FIPA_ACCEPT_PROPOSAL,
00308 FIPA_AGREE,
00309 FIPA_CANCEL,
00310 FIPA_CALL_FOR_PROPOSAL,
00311 FIPA_CONFIRM,
00312 FIPA_DISCONFIRM,
00313 FIPA_FAILURE,
00314 FIPA_INFORM,
00315 FIPA_INFORM_IF,
00316 FIPA_INFORM_REF,
00317 FIPA_NOT_UNDERSTOOD,
00318 FIPA_PROPOGATE,
00319 FIPA_PROPOSE,
00320 FIPA_PROXY,
00321 FIPA_QUERY_IF,
00322 FIPA_QUERY_REF,
00323 FIPA_REFUSE,
00324 FIPA_REJECT_PROPOSAL,
00325 FIPA_REQUEST,
00326 FIPA_REQUEST_WHEN,
00327 FIPA_REQUEST_WHENEVER,
00328 FIPA_SUBSCRIBE
00329 };
00330 #endif
00331
00339 EXPORTMC int
00340 MC_AclDestroy(struct fipa_acl_message_s* message);
00341
00347 EXPORTMC extern struct fipa_acl_message_s*
00348 MC_AclNew(void);
00349
00358 EXPORTMC extern int MC_AclPost(MCAgent_t agent, struct fipa_acl_message_s* message);
00359
00370 EXPORTMC extern struct fipa_acl_message_s*
00371 MC_AclReply(struct fipa_acl_message_s* acl_message);
00372
00380 EXPORTMC extern struct fipa_acl_message_s* MC_AclRetrieve(MCAgent_t agent);
00381
00390 EXPORTMC extern int MC_AclSend(MCAgency_t attr, struct fipa_acl_message_s* acl);
00391
00399 EXPORTMC extern struct fipa_acl_message_s* MC_AclWaitRetrieve(MCAgent_t agent);
00400
00401
00402 enum fipa_performative_e;
00403 enum fipa_protocol_e;
00404
00405 EXPORTMC enum fipa_protocol_e MC_AclGetProtocol(
00406 struct fipa_acl_message_s* acl);
00407
00408 EXPORTMC char* MC_AclGetConversationID(
00409 struct fipa_acl_message_s* acl);
00410
00411 EXPORTMC enum fipa_performative_e MC_AclGetPerformative(
00412 struct fipa_acl_message_s* acl);
00413
00414 EXPORTMC int MC_AclGetSender(
00415 struct fipa_acl_message_s* acl,
00416 char** name,
00417
00418 char** address
00419
00420 );
00421
00422 EXPORTMC const char* MC_AclGetContent(
00423 struct fipa_acl_message_s* acl);
00424
00425 EXPORTMC int MC_AclSetProtocol(
00426 struct fipa_acl_message_s* acl,
00427 enum fipa_protocol_e performative );
00428
00429 EXPORTMC int MC_AclSetConversationID(
00430 struct fipa_acl_message_s* acl,
00431 char* id);
00432
00433 EXPORTMC int MC_AclSetPerformative(
00434 struct fipa_acl_message_s* acl,
00435 enum fipa_performative_e performative );
00436
00437 EXPORTMC int MC_AclSetSender(
00438 struct fipa_acl_message_s* acl,
00439 const char* name,
00440 const char* address );
00441
00442 EXPORTMC int MC_AclAddReceiver(
00443 struct fipa_acl_message_s* acl,
00444 const char* name,
00445 const char* address );
00446
00447 EXPORTMC int MC_AclAddReplyTo(
00448 struct fipa_acl_message_s* acl,
00449 const char* name,
00450 const char* address);
00451
00452 EXPORTMC int MC_AclSetContent(
00453 struct fipa_acl_message_s* acl,
00454 const char* content );
00455
00456
00457
00458
00467 EXPORTMC extern int MC_AddAgent(
00468 MCAgency_t attr,
00469 MCAgent_t agent);
00470
00471
00472 int MC_AddStationaryAgent(
00473 MCAgency_t agency,
00474 void* (*agent_thread)(stationary_agent_info_t*),
00475 const char* name,
00476 void* agent_args);
00477
00478
00491 int MC_AgentAddTask(
00492 MCAgent_t agent,
00493 const char* code,
00494 const char* return_var_name,
00495 const char* server,
00496 int persistent);
00497
00510 int MC_AgentAddTaskFromFile(
00511 MCAgent_t agent,
00512 const char* filename,
00513 const char* return_var_name,
00514 const char* server,
00515 int persistent);
00516
00525 extern MCAgency_t
00526 MC_AgentInfo_GetAgency(stationary_agent_info_t* stationary_agent_info);
00527
00538 extern MCAgent_t
00539 MC_AgentInfo_GetAgent(stationary_agent_info_t* stationary_agent_info);
00540
00549 extern void*
00550 MC_AgentInfo_GetAgentArgs(stationary_agent_info_t* stationary_agent_info);
00551
00560 extern int MC_AgentReturnArrayDim(
00561 MCAgent_t agent,
00562 int task_num );
00563
00573 extern int MC_AgentReturnArrayExtent(
00574 MCAgent_t agent,
00575 int task_num,
00576 int index);
00577
00587 extern int MC_AgentReturnArrayNum(
00588 MCAgent_t agent,
00589 int task_num);
00590
00600 extern const void* MC_AgentReturnDataGetSymbolAddr(
00601 MCAgent_t agent,
00602 int task_num );
00603
00612 extern size_t MC_AgentReturnDataSize(
00613 MCAgent_t agent,
00614 int task_num );
00615
00625 extern int MC_AgentReturnDataType(
00626 MCAgent_t agent,
00627 int task_num );
00628
00638 extern int MC_AgentReturnIsArray(
00639 MCAgent_t agent,
00640 int task_num );
00641
00657 extern const void*
00658 MC_AgentVariableRetrieve(
00659 MCAgent_t agent,
00660 const char* var_name,
00661 int task_num);
00662
00677 int
00678 MC_AgentVariableRetrieveInfo(
00679 MCAgent_t agent,
00680 const char* var_name,
00681 int task_num,
00682 const void** data,
00683 int* dim,
00684 const int** extent
00685 );
00686
00704 extern int
00705 MC_AgentVariableSave(MCAgent_t agent, const char* var_name);
00706
00707 EXPORTMC int
00708 MC_Barrier(MCAgency_t attr, int id);
00709
00719 EXPORTMC extern int MC_BarrierDelete(MCAgency_t attr, int id);
00720
00736 EXPORTMC extern int MC_BarrierInit(MCAgency_t attr, int id, int num_procs);
00737
00746 #ifdef OBS
00747 EXPORTMC extern int MC_ChInitializeOptions(MCAgency_t attr, ChOptions_t *options);
00748 #endif
00749
00750
00766 EXPORTMC int
00767 MC_CallAgentFunc(
00768 MCAgent_t agent,
00769 const char* funcName,
00770 void* returnVal,
00771 int numArgs,
00772 ...);
00773
00790 EXPORTMC extern int MC_CallAgentFuncArg(
00791 MCAgent_t agent,
00792 const char* funcName,
00793 void* returnVal,
00794 void* arg
00795 );
00796
00807 EXPORTMC extern int MC_CallAgentFuncV(
00808 MCAgent_t agent,
00809 const char* funcName,
00810 void* returnVal,
00811 va_list ap);
00812
00813
00814
00815
00816
00817
00818
00819
00820 EXPORTMC extern int MC_CallAgentFuncVar
00821 (
00822 MCAgent_t agent,
00823 const char* funcName,
00824 void* returnVal,
00825 ChVaList_t arglist
00826 );
00827
00828
00842 EXPORTMC extern MCAgent_t
00843 MC_ComposeAgent(
00844 const char* name,
00845 const char* home,
00846 const char* owner,
00847 const char* code,
00848 const char* return_var_name,
00849 const char* server,
00850 int persistent
00851 );
00852
00869 EXPORTMC extern MCAgent_t
00870 MC_ComposeAgentS(
00871 const char* name,
00872 const char* home,
00873 const char* owner,
00874 const char* code,
00875 const char* return_var_name,
00876 const char* server,
00877 int persistent,
00878 const char* workgroup_code
00879 );
00880
00896 EXPORTMC extern MCAgent_t
00897 MC_ComposeAgentWithWorkgroup(
00898 const char* name,
00899 const char* home,
00900 const char* owner,
00901 const char* code,
00902 const char* return_var_name,
00903 const char* server,
00904 int persistent,
00905 const char* workgroup_code
00906 );
00907
00922 EXPORTMC extern MCAgent_t
00923 MC_ComposeAgentFromFile(
00924 const char* name,
00925 const char* home,
00926 const char* owner,
00927 const char* filename,
00928 const char* return_var_name,
00929 const char* server,
00930 int persistent
00931 );
00932
00950 EXPORTMC extern MCAgent_t
00951 MC_ComposeAgentFromFileS(
00952 const char* name,
00953 const char* home,
00954 const char* owner,
00955 const char* filename,
00956 const char* return_var_name,
00957 const char* server,
00958 int persistent,
00959 const char* workgroup_code
00960 );
00961
00977 EXPORTMC extern MCAgent_t
00978 MC_ComposeAgentFromFileWithWorkgroup(
00979 const char* name,
00980 const char* home,
00981 const char* owner,
00982 const char* filename,
00983 const char* return_var_name,
00984 const char* server,
00985 int persistent,
00986 const char* workgroup_code
00987 );
00988
00999 EXPORTMC extern int MC_CondBroadcast(MCAgency_t attr, int id);
01000
01016 EXPORTMC extern int MC_CondSignal(MCAgency_t attr, int id);
01017
01028 EXPORTMC extern int MC_CondReset(MCAgency_t attr, int id);
01029
01043 EXPORTMC extern int MC_CondWait(MCAgency_t attr, int id);
01044
01054 int MC_CopyAgent(MCAgent_t* agent_out, const MCAgent_t agent_in);
01055
01064 EXPORTMC extern int MC_DeleteAgent(MCAgent_t agent);
01065
01077 EXPORTMC extern int MC_DeleteAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01078
01089 EXPORTMC extern int MC_End(MCAgency_t attr);
01090
01101 int MC_DestroyServiceSearchResult(
01102 char** agentName,
01103 char** serviceName,
01104 int* agentID,
01105 int numResult);
01106
01107
01118 EXPORTMC extern MCAgent_t MC_FindAgentByName(MCAgency_t attr, const char *name);
01119
01128 EXPORTMC extern MCAgent_t MC_FindAgentByID(MCAgency_t attr, int ID);
01129
01138 EXPORTMC extern void* MC_GetAgentExecEngine(MCAgent_t agent);
01139
01143 EXPORTMC extern int MC_GetAgentID(MCAgent_t agent);
01144
01145
01146
01147
01148
01149
01150 EXPORTMC extern char* MC_GetAgentName(MCAgent_t agent);
01151
01157 EXPORTMC extern int MC_GetAgentNumTasks(MCAgent_t agent);
01158
01175 EXPORTMC extern int MC_GetAgentReturnData(
01176 MCAgent_t agent,
01177 int task_num,
01178 void **data,
01179 int *dim,
01180 int **extent);
01181
01187 EXPORTMC extern int MC_GetAgentStatus(MCAgent_t agent);
01188
01194 EXPORTMC extern enum MC_AgentType_e MC_GetAgentType(MCAgent_t agent);
01195
01201 EXPORTMC extern char* MC_GetAgentXMLString(MCAgent_t agent);
01202
01210 EXPORTMC extern int MC_HaltAgency(MCAgency_t agency);
01211
01222 EXPORTMC extern MCAgency_t MC_Initialize(
01223 int port,
01224 MCAgencyOptions_t *options);
01225
01238 EXPORTMC extern int MC_InitializeAgencyOptions(struct MCAgencyOptions_s* options);
01239
01245 EXPORTMC extern int MC_MainLoop(MCAgency_t attr);
01246
01255 EXPORTMC extern int MC_LoadAgentFromFile(MCAgency_t attr, const char* filename);
01256
01266 EXPORTMC extern int MC_MigrateAgent(MCAgent_t agent, const char* hostname, int port);
01267
01282 EXPORTMC extern int MC_MutexLock(MCAgency_t attr, int id);
01283
01284
01285
01286
01287
01288
01289
01290
01291
01292
01293
01294 EXPORTMC extern int MC_MutexUnlock(MCAgency_t attr, int id);
01295
01313 EXPORTMC extern int MC_RegisterService(
01314 MCAgency_t agency,
01315
01316
01317
01318 MCAgent_t agent,
01319 int agentID,
01320 const char *agentName,
01321 char **serviceNames,
01322 int numServices);
01323
01331 EXPORTMC extern int MC_ResumeAgency(MCAgency_t agency);
01332
01338 EXPORTMC extern MCAgent_t MC_RetrieveAgent(MCAgency_t attr);
01339
01351 EXPORTMC extern int MC_SemaphorePost(MCAgency_t attr, int id);
01352
01366 EXPORTMC extern int MC_SemaphoreWait(MCAgency_t attr, int id);
01367
01379 EXPORTMC extern int MC_SetDefaultAgentStatus(MCAgency_t agency, enum MC_AgentStatus_e status);
01380
01394 EXPORTMC extern int MC_SetThreadOn(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index);
01395
01404 EXPORTMC extern int MC_SetThreadsAllOn(MCAgencyOptions_t* options);
01405
01419 EXPORTMC extern int MC_SetThreadOff(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index );
01420
01429 EXPORTMC extern int MC_SetThreadsAllOff(MCAgencyOptions_t* options);
01430
01436 EXPORTMC extern int MC_PrintAgentCode(MCAgent_t agent);
01437
01443 EXPORTMC extern char * MC_RetrieveAgentCode(MCAgent_t agent);
01444
01452 EXPORTMC extern int MC_ResetSignal(MCAgency_t attr);
01453
01469 EXPORTMC extern int MC_SearchForService(
01470
01471 MCAgency_t attr,
01472 const char *searchString,
01473
01474 char*** agentNames,
01475 char*** serviceNames,
01476 int** agentIDs,
01477 int* numResults);
01478
01485 EXPORTMC extern int MC_SendAgent(MCAgency_t attr,
01486 const char *message);
01487
01494 EXPORTMC extern int MC_SendAgentFile(MCAgency_t attr,
01495 const char *filename);
01496
01505 EXPORTMC extern int MC_SendAgentMigrationMessage(MCAgency_t attr,
01506 const char *message,
01507 const char *hostname,
01508 int port);
01509
01518 EXPORTMC extern int MC_SendAgentMigrationMessageFile(MCAgency_t attr,
01519 const char *filename,
01520 const char *hostname,
01521 int port);
01522
01531 EXPORTMC extern int MC_SetAgentStatus(MCAgent_t agent, enum MC_AgentStatus_e status);
01532
01548 EXPORTMC extern int MC_Steer( MCAgency_t attr, int (*funcptr)(void* data), void *arg);
01549
01558 EXPORTMC extern enum MC_SteerCommand_e MC_SteerControl(void);
01559
01568 EXPORTMC extern int MC_SyncDelete(MCAgency_t attr, int id);
01569
01585 EXPORTMC extern int MC_SyncInit(MCAgency_t attr, int id);
01586
01592 EXPORTMC extern int MC_TerminateAgent(MCAgent_t agent);
01593
01594
01595 EXPORTMC extern int
01596 MC_TerminateAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01602
01603
01610 EXPORTMC extern int MC_WaitAgent(MCAgency_t attr);
01611
01620 EXPORTMC extern MCAgent_t MC_WaitRetrieveAgent(MCAgency_t attr);
01621
01635 EXPORTMC extern int MC_WaitSignal(MCAgency_t attr, int signals);
01636
01637 #ifdef __cplusplus
01638 }
01639 #endif
01640
01641 #endif
01642