--- libaitrpc/inc/aitrpc.h 2013/03/07 23:10:50 1.13 +++ libaitrpc/inc/aitrpc.h 2013/04/02 15:50:14 1.14 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitrpc.h,v 1.13 2013/03/07 23:10:50 misho Exp $ +* $Id: aitrpc.h,v 1.14 2013/04/02 15:50:14 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -62,7 +62,7 @@ SUCH DAMAGE. #include -#define RPC_VERSION 5 +#define RPC_VERSION 6 #define RPC_DEFPORT 2611 /* RPC call request flags */ @@ -91,7 +91,7 @@ SUCH DAMAGE. typedef enum { ok, error, no, /* for blob reply */ get, set, unset /* for blob request */ -} cmd_type_t; +} blob_cmd_type_t; #define RPC_CALLBACK_CHECK_INPUT(x) do { \ @@ -107,10 +107,15 @@ typedef enum { /* RPC session identification */ typedef struct { - uint8_t sess_version; - uint32_t sess_program; - uint8_t sess_process; -} __packed rpc_sess_t; /* size == 6 bytes */ +#if BYTE_ORDER == LITTLE_ENDIAN + uint16_t sess_instance:8; + uint16_t sess_version:8; +#endif +#if BYTE_ORDER == BIG_ENDIAN + uint16_t sess_version:8; + uint16_t sess_instance:8; +#endif +} __packed rpc_sess_t; /* size == 2 bytes */ /* Server managment RPC functions ... */ @@ -137,7 +142,7 @@ struct tagRPCCall { uint16_t call_tag; uint16_t call_argc; ait_val_t call_argv[0]; -} __packed; /* size == 24 bytes */ +} __packed; /* size == 20 bytes */ #define RPC_CHK_NOREPLY(x) ((x)->call_req.flags & RPC_NOREPLY) /* Network BLOB packet - Header */ @@ -148,9 +153,8 @@ struct tagBLOBHdr { uint32_t hdr_var; uint32_t hdr_len; uint32_t hdr_ret; - uint16_t hdr_crc; uint8_t hdr_pad; -} __packed; /* size == 22 bytes */ +} __packed; /* size == 16 bytes */ /* Network RPC client & server elements */ @@ -296,8 +300,7 @@ int rpc_register_blobServices(rpc_srv_t * __restrict s /* * rpc_srv_initServer() - Init & create RPC Server * - * @regProgID = ProgramID for authentication & recognition - * @regProcID = ProcessID for authentication & recognition + * @InstID = Instance for authentication & recognition * @concurentClients = Concurent clients at same time to this server * @netBuf = Network buffer length (min:512 bytes), if =0 == BUFSIZ (also meaning max RPC packet) * @csHost = Host name or address for bind server, if NULL any address @@ -305,8 +308,7 @@ int rpc_register_blobServices(rpc_srv_t * __restrict s * @proto = Protocol, if == 0 choose SOCK_STREAM * return: NULL == error or !=NULL bind and created RPC server instance */ -rpc_srv_t *rpc_srv_initServer(unsigned int regProgID, unsigned char regProcID, - int concurentClients, int netBuf, +rpc_srv_t *rpc_srv_initServer(unsigned char InstID, int concurentClients, int netBuf, const char *csHost, unsigned short Port, int proto); /* * rpc_srv_endServer() - Destroy RPC server, close all opened sockets and free resources @@ -521,15 +523,14 @@ inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, /* * rpc_cli_openClient() - Connect to RPC Server * - * @ProgID = ProgramID for RPC session request - * @ProcID = ProcessID for RPC session request + * @InstID = InstID for RPC session request * @netBuf = Network buffer length (min:512 bytes), if =0 == BUFSIZ (also meaning max RPC packet) * @csHost = Host name or IP address for bind server * @Port = Port for bind server, if Port == 0 default port is selected * @proto = Protocol, if == 0 choose SOCK_STREAM * return: NULL == error or !=NULL connection to RPC server established */ -rpc_cli_t *rpc_cli_openClient(unsigned int ProgID, unsigned char ProcID, int netBuf, +rpc_cli_t *rpc_cli_openClient(unsigned char InstID, int netBuf, const char *csHost, unsigned short Port, int proto); /* * rpc_cli_closeClient() - Close connection to RPC server and free resources @@ -569,10 +570,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 * @@ -580,10 +582,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 *