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
00195 enum MC_QueueIndex_e{
00196 MC_QUEUE_MESSAGE,
00197 MC_QUEUE_AGENT,
00198 MC_QUEUE_CONNECTION,
00199 MC_QUEUE_SYNC,
00200 MC_QUEUE_BARRIER,
00201 MC_QUEUE_NUM
00202 };
00203
00207 typedef enum MC_SteerCommand_e {
00208 MC_RUN = 0,
00209 MC_SUSPEND,
00210 MC_RESTART,
00211 MC_STOP
00212 } MC_SteerCommand_t;
00213
00222 enum MC_Signal_e{
00223 MC_NO_SIGNAL =0x00,
00224 MC_RECV_CONNECTION=0x01,
00225 MC_RECV_MESSAGE =0x02,
00226 MC_RECV_AGENT =0x04,
00227 MC_RECV_RETURN =0x08,
00228 MC_EXEC_AGENT =0x10,
00229 MC_ALL_SIGNALS =0x20
00230 };
00231
00235 typedef struct agency_s {
00236 int client;
00237 int server;
00238 char *hostName;
00239 char *filename;
00240 int portno;
00241 int portnoc;
00242 int initInterps;
00243 struct mc_platform_s* mc_platform;
00244 int default_agentstatus;
00245 int threads;
00246 int enable_security;
00247 int stack_size[MC_THREAD_ALL];
00248 int bluetooth;
00249
00250 char* priv_key_filename;
00251 char* known_host_filename;
00252 error_code_t last_error;
00253
00254
00255 MC_AgentInitCallbackFunc_t agentInitCallback;
00256 void* agentInitUserData;
00257 } agency_t;
00258 typedef agency_t* agency_p;
00259 typedef agency_p MCAgency_t;
00260
00264 typedef struct MCAgencyOptions_s{
00265 int threads;
00266 int default_agent_status;
00267 int modified;
00268 int enable_security;
00269 unsigned char passphrase[32];
00271
00272 int stack_size[MC_THREAD_ALL];
00274 char *known_host_filename;
00275 char *priv_key_filename;
00276 int initInterps;
00277 int bluetooth;
00278 ChOptions_t* ch_options;
00279
00280 unsigned long long initialized;
00281
00282
00283 } MCAgencyOptions_t;
00284 #define MC_INITIALIZED_CODE 63280583
00285
00286 typedef struct stationary_agent_info_s{
00287 void* args;
00288 struct agent_s* agent;
00289 MCAgency_t attr;
00290 MCAgency_t agency;
00291 #ifdef _WIN32
00292 HANDLE thread;
00293 #else
00294 pthread_t thread;
00295 #endif
00296 } stationary_agent_info_t;
00297
00298 #ifndef AGENT_T
00299 #define AGENT_T
00300 typedef struct agent_s agent_t;
00301 typedef agent_t* MCAgent_t;
00302 typedef agent_t* agent_p;
00303 #endif
00304
00305 enum MC_AgentType_e{ MC_NONE = -1, MC_REMOTE_AGENT = 0, MC_LOCAL_AGENT, MC_RETURN_AGENT };
00306
00310 enum MC_AgentStatus_e{
00311 MC_NO_STATUS = -1,
00312 MC_WAIT_CH = 0,
00313 MC_WAIT_MESSGSEND,
00314 MC_AGENT_ACTIVE,
00315 MC_AGENT_NEUTRAL,
00316 MC_AGENT_SUSPENDED,
00317 MC_WAIT_FINISHED
00318 };
00319
00321 struct fipa_acl_message_s;
00322 #ifndef _FIPA_PERFORMATIVE_E_
00323 #define _FIPA_PERFORMATIVE_E_
00324 enum fipa_performative_e
00325 {
00326 FIPA_ERROR=-1,
00327 FIPA_ZERO,
00328 FIPA_ACCEPT_PROPOSAL,
00329 FIPA_AGREE,
00330 FIPA_CANCEL,
00331 FIPA_CALL_FOR_PROPOSAL,
00332 FIPA_CONFIRM,
00333 FIPA_DISCONFIRM,
00334 FIPA_FAILURE,
00335 FIPA_INFORM,
00336 FIPA_INFORM_IF,
00337 FIPA_INFORM_REF,
00338 FIPA_NOT_UNDERSTOOD,
00339 FIPA_PROPOGATE,
00340 FIPA_PROPOSE,
00341 FIPA_PROXY,
00342 FIPA_QUERY_IF,
00343 FIPA_QUERY_REF,
00344 FIPA_REFUSE,
00345 FIPA_REJECT_PROPOSAL,
00346 FIPA_REQUEST,
00347 FIPA_REQUEST_WHEN,
00348 FIPA_REQUEST_WHENEVER,
00349 FIPA_SUBSCRIBE
00350 };
00351 #endif
00352
00360 EXPORTMC int
00361 MC_AclDestroy(struct fipa_acl_message_s* message);
00362
00368 EXPORTMC extern struct fipa_acl_message_s*
00369 MC_AclNew(void);
00370
00379 EXPORTMC extern int MC_AclPost(MCAgent_t agent, struct fipa_acl_message_s* message);
00380
00391 EXPORTMC extern struct fipa_acl_message_s*
00392 MC_AclReply(struct fipa_acl_message_s* acl_message);
00393
00401 EXPORTMC extern struct fipa_acl_message_s* MC_AclRetrieve(MCAgent_t agent);
00402
00411 EXPORTMC extern int MC_AclSend(MCAgency_t attr, struct fipa_acl_message_s* acl);
00412
00420 EXPORTMC extern struct fipa_acl_message_s* MC_AclWaitRetrieve(MCAgent_t agent);
00421
00422
00423 enum fipa_performative_e;
00424 enum fipa_protocol_e;
00425
00426 EXPORTMC enum fipa_protocol_e MC_AclGetProtocol(
00427 struct fipa_acl_message_s* acl);
00428
00429 EXPORTMC char* MC_AclGetConversationID(
00430 struct fipa_acl_message_s* acl);
00431
00432 EXPORTMC enum fipa_performative_e MC_AclGetPerformative(
00433 struct fipa_acl_message_s* acl);
00434
00435 EXPORTMC int MC_AclGetSender(
00436 struct fipa_acl_message_s* acl,
00437 char** name,
00438
00439 char** address
00440
00441 );
00442
00443 EXPORTMC const char* MC_AclGetContent(
00444 struct fipa_acl_message_s* acl);
00445
00446 EXPORTMC int MC_AclSetProtocol(
00447 struct fipa_acl_message_s* acl,
00448 enum fipa_protocol_e performative );
00449
00450 EXPORTMC int MC_AclSetConversationID(
00451 struct fipa_acl_message_s* acl,
00452 const char* id);
00453
00454 EXPORTMC int MC_AclSetPerformative(
00455 struct fipa_acl_message_s* acl,
00456 enum fipa_performative_e performative );
00457
00458 EXPORTMC int MC_AclSetSender(
00459 struct fipa_acl_message_s* acl,
00460 const char* name,
00461 const char* address );
00462
00463 EXPORTMC int MC_AclAddReceiver(
00464 struct fipa_acl_message_s* acl,
00465 const char* name,
00466 const char* address );
00467
00468 EXPORTMC int MC_AclAddReplyTo(
00469 struct fipa_acl_message_s* acl,
00470 const char* name,
00471 const char* address);
00472
00473 EXPORTMC int MC_AclSetContent(
00474 struct fipa_acl_message_s* acl,
00475 const char* content );
00476
00477
00478
00479
00488 EXPORTMC extern int MC_AddAgent(
00489 MCAgency_t attr,
00490 MCAgent_t agent);
00491
00502 int MC_AddStationaryAgent(
00503 MCAgency_t agency,
00504 void* (*agent_thread)(stationary_agent_info_t*),
00505 const char* name,
00506 void* agent_args);
00507
00520 int MC_AddAgentInitCallback(
00521 MCAgency_t agency,
00522 MC_AgentInitCallbackFunc_t function,
00523 void* user_data);
00524
00537 int MC_AgentAddTask(
00538 MCAgent_t agent,
00539 const char* code,
00540 const char* return_var_name,
00541 const char* server,
00542 int persistent);
00543
00553 EXPORTMC int MC_AgentAttachFile(
00554 MCAgent_t agent,
00555 const char* name,
00556 const char* filepath);
00557
00570 EXPORTMC int MC_AgentListFiles(
00571 MCAgent_t agent,
00572 int task_num,
00573 char*** names,
00574 int* num_files );
00575
00583 EXPORTMC int MC_AgentProcessingBegin(MCAgency_t attr);
00584 EXPORTMC int MC_AgentProcessingEnd(MCAgency_t attr);
00585
00591 EXPORTMC int MC_AgentRetrieveFile(
00592 MCAgent_t agent,
00593 int task_num,
00594 const char* name,
00595 const char* save_path);
00596
00609 int MC_AgentAddTaskFromFile(
00610 MCAgent_t agent,
00611 const char* filename,
00612 const char* return_var_name,
00613 const char* server,
00614 int persistent);
00615
00624 extern MCAgency_t
00625 MC_AgentInfo_GetAgency(stationary_agent_info_t* stationary_agent_info);
00626
00637 extern MCAgent_t
00638 MC_AgentInfo_GetAgent(stationary_agent_info_t* stationary_agent_info);
00639
00648 extern void*
00649 MC_AgentInfo_GetAgentArgs(stationary_agent_info_t* stationary_agent_info);
00650
00659 extern int MC_AgentReturnArrayDim(
00660 MCAgent_t agent,
00661 int task_num );
00662
00672 extern int MC_AgentReturnArrayExtent(
00673 MCAgent_t agent,
00674 int task_num,
00675 int index);
00676
00686 extern int MC_AgentReturnArrayNum(
00687 MCAgent_t agent,
00688 int task_num);
00689
00699 extern const void* MC_AgentReturnDataGetSymbolAddr(
00700 MCAgent_t agent,
00701 int task_num );
00702
00711 extern size_t MC_AgentReturnDataSize(
00712 MCAgent_t agent,
00713 int task_num );
00714
00724 extern int MC_AgentReturnDataType(
00725 MCAgent_t agent,
00726 int task_num );
00727
00737 extern int MC_AgentReturnIsArray(
00738 MCAgent_t agent,
00739 int task_num );
00740
00756 extern const void*
00757 MC_AgentVariableRetrieve(
00758 MCAgent_t agent,
00759 const char* var_name,
00760 int task_num);
00761
00776 int
00777 MC_AgentVariableRetrieveInfo(
00778 MCAgent_t agent,
00779 const char* var_name,
00780 int task_num,
00781 const void** data,
00782 int* dim,
00783 const int** extent
00784 );
00785
00803 extern int
00804 MC_AgentVariableSave(MCAgent_t agent, const char* var_name);
00805
00806 EXPORTMC int
00807 MC_Barrier(MCAgency_t attr, int id);
00808
00818 EXPORTMC extern int MC_BarrierDelete(MCAgency_t attr, int id);
00819
00835 EXPORTMC extern int MC_BarrierInit(MCAgency_t attr, int id, int num_procs);
00836
00845 #ifdef OBS
00846 EXPORTMC extern int MC_ChInitializeOptions(MCAgency_t attr, ChOptions_t *options);
00847 #endif
00848
00849
00865 EXPORTMC int
00866 MC_CallAgentFunc(
00867 MCAgent_t agent,
00868 const char* funcName,
00869 void* returnVal,
00870 int numArgs,
00871 ...);
00872
00889 EXPORTMC extern int MC_CallAgentFuncArg(
00890 MCAgent_t agent,
00891 const char* funcName,
00892 void* returnVal,
00893 void* arg
00894 );
00895
00906 EXPORTMC extern int MC_CallAgentFuncV(
00907 MCAgent_t agent,
00908 const char* funcName,
00909 void* returnVal,
00910 va_list ap);
00911
00912
00913
00914
00915
00916
00917
00918
00919 EXPORTMC extern int MC_CallAgentFuncVar
00920 (
00921 MCAgent_t agent,
00922 const char* funcName,
00923 void* returnVal,
00924 ChVaList_t arglist
00925 );
00926
00927
00941 EXPORTMC extern MCAgent_t
00942 MC_ComposeAgent(
00943 const char* name,
00944 const char* home,
00945 const char* owner,
00946 const char* code,
00947 const char* return_var_name,
00948 const char* server,
00949 int persistent
00950 );
00951
00968 EXPORTMC extern MCAgent_t
00969 MC_ComposeAgentS(
00970 const char* name,
00971 const char* home,
00972 const char* owner,
00973 const char* code,
00974 const char* return_var_name,
00975 const char* server,
00976 int persistent,
00977 const char* workgroup_code
00978 );
00979
00995 EXPORTMC extern MCAgent_t
00996 MC_ComposeAgentWithWorkgroup(
00997 const char* name,
00998 const char* home,
00999 const char* owner,
01000 const char* code,
01001 const char* return_var_name,
01002 const char* server,
01003 int persistent,
01004 const char* workgroup_code
01005 );
01006
01021 EXPORTMC extern MCAgent_t
01022 MC_ComposeAgentFromFile(
01023 const char* name,
01024 const char* home,
01025 const char* owner,
01026 const char* filename,
01027 const char* return_var_name,
01028 const char* server,
01029 int persistent
01030 );
01031
01049 EXPORTMC extern MCAgent_t
01050 MC_ComposeAgentFromFileS(
01051 const char* name,
01052 const char* home,
01053 const char* owner,
01054 const char* filename,
01055 const char* return_var_name,
01056 const char* server,
01057 int persistent,
01058 const char* workgroup_code
01059 );
01060
01076 EXPORTMC extern MCAgent_t
01077 MC_ComposeAgentFromFileWithWorkgroup(
01078 const char* name,
01079 const char* home,
01080 const char* owner,
01081 const char* filename,
01082 const char* return_var_name,
01083 const char* server,
01084 int persistent,
01085 const char* workgroup_code
01086 );
01087
01098 EXPORTMC extern int MC_CondBroadcast(MCAgency_t attr, int id);
01099
01115 EXPORTMC extern int MC_CondSignal(MCAgency_t attr, int id);
01116
01127 EXPORTMC extern int MC_CondReset(MCAgency_t attr, int id);
01128
01142 EXPORTMC extern int MC_CondWait(MCAgency_t attr, int id);
01143
01153 int MC_CopyAgent(MCAgent_t* agent_out, const MCAgent_t agent_in);
01154
01163 EXPORTMC extern int MC_DeleteAgent(MCAgent_t agent);
01164
01176 EXPORTMC extern int MC_DeleteAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01177
01188 EXPORTMC extern int MC_End(MCAgency_t attr);
01189
01200 int MC_DestroyServiceSearchResult(
01201 char** agentName,
01202 char** serviceName,
01203 int* agentID,
01204 int numResult);
01205
01206
01217 EXPORTMC extern MCAgent_t MC_FindAgentByName(MCAgency_t attr, const char *name);
01218
01227 EXPORTMC extern MCAgent_t MC_FindAgentByID(MCAgency_t attr, int ID);
01228
01237 EXPORTMC extern void* MC_GetAgentExecEngine(MCAgent_t agent);
01238
01242 EXPORTMC extern int MC_GetAgentID(MCAgent_t agent);
01243
01244
01245
01246
01247
01248
01249 EXPORTMC extern char* MC_GetAgentName(MCAgent_t agent);
01250
01256 EXPORTMC extern int MC_GetAgentNumTasks(MCAgent_t agent);
01257
01274 EXPORTMC extern int MC_GetAgentReturnData(
01275 MCAgent_t agent,
01276 int task_num,
01277 void **data,
01278 int *dim,
01279 int **extent);
01280
01286 EXPORTMC extern int MC_GetAgentStatus(MCAgent_t agent);
01287
01293 EXPORTMC extern enum MC_AgentType_e MC_GetAgentType(MCAgent_t agent);
01294
01312 EXPORTMC int
01313 MC_GetAgents(MCAgency_t attr, MCAgent_t **agents, int* num_agents, unsigned int agent_status_flags);
01314
01325 EXPORTMC int
01326 MC_GetAllAgents(MCAgency_t attr, MCAgent_t **agents, int* num_agents);
01327
01336 EXPORTMC int
01337 MC_GetNumAgents(MCAgency_t attr, int* num_agents);
01338
01344 EXPORTMC extern char* MC_GetAgentXMLString(MCAgent_t agent);
01345
01353 EXPORTMC extern int MC_HaltAgency(MCAgency_t agency);
01354
01365 EXPORTMC extern MCAgency_t MC_Initialize(
01366 int port,
01367 MCAgencyOptions_t *options);
01368
01381 EXPORTMC extern int MC_InitializeAgencyOptions(struct MCAgencyOptions_s* options);
01382
01388 EXPORTMC extern int MC_MainLoop(MCAgency_t attr);
01389
01398 EXPORTMC extern int MC_LoadAgentFromFile(MCAgency_t attr, const char* filename);
01399
01409 EXPORTMC extern int MC_MigrateAgent(MCAgent_t agent, const char* hostname, int port);
01410
01425 EXPORTMC extern int MC_MutexLock(MCAgency_t attr, int id);
01426
01427
01428
01429
01430
01431
01432
01433
01434
01435
01436
01437 EXPORTMC extern int MC_MutexUnlock(MCAgency_t attr, int id);
01438
01456 EXPORTMC extern int MC_RegisterService(
01457 MCAgency_t agency,
01458
01459
01460
01461 MCAgent_t agent,
01462 int agentID,
01463 const char *agentName,
01464 char **serviceNames,
01465 int numServices);
01466
01474 EXPORTMC extern int MC_ResumeAgency(MCAgency_t agency);
01475
01481 EXPORTMC extern MCAgent_t MC_RetrieveAgent(MCAgency_t attr);
01482
01494 EXPORTMC extern int MC_SemaphorePost(MCAgency_t attr, int id);
01495
01509 EXPORTMC extern int MC_SemaphoreWait(MCAgency_t attr, int id);
01510
01522 EXPORTMC extern int MC_SetDefaultAgentStatus(MCAgency_t agency, enum MC_AgentStatus_e status);
01523
01537 EXPORTMC extern int MC_SetThreadOn(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index);
01538
01547 EXPORTMC extern int MC_SetThreadsAllOn(MCAgencyOptions_t* options);
01548
01562 EXPORTMC extern int MC_SetThreadOff(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index );
01563
01572 EXPORTMC extern int MC_SetThreadsAllOff(MCAgencyOptions_t* options);
01573
01579 EXPORTMC extern int MC_PrintAgentCode(MCAgent_t agent);
01580
01584 EXPORTMC extern int MC_QueueRDLock(MCAgency_t agency, enum MC_QueueIndex_e queue);
01585
01589 EXPORTMC extern int MC_QueueRDUnlock(MCAgency_t agency, enum MC_QueueIndex_e queue);
01590
01594 EXPORTMC extern int MC_QueueWRLock(MCAgency_t agency, enum MC_QueueIndex_e queue);
01595
01599 EXPORTMC extern int MC_QueueWRUnlock(MCAgency_t agency, enum MC_QueueIndex_e queue);
01600
01606 EXPORTMC extern char * MC_RetrieveAgentCode(MCAgent_t agent);
01607
01615 EXPORTMC extern int MC_ResetSignal(MCAgency_t attr);
01616
01632 EXPORTMC extern int MC_SearchForService(
01633
01634 MCAgency_t attr,
01635 const char *searchString,
01636
01637 char*** agentNames,
01638 char*** serviceNames,
01639 int** agentIDs,
01640 int* numResults);
01641
01648 EXPORTMC extern int MC_SendAgent(MCAgency_t attr,
01649 const char *message);
01650
01657 EXPORTMC extern int MC_SendAgentFile(MCAgency_t attr,
01658 const char *filename);
01659
01668 EXPORTMC extern int MC_SendAgentMigrationMessage(MCAgency_t attr,
01669 const char *message,
01670 const char *hostname,
01671 int port);
01672
01681 EXPORTMC extern int MC_SendAgentMigrationMessageFile(MCAgency_t attr,
01682 const char *filename,
01683 const char *hostname,
01684 int port);
01685
01694 EXPORTMC extern int MC_SetAgentStatus(MCAgent_t agent, enum MC_AgentStatus_e status);
01695
01711 EXPORTMC extern int MC_Steer( MCAgency_t attr, int (*funcptr)(void* data), void *arg);
01712
01721 EXPORTMC extern enum MC_SteerCommand_e MC_SteerControl(void);
01722
01731 EXPORTMC extern int MC_SyncDelete(MCAgency_t attr, int id);
01732
01748 EXPORTMC extern int MC_SyncInit(MCAgency_t attr, int id);
01749
01755 EXPORTMC extern int MC_TerminateAgent(MCAgent_t agent);
01756
01757
01758 EXPORTMC extern int
01759 MC_TerminateAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01765
01766
01773 EXPORTMC extern int MC_WaitAgent(MCAgency_t attr);
01774
01783 EXPORTMC extern MCAgent_t MC_WaitRetrieveAgent(MCAgency_t attr);
01784
01798 EXPORTMC extern int MC_WaitSignal(MCAgency_t attr, int signals);
01799
01800 #ifdef __cplusplus
01801 }
01802 #endif
01803
01804 #endif
01805