Diff for /libaitrpc/inc/aitrpc.h between versions 1.13.2.2 and 1.23.4.1

version 1.13.2.2, 2013/04/02 15:32:03 version 1.23.4.1, 2014/03/03 00:36:01
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013Copyright 2004 - 2014
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 62  SUCH DAMAGE. Line 62  SUCH DAMAGE.
 #include <aitsched.h>  #include <aitsched.h>
   
   
#define RPC_VERSION             6#define RPC_VERSION             7
 #define RPC_DEFPORT             2611  #define RPC_DEFPORT             2611
   
 /* RPC call request flags */  /* RPC call request flags */
Line 85  SUCH DAMAGE. Line 85  SUCH DAMAGE.
 #define CALL_BLOBCLIENTS        65528  #define CALL_BLOBCLIENTS        65528
 #define CALL_BLOBVARS           65527  #define CALL_BLOBVARS           65527
   
   /* RPC signals */
   #define SIGFBLOB                54
   
 /* RPC types */  /* RPC types */
   
Line 125  typedef struct { Line 127  typedef struct {
 struct tagRPCCall {  struct tagRPCCall {
         rpc_sess_t      call_session;          rpc_sess_t      call_session;
   
        uint16_t    call_seq;        uint32_t      call_len;
        uint16_t      call_len; 
         uint16_t        call_crc;          uint16_t        call_crc;
   
         union {          union {
Line 143  struct tagRPCCall { Line 144  struct tagRPCCall {
         uint16_t        call_argc;          uint16_t        call_argc;
         ait_val_t       call_argv[0];          ait_val_t       call_argv[0];
 } __packed;                     /* size == 20 bytes */  } __packed;                     /* size == 20 bytes */
#define RPC_CHK_NOREPLY(x)      ((x)->call_req.flags & RPC_NOREPLY)#define RPC_CHK_NOREPLY(x)      (ntohl((u_long) (x)->call_req.flags) & RPC_NOREPLY)
 #define RPC_SET_ERRNO(x, _v)    ((x)->call_rep.eno = htonl((_v)))
   
 /* Network BLOB packet - Header */  /* Network BLOB packet - Header */
   
Line 245  typedef struct { Line 247  typedef struct {
  */   */
 typedef int (*rpc_callback_t)(rpc_cli_t *, struct tagRPCCall *, array_t *);  typedef int (*rpc_callback_t)(rpc_cli_t *, struct tagRPCCall *, array_t *);
   
   #define RPC_CALL_DEFINE(x)      int (x)(rpc_cli_t*, struct tagRPCCall*, array_t*)
   
   
 /* ----------------------------------------------------------------------- */  /* ----------------------------------------------------------------------- */
   
 /* Error support functions */  /* Error support functions */
   
 // rpc_GetErrno() Get error code of last operation  // rpc_GetErrno() Get error code of last operation
inline int rpc_GetErrno();int rpc_GetErrno();
 // rpc_GetError() Get error text of last operation  // rpc_GetError() Get error text of last operation
inline const char *rpc_GetError();const char *rpc_GetError();
 // rpc_SetErr() Set error to variables for internal use!!!
 void rpc_SetErr(int eno, char *estr, ...);
   
   
   
 /*  /*
    * rpc_Read() - RPC read operation
    *
    * @sock = socket
    * @type = type of socket
    * @flags = receive flags
    * @sa = check client address, if you use udp protocol
    * @buf = buffer
    * @blen = buffer length
    * return: -1 error, 0 EOF or or >0 readed bytes into buffer
    */
   ssize_t rpc_Read(int sock, int type, int flags, sockaddr_t * __restrict sa, 
                   unsigned char * __restrict buf, size_t blen);
   /*
    * rpc_Write() - RPC write operation
    *
    * @sock = socket
    * @type = type of socket
    * @flags = send flags
    * @sa = send to client address, if you use udp protocol
    * @buf = buffer
    * @blen = buffer length
    * return: -1 error, 0 EOF or >0 written bytes into buffer
    */
   ssize_t rpc_Write(int sock, int type, int flags, sockaddr_t * __restrict sa, 
                   unsigned char * __restrict buf, size_t blen);
   
   /*
  * rpc_chkPktSession() - Check RPC session   * rpc_chkPktSession() - Check RPC session
  *   *
  * @p = packet session   * @p = packet session
  * @s = active session   * @s = active session
  * return: -1, 1, 2, 3 are errors or 0 ok   * 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   * rpc_addPktSession() - Prepare session into network format
  *   *
Line 271  inline int rpc_chkPktSession(rpc_sess_t *p, rpc_sess_t Line 305  inline int rpc_chkPktSession(rpc_sess_t *p, rpc_sess_t
  * @s = host session   * @s = host session
  * return: -1 error or 0 ok   * 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   * rpc_register_srvPing() - Register ping service function
  *   *
  * @srv = RPC server instance   * @srv = RPC server instance
  * return: -1 error or 0 ok   * 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   * rpc_register_srvServices() - Register internal service functions
  *   *
Line 316  rpc_srv_t *rpc_srv_initServer(unsigned char InstID, in Line 350  rpc_srv_t *rpc_srv_initServer(unsigned char InstID, in
  * @psrv = RPC Server instance   * @psrv = RPC Server instance
  * return: none   * 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   * rpc_srv_loopServer() - Execute Main server loop and wait for clients requests
  *   *
Line 333  int rpc_srv_loopServer(rpc_srv_t * __restrict srv); Line 367  int rpc_srv_loopServer(rpc_srv_t * __restrict srv);
                                                         else \                                                          else \
                                                                 pthread_detach((_srv)->srv_tid); \                                                                  pthread_detach((_srv)->srv_tid); \
                                                 } } while (0)                                                  } } while (0)
   #define rpc_srv_killServer(_srv)        (assert((_srv)), (_srv)->srv_blob.kill = 1, (_srv)->srv_kill = 1)
   
 /*  /*
  * rpc_srv_initBLOBServer() - Init & create BLOB Server   * rpc_srv_initBLOBServer() - Init & create BLOB Server
Line 349  int rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, Line 384  int rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv,
  * @srv = RPC Server instance   * @srv = RPC Server instance
  * return: none   * 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   * rpc_srv_loopBLOB() - Execute Main BLOB server loop and wait for clients requests
  *   *
Line 390  int rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, Line 425  int rpc_srv_unregisterCall(rpc_srv_t * __restrict srv,
  * @tag = tag for function   * @tag = tag 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);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 409  int rpc_srv_execCall(rpc_cli_t * __restrict cli, struc Line 444  int rpc_srv_execCall(rpc_cli_t * __restrict cli, struc
  *   *
  * @srv = RPC Server instance   * @srv = RPC Server instance
  * @len = BLOB length object   * @len = BLOB length object
    * @tout = BLOB live timeout in seconds
  * return: NULL error or !=NULL allocated BLOB object   * 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    * rpc_srv_blobMap() - Map blob to memory region 
  *   *
Line 419  inline rpc_blob_t *rpc_srv_blobCreate(rpc_srv_t * __re Line 455  inline rpc_blob_t *rpc_srv_blobCreate(rpc_srv_t * __re
  * @blob = Map to this BLOB element   * @blob = Map to this BLOB element
  * return: -1 error or 0 ok   * 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    * rpc_srv_blobUnmap() - Unmap blob memory region 
  *   *
  * @blob = Mapped BLOB element   * @blob = Mapped BLOB element
  * return: none   * 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   * rpc_srv_blobFree() - Free blob from disk & memory
  *   *
Line 434  inline void rpc_srv_blobUnmap(rpc_blob_t * __restrict  Line 470  inline void rpc_srv_blobUnmap(rpc_blob_t * __restrict 
  * @blob = Mapped BLOB element   * @blob = Mapped BLOB element
  * return: -1 error or 0 ok   * 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   * rpc_srv_registerBLOB() - Register new BLOB to server
  *   *
  * @srv = RPC Server instance   * @srv = RPC Server instance
  * @len = BLOB length   * @len = BLOB length
    * @tout = BLOB live timeout in seconds
  * return: NULL error or new registered BLOB   * 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   * rpc_srv_unregisterBLOB() - Unregister BLOB from server
  *   *
Line 459  int rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, Line 496  int rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv,
  * @var = hash for variable   * @var = hash for variable
  * return: NULL not found, !=NULL return blob var   * 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   * rpc_srv_sendBLOB() - Send mapped BLOB to client
Line 486  int rpc_srv_recvBLOB(rpc_cli_t * __restrict cli, rpc_b Line 523  int rpc_srv_recvBLOB(rpc_cli_t * __restrict cli, rpc_b
  * @cli = Client instance   * @cli = Client instance
  * @var = BLOB variable   * @var = BLOB variable
  * @data = BLOB data   * @data = BLOB data
    * @tout = BLOB live on server timeout in seconds, if =0 default timeout
  * return: -1 error, 0 ok, 1 remote error   * 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   * rpc_cli_recvBLOB() - Receive BLOB from server
  *   *
Line 514  int rpc_cli_delBLOB(rpc_cli_t * __restrict cli, ait_va Line 553  int rpc_cli_delBLOB(rpc_cli_t * __restrict cli, ait_va
  * @data = BLOB data, must be e_free after use!   * @data = BLOB data, must be e_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, int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, ait_val_t * __restrict var, 
                 void ** __restrict data);                  void ** __restrict data);
   
   
Line 533  inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli, Line 572  inline int rpc_cli_getBLOB(rpc_cli_t * __restrict cli,
 rpc_cli_t *rpc_cli_openClient(unsigned char InstID, int netBuf,   rpc_cli_t *rpc_cli_openClient(unsigned char InstID, int netBuf, 
                 const char *csHost, unsigned short Port, int proto);                  const char *csHost, unsigned short Port, int proto);
 /*  /*
    * rpc_cli_reconnectClient() - Reconnecting client to RPC server
    *
    * @cli = RPC Client session
    * return: -1 error or 0 ok
    */
   int rpc_cli_reconnectClient(rpc_cli_t * __restrict cli);
   /*
  * rpc_cli_closeClient() - Close connection to RPC server and free resources   * rpc_cli_closeClient() - Close connection to RPC server and free resources
  *   *
  * @cli = RPC Client session   * @cli = RPC Client session
Line 547  void rpc_cli_closeClient(rpc_cli_t ** __restrict cli); Line 593  void rpc_cli_closeClient(rpc_cli_t ** __restrict cli);
  * @sa = Server address   * @sa = Server address
  * @pkt = RPC packet   * @pkt = RPC packet
  * @len = Length of packet   * @len = Length of packet
 * return: -1 error or !=-1 sended bytes * return: -1 error, 0  EOF or >0 sended bytes
  */   */
 int rpc_pkt_Send(int sock, int type, sockaddr_t * __restrict sa,   int rpc_pkt_Send(int sock, int type, sockaddr_t * __restrict sa, 
                 ait_val_t * __restrict pkt, int len);                  ait_val_t * __restrict pkt, int len);
Line 558  int rpc_pkt_Send(int sock, int type, sockaddr_t * __re Line 604  int rpc_pkt_Send(int sock, int type, sockaddr_t * __re
  * @type = Type of socket   * @type = Type of socket
  * @sa = Server address   * @sa = Server address
  * @pkt = RPC packet   * @pkt = RPC packet
 * return: -1 error or !=-1 sended bytes * return: -1 error, 0 EOF or >0 received bytes
  */   */
 int rpc_pkt_Receive(int sock, int type, sockaddr_t * __restrict sa,   int rpc_pkt_Receive(int sock, int type, sockaddr_t * __restrict sa, 
                 ait_val_t * __restrict pkt);                  ait_val_t * __restrict pkt);
Line 595  int rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_ses Line 641  int rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_ses
  * @tag = Function tag for execution   * @tag = Function tag for execution
  * @in_vars = IN function argument array of values, may be NULL   * @in_vars = IN function argument array of values, may be NULL
  * @out_vars = OUT returned array of rpc values, if !=NULL must be free after use with ait_freeVars()   * @out_vars = OUT returned array of rpc values, if !=NULL must be free after use with ait_freeVars()
 * return: -1 error or != -1 ok result * return: -1 error, 0 ok result or 1 closed rpc connection
  */   */
 int rpc_cli_execCall(rpc_cli_t *cli, int noreply, unsigned 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);
Line 605  int rpc_cli_execCall(rpc_cli_t *cli, int noreply, unsi Line 651  int rpc_cli_execCall(rpc_cli_t *cli, int noreply, unsi
  * @out_vars = Returned array with variables from RPC call   * @out_vars = Returned array with variables from RPC call
  * return: none   * 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   * rpc_cli_ping() - Ping RPC server
  *   *
  * @cli = connected client   * @cli = connected client
  * return: -1 error or !=-1 ping seq id   * 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);
   
   
 /*  /*

Removed from v.1.13.2.2  
changed lines
  Added in v.1.23.4.1


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