Diff for /libaitrpc/inc/aitrpc.h between versions 1.8.2.18 and 1.10.2.2

version 1.8.2.18, 2012/05/17 09:32:51 version 1.10.2.2, 2012/11/13 09:21:27
Line 94  typedef enum { Line 94  typedef enum {
 } cmd_type_t;  } cmd_type_t;
   
   
#define RPC_CALLBACK_CHECK_INPUT(_f)       do { \#define RPC_CALLBACK_CHECK_INPUT(x)       do { \
                                                assert((_f)); \                                                assert((x)); \
                                                if (!(_f)) { \                                                if (!(x)) { \
                                                         rpc_SetErr(EINVAL, \                                                          rpc_SetErr(EINVAL, \
                                                                         "Invalid callback parameters ..."); \                                                                          "Invalid callback parameters ..."); \
                                                         return -1; \                                                          return -1; \
                                                 } \                                                  } \
                                         } while (0)                                          } while (0)
 #define RPC_CALLBACK_CHK_ARGS(_f, _n)   do { \  
                                                 RPC_CALLBACK_CHECK_INPUT((_f)); \  
                                                 if ((_f) && io_arraySize((_f)->func_vars) < _n) { \  
                                                         rpc_SetErr(EINVAL, \  
                                                                         "Not enough number of arguments!"); \  
                                                         return -1; \  
                                                 } \  
                                         } while (0)  
   
   
 /* RPC session identification */  /* RPC session identification */
Line 146  struct tagRPCCall { Line 138  struct tagRPCCall {
         uint16_t        call_argc;          uint16_t        call_argc;
         ait_val_t       call_argv[0];          ait_val_t       call_argv[0];
 } __packed;                     /* size == 24 bytes */  } __packed;                     /* size == 24 bytes */
   #define RPC_CHK_NOREPLY(x)      ((x)->call_req.flags & RPC_NOREPLY)
   
 /* Network BLOB packet - Header */  /* Network BLOB packet - Header */
   
Line 165  struct tagBLOBHdr { Line 158  struct tagBLOBHdr {
 typedef struct tagRPCFunc {  typedef struct tagRPCFunc {
         ait_val_t               func_name;          ait_val_t               func_name;
   
         array_t                 *func_vars;  
   
         void                    *func_parent;          void                    *func_parent;
        TAILQ_ENTRY(tagRPCFunc)      func_node;
         SLIST_ENTRY(tagRPCFunc) func_next;
         AVL_ENTRY(tagRPCFunc)      func_node;
 } rpc_func_t;  } rpc_func_t;
 #define RPC_FUNC_RETVARS(x)     ((x)->func_vars)  
 #define RPC_FUNC_SERVER(x)      ((rpc_srv_t*) (x)->func_parent)  #define RPC_FUNC_SERVER(x)      ((rpc_srv_t*) (x)->func_parent)
   
   /* Tree root node */
   typedef struct tagRPCFuncs {
           pthread_mutex_t         mtx;
   
           struct tagRPCFunc       *slh_first;
           struct tagRPCFunc       *avlh_root;
   } rpc_funcs_t;
   #define RPC_FUNCS_LOCK(x)       pthread_mutex_lock(&(x)->mtx)
   #define RPC_FUNCS_UNLOCK(x)     pthread_mutex_unlock(&(x)->mtx)
   #define RPC_FUNCS_ISEMPTY(x)    AVL_EMPTY((x))
   
   
 /* BLOB register element */  /* BLOB register element */
 typedef struct tagBLOB {  typedef struct tagBLOB {
         uint32_t                blob_var;       /* BLOB id */          uint32_t                blob_var;       /* BLOB id */
Line 191  typedef struct { Line 194  typedef struct {
         io_sockaddr_t   cli_sa;         /* host address */          io_sockaddr_t   cli_sa;         /* host address */
         ait_val_t       cli_buf;        /* network buffer */          ait_val_t       cli_buf;        /* network buffer */
   
           array_t         *cli_vars;      /* function return variables */
   
         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;
   #define RPC_RETVARS(x)          ((x)->cli_vars)
   #define RPC_SRV_SERVER(x)       ((rpc_srv_t*) (x)->cli_parent)
   #define RPC_CLI_SESSION(x)      ((rpc_sess_t*) (x)->cli_parent)
   
 typedef struct {  typedef struct {
         rpc_sess_t                      srv_session;    /* RPC session registration info */          rpc_sess_t                      srv_session;    /* RPC session registration info */
Line 205  typedef struct { Line 213  typedef struct {
         rpc_cli_t                       srv_server;     /* RPC server socket */          rpc_cli_t                       srv_server;     /* RPC server socket */
         array_t                         *srv_clients;   /* connected rpc client sockets */          array_t                         *srv_clients;   /* connected rpc client sockets */
   
        TAILQ_HEAD(, tagRPCFunc)        srv_funcs;      /* RPC functions list */        rpc_funcs_t                     srv_funcs;        /* RPC functions */
   
         struct {          struct {
                 pthread_t                       tid;            /* BLOB exec pthread */                  pthread_t                       tid;            /* BLOB exec pthread */
Line 225  typedef struct { Line 233  typedef struct {
 /*   /* 
  * (*rpc_callback_t)() - Callback type definition for RPC call in server process   * (*rpc_callback_t)() - Callback type definition for RPC call in server process
  *   *
 * @arg1 = current execution RPC call function * @arg1 = RPC client
  * @arg2 = RPC packet header   * @arg2 = RPC packet header
  * @arg3 = input array with values from RPC call execution request   * @arg3 = input array with values from RPC call execution request
  * return: -1 error or >-1 success execution   * return: -1 error or >-1 success execution
  */   */
typedef int (*rpc_callback_t)(rpc_func_t *, struct tagRPCCall *, array_t *);typedef int (*rpc_callback_t)(rpc_cli_t *, struct tagRPCCall *, array_t *);
   
   
// -----------------------------------------------------------------------/* ----------------------------------------------------------------------- */
   
 /* Error support functions */  /* Error support functions */
   
Line 290  int rpc_register_blobServices(rpc_srv_t * __restrict s Line 298  int rpc_register_blobServices(rpc_srv_t * __restrict s
  * @regProgID = ProgramID for authentication & recognition   * @regProgID = ProgramID for authentication & recognition
  * @regProcID = ProcessID for authentication & recognition   * @regProcID = ProcessID for authentication & recognition
  * @concurentClients = Concurent clients at same time to this server   * @concurentClients = Concurent clients at same time to this server
 * @netBuf = Network buffer length, if =0 == BUFSIZ (also meaning max RPC packet) * @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   * @csHost = Host name or address for bind server, if NULL any address
  * @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
Line 304  rpc_srv_t *rpc_srv_initServer(unsigned int regProgID,  Line 312  rpc_srv_t *rpc_srv_initServer(unsigned int regProgID, 
  * @psrv = RPC Server instance   * @psrv = RPC Server instance
  * return: none   * return: none
  */   */
void rpc_srv_endServer(rpc_srv_t ** __restrict psrv);inline void rpc_srv_endServer(rpc_srv_t ** __restrict psrv);
 /*  /*
  * rpc_srv_loopServer() - Execute Main server loop and wait for clients requests   * rpc_srv_loopServer() - Execute Main server loop and wait for clients requests
  *   *
Line 330  int rpc_srv_loopServer(rpc_srv_t * __restrict srv); Line 338  int rpc_srv_loopServer(rpc_srv_t * __restrict srv);
  * @diskDir = Disk place for BLOB file objects   * @diskDir = Disk place for BLOB file objects
  * return: -1 == error or 0 bind and created BLOB server instance   * return: -1 == error or 0 bind and created BLOB server instance
  */   */
int rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_short Port, const char *diskDir);int rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, unsigned short Port, const char *diskDir);
 /*  /*
  * rpc_srv_endBLOBServer() - Destroy BLOB server, close all opened sockets and free resources   * rpc_srv_endBLOBServer() - Destroy BLOB server, close all opened sockets and free resources
  *   *
  * @srv = RPC Server instance   * @srv = RPC Server instance
  * return: none   * return: none
  */   */
void rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv);inline void rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv);
 /*  /*
  * rpc_srv_loopBLOB() - Execute Main BLOB server loop and wait for clients requests   * rpc_srv_loopBLOB() - Execute Main BLOB server loop and wait for clients requests
  *   *
Line 360  int rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv) Line 368  int rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv)
  * @srv = RPC Server instance   * @srv = RPC Server instance
  * @tag = Function tag   * @tag = Function tag
  * @funcaddr = Function address   * @funcaddr = Function address
  * @args = Number of return function arguments  
  * return: -1 error, 0 already registered tag or 1 register ok   * return: -1 error, 0 already registered tag or 1 register ok
  */   */
int rpc_srv_registerCall(rpc_srv_t * __restrict srv, unsigned short tag, int rpc_srv_registerCall(rpc_srv_t * __restrict srv, unsigned short tag, void *funcaddr);
                void *funcaddr, unsigned short args); 
 /*  /*
  * rpc_srv_unregisterCall() - Unregister call from RPC server   * rpc_srv_unregisterCall() - Unregister call from RPC server
  *   *
Line 382  int rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, Line 388  int rpc_srv_unregisterCall(rpc_srv_t * __restrict srv,
  */   */
 inline rpc_func_t *rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t tag);  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
  *   *
 * @call = Register RPC call * @cli = RPC client
  * @rpc = IN RPC call structure   * @rpc = IN RPC call structure
    * @funcname = Execute RPC function
  * @args = IN RPC calling arguments from RPC client   * @args = IN RPC calling arguments from RPC client
  * return: -1 error, !=-1 ok   * return: -1 error, !=-1 ok
  */   */
int rpc_srv_execCall(rpc_func_t * __restrict call, struct tagRPCCall * __restrict rpc, int rpc_srv_execCall(rpc_cli_t * __restrict cli, struct tagRPCCall * __restrict rpc, 
                array_t * __restrict args);                ait_val_t funcname, array_t * __restrict args);
   
   
 /*  /*
Line 483  int rpc_cli_sendBLOB(rpc_cli_t * __restrict cli, ait_v Line 490  int rpc_cli_sendBLOB(rpc_cli_t * __restrict cli, ait_v
  *   *
  * @cli = Client instance   * @cli = Client instance
  * @var = BLOB variable   * @var = BLOB variable
 * @data = BLOB data, must be free after use! * @data = BLOB data, must be io_free after use!
  * return: -1 error, 0 ok, 1 remote error   * return: -1 error, 0 ok, 1 remote error
  */   */
 int rpc_cli_recvBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, void ** __restrict data);  int rpc_cli_recvBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, void ** __restrict data);
Line 500  int rpc_cli_delBLOB(rpc_cli_t * __restrict cli, ait_va Line 507  int rpc_cli_delBLOB(rpc_cli_t * __restrict cli, ait_va
  *   *
  * @cli = Client instance   * @cli = Client instance
  * @var = BLOB variable   * @var = BLOB variable
 * @data = BLOB data, must be free after use! * @data = BLOB data, must be io_free after use!
  * return: -1 error, 0 ok, >0 remote error   * return: -1 error, 0 ok, >0 remote error
  */   */
 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, 
Line 514  inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, Line 521  inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli,
  *   *
  * @ProgID = ProgramID for RPC session request   * @ProgID = ProgramID for RPC session request
  * @ProcID = ProcessID for RPC session request   * @ProcID = ProcessID for RPC session request
 * @netBuf = Network buffer length, if =0 == BUFSIZ (also meaning max RPC packet) * @netBuf = Network buffer length (min:512 bytes), if =0 == BUFSIZ (also meaning max RPC packet)
  * @csHost = Host name or IP address for bind server   * @csHost = Host name or IP address for bind server
  * @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 connection to RPC server established   * return: NULL == error or !=NULL connection to RPC server established
Line 534  void rpc_cli_closeClient(rpc_cli_t ** __restrict cli); Line 541  void rpc_cli_closeClient(rpc_cli_t ** __restrict cli);
  * @cli = RPC Client session   * @cli = RPC Client session
  * @noreply = We not want RPC reply   * @noreply = We not want RPC reply
  * @tag = Function tag for execution   * @tag = Function tag for execution
 * @in_vars = IN RPC call array of rpc values * @in_vars = IN RPC call array of rpc values, may be NULL
 * @out_vars = OUT returned array of rpc values, must be free after use with rpc_cli_freeVals() * @out_vars = OUT returned array of rpc values, if !=NULL must be free after use with io_freeVars()
  * return: -1 error or != -1 ok result   * return: -1 error or != -1 ok result
  */   */
int rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short tag, int rpc_cli_execCall(rpc_cli_t *cli, int noreply, unsigned short tag, 
                 array_t * __restrict in_vars, array_t ** __restrict out_vars);                  array_t * __restrict in_vars, array_t ** __restrict out_vars);
   /*
    * rpc_cli_freeCall() - Free resouce allocated by RPC call
    *
    * @out_vars = Returned array with variables from RPC call
    * return: none
    */
   inline 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);
   
   
 /*  /*
Line 549  int rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_sh Line 570  int rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_sh
  * @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 connection to BLOB server established   * return: NULL == error or !=NULL connection to BLOB server established
  */   */
rpc_cli_t *rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli, u_short Port);rpc_cli_t *rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli, unsigned short Port);
 /*  /*
  * rpc_cli_closeBLOBClient() - Close connection to BLOB server and free resources   * rpc_cli_closeBLOBClient() - Close connection to BLOB server and free resources
  *   *

Removed from v.1.8.2.18  
changed lines
  Added in v.1.10.2.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>