version 1.8.2.1, 2012/05/15 16:06:13
|
version 1.8.2.9, 2012/05/16 08:10:39
|
Line 72 SUCH DAMAGE.
|
Line 72 SUCH DAMAGE.
|
|
|
/* RPC builtin registed calls */ |
/* RPC builtin registed calls */ |
|
|
|
#define CALL_MAX_ID 65535 |
|
|
#define CALL_BLOBSHUTDOWN "rpcBLOBServerShutdown" |
#define CALL_BLOBSHUTDOWN "rpcBLOBServerShutdown" |
|
#define CALL_BLOBSHUTDOWN_ID 65530 |
#define CALL_BLOBCLIENTS "rpcBLOBServerClients" |
#define CALL_BLOBCLIENTS "rpcBLOBServerClients" |
|
#define CALL_BLOBCLIENTS_ID 65529 |
#define CALL_BLOBVARS "rpcBLOBServerVars" |
#define CALL_BLOBVARS "rpcBLOBServerVars" |
|
#define CALL_BLOBVARS_ID 65528 |
#define CALL_BLOBSTATE "rpcBLOBServerState" |
#define CALL_BLOBSTATE "rpcBLOBServerState" |
|
#define CALL_BLOBSTATE_ID 65527 |
|
|
#define CALL_SRVSHUTDOWN "rpcServerShutdown" |
#define CALL_SRVSHUTDOWN "rpcServerShutdown" |
|
#define CALL_SRVSHUTDOWN_ID 65534 |
#define CALL_SRVCLIENTS "rpcServerClients" |
#define CALL_SRVCLIENTS "rpcServerClients" |
|
#define CALL_SRVCLIENTS_ID 65533 |
#define CALL_SRVCALLS "rpcServerCalls" |
#define CALL_SRVCALLS "rpcServerCalls" |
|
#define CALL_SRVCALLS_ID 65532 |
#define CALL_SRVSESSIONS "rpcServerSessions" |
#define CALL_SRVSESSIONS "rpcServerSessions" |
|
#define CALL_SRVSESSIONS_ID 65531 |
|
|
|
|
/* RPC types */ |
/* RPC types */ |
Line 114 typedef enum {
|
Line 124 typedef enum {
|
|
|
typedef struct { |
typedef struct { |
uint8_t sess_version; |
uint8_t sess_version; |
uint8_t sess_timeout; |
|
uint32_t sess_program; |
uint32_t sess_program; |
uint16_t sess_process; | uint8_t sess_process; |
} __packed rpc_sess_t; /* size == 8 bytes */ | } __packed rpc_sess_t; /* size == 6 bytes */ |
|
|
|
|
/* Server managment RPC functions ... */ |
/* Server managment RPC functions ... */ |
|
|
/* RPC function registration element! */ |
|
typedef struct tagRPCFunc { |
|
uint16_t func_tag; |
|
uint32_t func_hash; |
|
ait_val_t func_file; |
|
ait_val_t func_name; |
|
|
|
array_t *func_vars; |
|
|
|
void *func_parent; |
|
TAILQ_ENTRY(tagRPCFunc) func_node; |
|
} rpc_func_t; |
|
|
|
|
|
/* Network RPC packet - Client request */ |
/* Network RPC packet - Client request */ |
|
|
struct tagRPCCall { |
struct tagRPCCall { |
rpc_sess_t call_session; |
rpc_sess_t call_session; |
|
|
|
uint16_t call_seq; |
uint16_t call_len; |
uint16_t call_len; |
|
uint16_t call_crc; |
|
|
uint16_t call_tag; |
|
uint32_t call_hash; |
|
uint16_t call_argc; |
|
|
|
union { |
union { |
struct { |
struct { |
uint64_t flags; |
uint64_t flags; |
Line 157 struct tagRPCCall {
|
Line 150 struct tagRPCCall {
|
} call_rep; |
} call_rep; |
}; |
}; |
|
|
uint16_t call_crc; | uint16_t call_tag; |
} __packed; /* size == 28 bytes */ | uint16_t call_argc; |
| ait_val_t call_argv[0]; |
| } __packed; /* size == 24 bytes */ |
|
|
/* Network BLOB packet - Header */ |
/* Network BLOB packet - Header */ |
|
|
Line 174 struct tagBLOBHdr {
|
Line 169 struct tagBLOBHdr {
|
|
|
/* Network RPC client & server elements */ |
/* Network RPC client & server elements */ |
|
|
|
/* RPC function registration element! */ |
|
typedef struct tagRPCFunc { |
|
ait_val_t func_name; |
|
|
|
array_t *func_vars; |
|
|
|
void *func_parent; |
|
TAILQ_ENTRY(tagRPCFunc) func_node; |
|
} rpc_func_t; |
|
|
|
|
|
/* BLOB register element */ |
|
typedef struct tagBLOB { |
|
uint32_t blob_var; /* BLOB id */ |
|
|
|
size_t blob_len; /* size of allocated BLOB data */ |
|
void *blob_data; /* mapped BLOB data */ |
|
|
|
TAILQ_ENTRY(tagBLOB) blob_node; |
|
} rpc_blob_t; |
|
|
|
|
typedef struct { |
typedef struct { |
int cli_id; /* slot id */ |
int cli_id; /* slot id */ |
int cli_sock; /* socket fd */ |
int cli_sock; /* socket fd */ |
Line 183 typedef struct {
|
Line 200 typedef struct {
|
void *cli_parent; /* pointer to parent rpc_srv_t for server or to rpc_sess_t for client */ |
void *cli_parent; /* pointer to parent rpc_srv_t for server or to rpc_sess_t for client */ |
} rpc_cli_t; |
} rpc_cli_t; |
|
|
|
|
/* BLOB registration element! */ |
|
typedef struct tagBLOB { |
|
uint32_t blob_var; |
|
|
|
size_t blob_len; // size of allocated BLOB data |
|
void *blob_data; // BLOB data |
|
|
|
struct tagBLOB *blob_next; |
|
} rpc_blob_t; |
|
|
|
typedef struct { |
typedef struct { |
rpc_sess_t srv_session; /* RPC session registration info */ |
rpc_sess_t srv_session; /* RPC session registration info */ |
int srv_netbuf; /* size of network buffer */ |
int srv_netbuf; /* size of network buffer */ |
Line 207 typedef struct {
|
Line 213 typedef struct {
|
TAILQ_HEAD(, tagRPCFunc) srv_funcs; /* RPC functions list */ |
TAILQ_HEAD(, tagRPCFunc) srv_funcs; /* RPC functions list */ |
|
|
struct { |
struct { |
cmd_type_t state; // BLOB server state: ==0 disable | !=0 enable | cmd_type_t state; /* BLOB server state: ==0 disable | !=0 enable */ |
ait_val_t dir; | ait_val_t dir; /* BLOB states directory */ |
|
|
rpc_cli_t server; // BLOB server socket | rpc_cli_t server; /* BLOB server socket */ |
rpc_cli_t *clients; // connected blob client sockets | array_t *clients; /* connected blob client sockets */ |
|
|
rpc_blob_t *blobs; // registered blob variables list | TAILQ_HEAD(, tagBLOB) blobs; /* registered blob variables list */ |
} srv_blob; |
} srv_blob; |
} rpc_srv_t; |
} rpc_srv_t; |
|
|
Line 262 inline int rpc_addPktSession(rpc_sess_t *p, rpc_sess_t
|
Line 268 inline int rpc_addPktSession(rpc_sess_t *p, rpc_sess_t
|
* return: -1 error or 0 ok |
* return: -1 error or 0 ok |
*/ |
*/ |
int rpc_register_srvServices(rpc_srv_t * __restrict srv); |
int rpc_register_srvServices(rpc_srv_t * __restrict srv); |
|
/* |
|
* rpc_register_blobServices() - Register internal service functions |
|
* |
|
* @srv = RPC server instance |
|
* return: -1 error or 0 ok |
|
*/ |
|
int rpc_register_blobServices(rpc_srv_t * __restrict srv); |
|
|
|
|
/* RPC Server side functions */ |
/* RPC Server side functions */ |
Line 277 int rpc_register_srvServices(rpc_srv_t * __restrict sr
|
Line 290 int rpc_register_srvServices(rpc_srv_t * __restrict sr
|
* @Port = Port for bind server, if Port == 0 default port is selected |
* @Port = Port for bind server, if Port == 0 default port is selected |
* return: NULL == error or !=NULL bind and created RPC server instance |
* return: NULL == error or !=NULL bind and created RPC server instance |
*/ |
*/ |
rpc_srv_t *rpc_srv_initServer(u_int regProgID, u_int regProcID, int concurentClients, | rpc_srv_t *rpc_srv_initServer(unsigned int regProgID, unsigned char regProcID, |
int netBuf, const char *csHost, u_short Port); | int concurentClients, int netBuf, |
| const char *csHost, unsigned short Port); |
/* |
/* |
* rpc_srv_endServer() - Destroy RPC server, close all opened sockets and free resources |
* rpc_srv_endServer() - Destroy RPC server, close all opened sockets and free resources |
* |
* |
Line 338 int rpc_srv_loopBLOB(rpc_srv_t * __restrict srv);
|
Line 352 int rpc_srv_loopBLOB(rpc_srv_t * __restrict srv);
|
* rpc_srv_registerCall() - Register call to RPC server |
* rpc_srv_registerCall() - Register call to RPC server |
* |
* |
* @srv = RPC Server instance |
* @srv = RPC Server instance |
* @csModule = Module name, if NULL self binary | * @tag = Function tag |
* @csFunc = Function name | * @funcaddr = Function address |
* @args = Number of return function arguments, use for restriction case! | * @args = Number of return function arguments |
* return: -1 error or 0 register ok | * return: -1 error, 0 already registered tag or 1 register ok |
*/ |
*/ |
int rpc_srv_registerCall(rpc_srv_t * __restrict srv, const char *csModule, const char *csFunc, | int rpc_srv_registerCall(rpc_srv_t * __restrict srv, unsigned short tag, |
unsigned short args); | void *funcaddr, unsigned short args); |
/* |
/* |
* rpc_srv_unregisterCall() - Unregister call from RPC server |
* rpc_srv_unregisterCall() - Unregister call from RPC server |
* |
* |
* @srv = RPC Server instance |
* @srv = RPC Server instance |
* @csModule = Module name, if NULL self binary | * @tag = Function tag |
* @csFunc = Function name | |
* return: -1 error, 0 not found call, 1 unregister ok |
* return: -1 error, 0 not found call, 1 unregister ok |
*/ |
*/ |
int rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, const char *csModule, const char *csFunc); | int rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, unsigned short tag); |
/* |
/* |
* rpc_srv_getFunc() - Get registered call from RPC server by Name | * rpc_srv_getCall() - Get registered call from RPC server |
* |
* |
* @srv = RPC Server instance |
* @srv = RPC Server instance |
* @csModule = Module name, if NULL self binary |
|
* @csFunc = Function name |
|
* return: NULL not found call, !=NULL return call |
|
*/ |
|
rpc_func_t *rpc_srv_getFunc(rpc_srv_t * __restrict srv, const char *csModule, const char *csFunc); |
|
/* |
|
* rpc_srv_getCall() - Get registered call from RPC server |
|
* |
|
* @srv = RPC Server instance |
|
* @tag = tag for function |
* @tag = tag for function |
* @hash = hash for function |
|
* return: NULL not found call, !=NULL return call |
* return: NULL not found call, !=NULL return call |
*/ |
*/ |
inline rpc_func_t *rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t tag, uint32_t hash); | inline rpc_func_t *rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t tag); |
/* |
/* |
* rpc_srv_execCall() - Execute registered call from RPC server |
* rpc_srv_execCall() - Execute registered call from RPC server |
* |
* |
Line 385 int rpc_srv_execCall(rpc_func_t * __restrict call, str
|
Line 388 int rpc_srv_execCall(rpc_func_t * __restrict call, str
|
|
|
|
|
/* |
/* |
* rpc_srv_getVars() - Get variables array for RPC call | * rpc_srv_blobCreate() - Create and map blob to memory region and return object |
* |
* |
* @call = RPC function call |
|
* @vars = Returned variables array, may be NULL |
|
* return: -1 error, !=-1 Number of returned variables |
|
*/ |
|
inline int rpc_srv_getVars(rpc_func_t * __restrict call, array_t ** __restrict vars); |
|
|
|
|
|
/* |
|
* rpc_srv_blobCreate() - Create map blob to memory region and return object |
|
* |
|
* @srv = RPC Server instance |
* @srv = RPC Server instance |
* @len = BLOB length object |
* @len = BLOB length object |
* return: NULL error or !=NULL allocated BLOB object |
* return: NULL error or !=NULL allocated BLOB object |
Line 506 int rpc_cli_delBLOB(rpc_cli_t * __restrict cli, ait_va
|
Line 499 int rpc_cli_delBLOB(rpc_cli_t * __restrict cli, ait_va
|
*/ |
*/ |
inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, |
inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, |
void ** __restrict data); |
void ** __restrict data); |
|
|
|
|
/* |
|
* rpc_calcHashes() - Calculate hashes for RPC call |
|
* |
|
* @func = function |
|
* @csModule = Module name, if NULL self binary |
|
* @csFunc = Function name |
|
* return: -1 error or 0 ok |
|
*/ |
|
int rpc_calcHashes(rpc_func_t * __restrict func, const char *csModule, const char *csFunc); |
|
|
|
|
|
/* RPC Client side functions */ |
/* RPC Client side functions */ |