Diff for /libaitrpc/inc/aitrpc.h between versions 1.8.2.12 and 1.8.2.22

version 1.8.2.12, 2012/05/16 13:32:47 version 1.8.2.22, 2012/05/17 16:42:43
Line 72  SUCH DAMAGE. Line 72  SUCH DAMAGE.
   
 /* RPC builtin registed calls */  /* RPC builtin registed calls */
   
#define CALL_MAX_ID                65535#define CALL_TAG_MAX                65535
   
#define CALL_BLOBSHUTDOWN    "rpcBLOBServerShutdown"#define CALL_SRVPING         65534
#define CALL_BLOBSHUTDOWN_ID        65530 
#define CALL_BLOBCLIENTS        "rpcBLOBServerClients" 
#define CALL_BLOBCLIENTS_ID     65529 
#define CALL_BLOBVARS           "rpcBLOBServerVars" 
#define CALL_BLOBVARS_ID        65528 
#define CALL_BLOBSTATE          "rpcBLOBServerState" 
#define CALL_BLOBSTATE_ID       65527 
   
#define CALL_SRVSHUTDOWN        "rpcServerShutdown"#define CALL_SRVSHUTDOWN        65533
#define CALL_SRVSHUTDOWN_ID        65534#define CALL_SRVCLIENTS         65532
#define CALL_SRVCLIENTS         "rpcServerClients"#define CALL_SRVCALLS           65531
#define CALL_SRVCLIENTS_ID        65533#define CALL_SRVSESSIONS        65530
#define CALL_SRVCALLS           "rpcServerCalls" 
#define CALL_SRVCALLS_ID        65532 
#define CALL_SRVSESSIONS        "rpcServerSessions" 
#define CALL_SRVSESSIONS_ID        65531 
   
   #define CALL_BLOBSHUTDOWN       65529
   #define CALL_BLOBCLIENTS        65528
   #define CALL_BLOBVARS           65527
   
   
 /* RPC types */  /* RPC types */
   
 typedef enum {  typedef enum {
Line 164  struct tagBLOBHdr { Line 157  struct tagBLOBHdr {
         uint32_t        hdr_ret;          uint32_t        hdr_ret;
         uint16_t        hdr_crc;          uint16_t        hdr_crc;
         uint8_t         hdr_pad;          uint8_t         hdr_pad;
} __packed;} __packed;                     /* size == 22 bytes */
   
 /* Network RPC client & server elements */  /* Network RPC client & server elements */
   
Line 177  typedef struct tagRPCFunc { Line 170  typedef struct tagRPCFunc {
         void                    *func_parent;          void                    *func_parent;
         TAILQ_ENTRY(tagRPCFunc) func_node;          TAILQ_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)
   
   
 /* BLOB register element */  /* BLOB register element */
Line 203  typedef struct { Line 198  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 */
   
           pthread_t                       srv_tid;        /* RPC exec pthread */
         sched_root_task_t               *srv_root;      /* RPC server scheduler */          sched_root_task_t               *srv_root;      /* RPC server scheduler */
         intptr_t                        srv_kill;       /* Scheduler condition variable */          intptr_t                        srv_kill;       /* Scheduler condition variable */
   
Line 212  typedef struct { Line 208  typedef struct {
         TAILQ_HEAD(, tagRPCFunc)        srv_funcs;      /* RPC functions list */          TAILQ_HEAD(, tagRPCFunc)        srv_funcs;      /* RPC functions list */
   
         struct {          struct {
                   pthread_t                       tid;            /* BLOB exec pthread */
                 sched_root_task_t               *root;          /* BLOB server scheduler */                  sched_root_task_t               *root;          /* BLOB server scheduler */
                 intptr_t                        kill;           /* BLOB server state: ==0 disable | !=0 enable */                  intptr_t                        kill;           /* BLOB server state: ==0 disable | !=0 enable */
   
Line 229  typedef struct { Line 226  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 = current execution RPC call function
 * @arg2 = number of items in input array from call request * @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 *, int, array_t *);typedef int (*rpc_callback_t)(rpc_func_t *, struct tagRPCCall *, array_t *);
   
   
// -----------------------------------------------------------------------/* ----------------------------------------------------------------------- */
   
 /* Error support functions */  /* Error support functions */
   
Line 263  inline int rpc_chkPktSession(rpc_sess_t *p, rpc_sess_t Line 260  inline int rpc_chkPktSession(rpc_sess_t *p, rpc_sess_t
  */   */
 inline int rpc_addPktSession(rpc_sess_t *p, rpc_sess_t *s);  inline 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);
   /*
  * rpc_register_srvServices() - Register internal service functions   * rpc_register_srvServices() - Register internal service functions
  *   *
  * @srv = RPC server instance   * @srv = RPC server instance
Line 286  int rpc_register_blobServices(rpc_srv_t * __restrict s Line 290  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 308  void rpc_srv_endServer(rpc_srv_t ** __restrict psrv); Line 312  void rpc_srv_endServer(rpc_srv_t ** __restrict psrv);
  * return: -1 error or 0 ok, infinite loop ...   * return: -1 error or 0 ok, infinite loop ...
  */   */
 int rpc_srv_loopServer(rpc_srv_t * __restrict srv);  int rpc_srv_loopServer(rpc_srv_t * __restrict srv);
#define rpc_srv_execServer(_srv, _sync) do { assert((_srv)); pthread_t __tid; \#define rpc_srv_execServer(_srv, _sync) do { assert((_srv)); \
                                                 if (!(_srv)->srv_kill) { \                                                  if (!(_srv)->srv_kill) { \
                                                        pthread_create(&__tid, NULL, (void*(*)(void*)) \                                                        pthread_create(&(_srv)->srv_tid, NULL, (void*(*)(void*)) \
                                                                         rpc_srv_loopServer, (_srv)); \                                                                          rpc_srv_loopServer, (_srv)); \
                                                         if ((_sync)) \                                                          if ((_sync)) \
                                                                pthread_join(__tid, (void**) (_sync)); \                                                                pthread_join((_srv)->srv_tid, (void**) (_sync)); \
                                                         else \                                                          else \
                                                                pthread_detach(__tid); \                                                                pthread_detach((_srv)->srv_tid); \
                                                 } } while (0)                                                  } } while (0)
   
 /*  /*
Line 326  int rpc_srv_loopServer(rpc_srv_t * __restrict srv); Line 330  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 341  void rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) Line 345  void rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv)
  * return: -1 error or 0 ok, infinite loop ...   * return: -1 error or 0 ok, infinite loop ...
  */   */
 int rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv);  int rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv);
#define rpc_srv_execBLOBServer(_srv)    do { assert((_srv)); pthread_t __tid; \#define rpc_srv_execBLOBServer(_srv)    do { assert((_srv)); \
                                                 if (!(_srv)->srv_kill && !(_srv)->srv_blob.kill) { \                                                  if (!(_srv)->srv_kill && !(_srv)->srv_blob.kill) { \
                                                        pthread_create(&__tid, NULL, (void*(*)(void*)) \                                                        pthread_create(&(_srv)->srv_blob.tid, NULL, \
                                                                         (void*(*)(void*)) \
                                                                         rpc_srv_loopBLOBServer, (_srv)); \                                                                          rpc_srv_loopBLOBServer, (_srv)); \
                                                        pthread_detach(__tid); \                                                        pthread_detach((_srv)->srv_blob.tid); \
                                                 } \                                                  } \
                                         } while (0)                                          } while (0)
   
Line 509  inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, Line 514  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)
 * @family = Family socket type, AF_INET or AF_INET6 
  * @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
  */   */
 rpc_cli_t *rpc_cli_openClient(unsigned int ProgID, unsigned char ProcID, int netBuf,   rpc_cli_t *rpc_cli_openClient(unsigned int ProgID, unsigned char ProcID, int netBuf, 
                unsigned short family, const char *csHost, unsigned short Port);                const char *csHost, unsigned short Port);
 /*  /*
  * rpc_cli_closeClient() - Close connection to RPC server and free resources   * rpc_cli_closeClient() - Close connection to RPC server and free resources
  *   *
Line 530  void rpc_cli_closeClient(rpc_cli_t ** __restrict cli); Line 534  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_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 545  int rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_sh Line 556  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.12  
changed lines
  Added in v.1.8.2.22


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