--- libaitrpc/inc/aitrpc.h 2013/04/02 09:17:06 1.13.2.1 +++ libaitrpc/inc/aitrpc.h 2013/07/16 13:04:20 1.16 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitrpc.h,v 1.13.2.1 2013/04/02 09:17:06 misho Exp $ +* $Id: aitrpc.h,v 1.16 2013/07/16 13:04:20 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -85,6 +85,8 @@ SUCH DAMAGE. #define CALL_BLOBCLIENTS 65528 #define CALL_BLOBVARS 65527 +/* RPC signals */ +#define SIGFBLOB 54 /* RPC types */ @@ -251,9 +253,9 @@ typedef int (*rpc_callback_t)(rpc_cli_t *, struct tagR /* Error support functions */ // rpc_GetErrno() Get error code of last operation -inline int rpc_GetErrno(); +int rpc_GetErrno(); // rpc_GetError() Get error text of last operation -inline const char *rpc_GetError(); +const char *rpc_GetError(); /* @@ -263,7 +265,7 @@ inline const char *rpc_GetError(); * @s = active session * return: -1, 1, 2, 3 are errors or 0 ok */ -inline int rpc_chkPktSession(rpc_sess_t *p, rpc_sess_t *s); +int rpc_chkPktSession(rpc_sess_t *p, rpc_sess_t *s); /* * rpc_addPktSession() - Prepare session into network format * @@ -271,14 +273,14 @@ inline int rpc_chkPktSession(rpc_sess_t *p, rpc_sess_t * @s = host session * return: -1 error or 0 ok */ -inline int rpc_addPktSession(rpc_sess_t *p, rpc_sess_t *s); +int rpc_addPktSession(rpc_sess_t *p, rpc_sess_t *s); /* * rpc_register_srvPing() - Register ping service function * * @srv = RPC server instance * return: -1 error or 0 ok */ -inline int rpc_register_srvPing(rpc_srv_t * __restrict srv); +int rpc_register_srvPing(rpc_srv_t * __restrict srv); /* * rpc_register_srvServices() - Register internal service functions * @@ -316,7 +318,7 @@ rpc_srv_t *rpc_srv_initServer(unsigned char InstID, in * @psrv = RPC Server instance * return: none */ -inline void rpc_srv_endServer(rpc_srv_t ** __restrict psrv); +void rpc_srv_endServer(rpc_srv_t ** __restrict psrv); /* * rpc_srv_loopServer() - Execute Main server loop and wait for clients requests * @@ -349,7 +351,7 @@ int rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, * @srv = RPC Server instance * return: none */ -inline void rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv); +void rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv); /* * rpc_srv_loopBLOB() - Execute Main BLOB server loop and wait for clients requests * @@ -390,7 +392,7 @@ int rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, * @tag = tag for function * return: NULL not found call, !=NULL return call */ -inline rpc_func_t *rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t tag); +rpc_func_t *rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t tag); /* * rpc_srv_execCall() Execute registered call from RPC server * @@ -409,9 +411,10 @@ int rpc_srv_execCall(rpc_cli_t * __restrict cli, struc * * @srv = RPC Server instance * @len = BLOB length object + * @tout = BLOB live timeout in seconds * return: NULL error or !=NULL allocated BLOB object */ -inline rpc_blob_t *rpc_srv_blobCreate(rpc_srv_t * __restrict srv, int len); +rpc_blob_t *rpc_srv_blobCreate(rpc_srv_t * __restrict srv, int len, int tout); /* * rpc_srv_blobMap() - Map blob to memory region * @@ -419,14 +422,14 @@ inline rpc_blob_t *rpc_srv_blobCreate(rpc_srv_t * __re * @blob = Map to this BLOB element * return: -1 error or 0 ok */ -inline int rpc_srv_blobMap(rpc_srv_t * __restrict srv, rpc_blob_t * __restrict blob); +int rpc_srv_blobMap(rpc_srv_t * __restrict srv, rpc_blob_t * __restrict blob); /* * rpc_srv_blobUnmap() - Unmap blob memory region * * @blob = Mapped BLOB element * return: none */ -inline void rpc_srv_blobUnmap(rpc_blob_t * __restrict blob); +void rpc_srv_blobUnmap(rpc_blob_t * __restrict blob); /* * rpc_srv_blobFree() - Free blob from disk & memory * @@ -434,16 +437,17 @@ inline void rpc_srv_blobUnmap(rpc_blob_t * __restrict * @blob = Mapped BLOB element * return: -1 error or 0 ok */ -inline int rpc_srv_blobFree(rpc_srv_t * __restrict srv, rpc_blob_t * __restrict blob); +int rpc_srv_blobFree(rpc_srv_t * __restrict srv, rpc_blob_t * __restrict blob); /* * rpc_srv_registerBLOB() - Register new BLOB to server * * @srv = RPC Server instance * @len = BLOB length + * @tout = BLOB live timeout in seconds * return: NULL error or new registered BLOB */ -rpc_blob_t *rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_t len); +rpc_blob_t *rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_t len, int tout); /* * rpc_srv_unregisterBLOB() - Unregister BLOB from server * @@ -459,7 +463,7 @@ int rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, * @var = hash for variable * return: NULL not found, !=NULL return blob var */ -inline rpc_blob_t *rpc_srv_getBLOB(rpc_srv_t * __restrict srv, uint32_t var); +rpc_blob_t *rpc_srv_getBLOB(rpc_srv_t * __restrict srv, uint32_t var); /* * rpc_srv_sendBLOB() - Send mapped BLOB to client @@ -486,9 +490,11 @@ int rpc_srv_recvBLOB(rpc_cli_t * __restrict cli, rpc_b * @cli = Client instance * @var = BLOB variable * @data = BLOB data + * @tout = BLOB live on server timeout in seconds, if =0 default timeout * return: -1 error, 0 ok, 1 remote error */ -int rpc_cli_sendBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, void * __restrict data); +int rpc_cli_sendBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, + void * __restrict data, int tout); /* * rpc_cli_recvBLOB() - Receive BLOB from server * @@ -514,7 +520,7 @@ int rpc_cli_delBLOB(rpc_cli_t * __restrict cli, ait_va * @data = BLOB data, must be e_free after use! * return: -1 error, 0 ok, >0 remote error */ -inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, +int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, void ** __restrict data); @@ -570,10 +576,11 @@ int rpc_pkt_Receive(int sock, int type, sockaddr_t * _ * @tag = Function tag for execution * @vars = Function argument array of values, may be NULL * @noreply = We not want RPC reply + * @nocrc = Without CRC calculation * return: -1 error or != -1 prepared bytes into packet */ int rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t * __restrict sess, - unsigned short tag, array_t * __restrict vars, int noreply); + unsigned short tag, array_t * __restrict vars, int noreply, int nocrc); /* * rpc_pkt_Replay() - Decode RPC Replay packet * @@ -581,10 +588,11 @@ int rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_se * @sess = RPC session info * @tag = Function tag * @vars = Function argument array of values, may be NULL + * @nocrc = Without CRC calculation * return: -1 error or != -1 return value from function */ int rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_sess_t * __restrict sess, - unsigned short tag, array_t ** __restrict vars); + unsigned short tag, array_t ** __restrict vars, int nocrc); /* * rpc_cli_execCall() - Execute RPC call * @@ -603,14 +611,14 @@ int rpc_cli_execCall(rpc_cli_t *cli, int noreply, unsi * @out_vars = Returned array with variables from RPC call * return: none */ -inline void rpc_cli_freeCall(array_t ** __restrict out_vars); +void rpc_cli_freeCall(array_t ** __restrict out_vars); /* * rpc_cli_ping() - Ping RPC server * * @cli = connected client * return: -1 error or !=-1 ping seq id */ -inline int rpc_cli_ping(rpc_cli_t *cli); +int rpc_cli_ping(rpc_cli_t *cli); /*