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
00539 EXPORTMC int MC_AgentAttachFile(
00540 MCAgent_t agent,
00541 const char* name,
00542 const char* filepath);
00543
00556 EXPORTMC int MC_AgentListFiles(
00557 MCAgent_t agent,
00558 int task_num,
00559 char*** names,
00560 int* num_files );
00561
00567 EXPORTMC int MC_AgentRetrieveFile(
00568 MCAgent_t agent,
00569 int task_num,
00570 const char* name,
00571 const char* save_path);
00572
00585 int MC_AgentAddTaskFromFile(
00586 MCAgent_t agent,
00587 const char* filename,
00588 const char* return_var_name,
00589 const char* server,
00590 int persistent);
00591
00600 extern MCAgency_t
00601 MC_AgentInfo_GetAgency(stationary_agent_info_t* stationary_agent_info);
00602
00613 extern MCAgent_t
00614 MC_AgentInfo_GetAgent(stationary_agent_info_t* stationary_agent_info);
00615
00624 extern void*
00625 MC_AgentInfo_GetAgentArgs(stationary_agent_info_t* stationary_agent_info);
00626
00635 extern int MC_AgentReturnArrayDim(
00636 MCAgent_t agent,
00637 int task_num );
00638
00648 extern int MC_AgentReturnArrayExtent(
00649 MCAgent_t agent,
00650 int task_num,
00651 int index);
00652
00662 extern int MC_AgentReturnArrayNum(
00663 MCAgent_t agent,
00664 int task_num);
00665
00675 extern const void* MC_AgentReturnDataGetSymbolAddr(
00676 MCAgent_t agent,
00677 int task_num );
00678
00687 extern size_t MC_AgentReturnDataSize(
00688 MCAgent_t agent,
00689 int task_num );
00690
00700 extern int MC_AgentReturnDataType(
00701 MCAgent_t agent,
00702 int task_num );
00703
00713 extern int MC_AgentReturnIsArray(
00714 MCAgent_t agent,
00715 int task_num );
00716
00732 extern const void*
00733 MC_AgentVariableRetrieve(
00734 MCAgent_t agent,
00735 const char* var_name,
00736 int task_num);
00737
00752 int
00753 MC_AgentVariableRetrieveInfo(
00754 MCAgent_t agent,
00755 const char* var_name,
00756 int task_num,
00757 const void** data,
00758 int* dim,
00759 const int** extent
00760 );
00761
00779 extern int
00780 MC_AgentVariableSave(MCAgent_t agent, const char* var_name);
00781
00782 EXPORTMC int
00783 MC_Barrier(MCAgency_t attr, int id);
00784
00794 EXPORTMC extern int MC_BarrierDelete(MCAgency_t attr, int id);
00795
00811 EXPORTMC extern int MC_BarrierInit(MCAgency_t attr, int id, int num_procs);
00812
00821 #ifdef OBS
00822 EXPORTMC extern int MC_ChInitializeOptions(MCAgency_t attr, ChOptions_t *options);
00823 #endif
00824
00825
00841 EXPORTMC int
00842 MC_CallAgentFunc(
00843 MCAgent_t agent,
00844 const char* funcName,
00845 void* returnVal,
00846 int numArgs,
00847 ...);
00848
00865 EXPORTMC extern int MC_CallAgentFuncArg(
00866 MCAgent_t agent,
00867 const char* funcName,
00868 void* returnVal,
00869 void* arg
00870 );
00871
00882 EXPORTMC extern int MC_CallAgentFuncV(
00883 MCAgent_t agent,
00884 const char* funcName,
00885 void* returnVal,
00886 va_list ap);
00887
00888
00889
00890
00891
00892
00893
00894
00895 EXPORTMC extern int MC_CallAgentFuncVar
00896 (
00897 MCAgent_t agent,
00898 const char* funcName,
00899 void* returnVal,
00900 ChVaList_t arglist
00901 );
00902
00903
00917 EXPORTMC extern MCAgent_t
00918 MC_ComposeAgent(
00919 const char* name,
00920 const char* home,
00921 const char* owner,
00922 const char* code,
00923 const char* return_var_name,
00924 const char* server,
00925 int persistent
00926 );
00927
00944 EXPORTMC extern MCAgent_t
00945 MC_ComposeAgentS(
00946 const char* name,
00947 const char* home,
00948 const char* owner,
00949 const char* code,
00950 const char* return_var_name,
00951 const char* server,
00952 int persistent,
00953 const char* workgroup_code
00954 );
00955
00971 EXPORTMC extern MCAgent_t
00972 MC_ComposeAgentWithWorkgroup(
00973 const char* name,
00974 const char* home,
00975 const char* owner,
00976 const char* code,
00977 const char* return_var_name,
00978 const char* server,
00979 int persistent,
00980 const char* workgroup_code
00981 );
00982
00997 EXPORTMC extern MCAgent_t
00998 MC_ComposeAgentFromFile(
00999 const char* name,
01000 const char* home,
01001 const char* owner,
01002 const char* filename,
01003 const char* return_var_name,
01004 const char* server,
01005 int persistent
01006 );
01007
01025 EXPORTMC extern MCAgent_t
01026 MC_ComposeAgentFromFileS(
01027 const char* name,
01028 const char* home,
01029 const char* owner,
01030 const char* filename,
01031 const char* return_var_name,
01032 const char* server,
01033 int persistent,
01034 const char* workgroup_code
01035 );
01036
01052 EXPORTMC extern MCAgent_t
01053 MC_ComposeAgentFromFileWithWorkgroup(
01054 const char* name,
01055 const char* home,
01056 const char* owner,
01057 const char* filename,
01058 const char* return_var_name,
01059 const char* server,
01060 int persistent,
01061 const char* workgroup_code
01062 );
01063
01074 EXPORTMC extern int MC_CondBroadcast(MCAgency_t attr, int id);
01075
01091 EXPORTMC extern int MC_CondSignal(MCAgency_t attr, int id);
01092
01103 EXPORTMC extern int MC_CondReset(MCAgency_t attr, int id);
01104
01118 EXPORTMC extern int MC_CondWait(MCAgency_t attr, int id);
01119
01129 int MC_CopyAgent(MCAgent_t* agent_out, const MCAgent_t agent_in);
01130
01139 EXPORTMC extern int MC_DeleteAgent(MCAgent_t agent);
01140
01152 EXPORTMC extern int MC_DeleteAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01153
01164 EXPORTMC extern int MC_End(MCAgency_t attr);
01165
01176 int MC_DestroyServiceSearchResult(
01177 char** agentName,
01178 char** serviceName,
01179 int* agentID,
01180 int numResult);
01181
01182
01193 EXPORTMC extern MCAgent_t MC_FindAgentByName(MCAgency_t attr, const char *name);
01194
01203 EXPORTMC extern MCAgent_t MC_FindAgentByID(MCAgency_t attr, int ID);
01204
01213 EXPORTMC extern void* MC_GetAgentExecEngine(MCAgent_t agent);
01214
01218 EXPORTMC extern int MC_GetAgentID(MCAgent_t agent);
01219
01220
01221
01222
01223
01224
01225 EXPORTMC extern char* MC_GetAgentName(MCAgent_t agent);
01226
01232 EXPORTMC extern int MC_GetAgentNumTasks(MCAgent_t agent);
01233
01250 EXPORTMC extern int MC_GetAgentReturnData(
01251 MCAgent_t agent,
01252 int task_num,
01253 void **data,
01254 int *dim,
01255 int **extent);
01256
01262 EXPORTMC extern int MC_GetAgentStatus(MCAgent_t agent);
01263
01269 EXPORTMC extern enum MC_AgentType_e MC_GetAgentType(MCAgent_t agent);
01270
01276 EXPORTMC extern char* MC_GetAgentXMLString(MCAgent_t agent);
01277
01285 EXPORTMC extern int MC_HaltAgency(MCAgency_t agency);
01286
01297 EXPORTMC extern MCAgency_t MC_Initialize(
01298 int port,
01299 MCAgencyOptions_t *options);
01300
01313 EXPORTMC extern int MC_InitializeAgencyOptions(struct MCAgencyOptions_s* options);
01314
01320 EXPORTMC extern int MC_MainLoop(MCAgency_t attr);
01321
01330 EXPORTMC extern int MC_LoadAgentFromFile(MCAgency_t attr, const char* filename);
01331
01341 EXPORTMC extern int MC_MigrateAgent(MCAgent_t agent, const char* hostname, int port);
01342
01357 EXPORTMC extern int MC_MutexLock(MCAgency_t attr, int id);
01358
01359
01360
01361
01362
01363
01364
01365
01366
01367
01368
01369 EXPORTMC extern int MC_MutexUnlock(MCAgency_t attr, int id);
01370
01388 EXPORTMC extern int MC_RegisterService(
01389 MCAgency_t agency,
01390
01391
01392
01393 MCAgent_t agent,
01394 int agentID,
01395 const char *agentName,
01396 char **serviceNames,
01397 int numServices);
01398
01406 EXPORTMC extern int MC_ResumeAgency(MCAgency_t agency);
01407
01413 EXPORTMC extern MCAgent_t MC_RetrieveAgent(MCAgency_t attr);
01414
01426 EXPORTMC extern int MC_SemaphorePost(MCAgency_t attr, int id);
01427
01441 EXPORTMC extern int MC_SemaphoreWait(MCAgency_t attr, int id);
01442
01454 EXPORTMC extern int MC_SetDefaultAgentStatus(MCAgency_t agency, enum MC_AgentStatus_e status);
01455
01469 EXPORTMC extern int MC_SetThreadOn(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index);
01470
01479 EXPORTMC extern int MC_SetThreadsAllOn(MCAgencyOptions_t* options);
01480
01494 EXPORTMC extern int MC_SetThreadOff(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index );
01495
01504 EXPORTMC extern int MC_SetThreadsAllOff(MCAgencyOptions_t* options);
01505
01511 EXPORTMC extern int MC_PrintAgentCode(MCAgent_t agent);
01512
01518 EXPORTMC extern char * MC_RetrieveAgentCode(MCAgent_t agent);
01519
01527 EXPORTMC extern int MC_ResetSignal(MCAgency_t attr);
01528
01544 EXPORTMC extern int MC_SearchForService(
01545
01546 MCAgency_t attr,
01547 const char *searchString,
01548
01549 char*** agentNames,
01550 char*** serviceNames,
01551 int** agentIDs,
01552 int* numResults);
01553
01560 EXPORTMC extern int MC_SendAgent(MCAgency_t attr,
01561 const char *message);
01562
01569 EXPORTMC extern int MC_SendAgentFile(MCAgency_t attr,
01570 const char *filename);
01571
01580 EXPORTMC extern int MC_SendAgentMigrationMessage(MCAgency_t attr,
01581 const char *message,
01582 const char *hostname,
01583 int port);
01584
01593 EXPORTMC extern int MC_SendAgentMigrationMessageFile(MCAgency_t attr,
01594 const char *filename,
01595 const char *hostname,
01596 int port);
01597
01606 EXPORTMC extern int MC_SetAgentStatus(MCAgent_t agent, enum MC_AgentStatus_e status);
01607
01623 EXPORTMC extern int MC_Steer( MCAgency_t attr, int (*funcptr)(void* data), void *arg);
01624
01633 EXPORTMC extern enum MC_SteerCommand_e MC_SteerControl(void);
01634
01643 EXPORTMC extern int MC_SyncDelete(MCAgency_t attr, int id);
01644
01660 EXPORTMC extern int MC_SyncInit(MCAgency_t attr, int id);
01661
01667 EXPORTMC extern int MC_TerminateAgent(MCAgent_t agent);
01668
01669
01670 EXPORTMC extern int
01671 MC_TerminateAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01677
01678
01685 EXPORTMC extern int MC_WaitAgent(MCAgency_t attr);
01686
01695 EXPORTMC extern MCAgent_t MC_WaitRetrieveAgent(MCAgency_t attr);
01696
01710 EXPORTMC extern int MC_WaitSignal(MCAgency_t attr, int signals);
01711
01712 #ifdef __cplusplus
01713 }
01714 #endif
01715
01716 #endif
01717