Diff for /libaitrpc/inc/aitrpc.h between versions 1.24 and 1.26.2.2

version 1.24, 2014/04/27 16:26:45 version 1.26.2.2, 2015/05/18 14:50:11
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 - 2014Copyright 2004 - 2015
         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             7#define RPC_VERSION             9
 #define RPC_DEFPORT             2611  #define RPC_DEFPORT             2611
   
   /* Additional ELWIX RPC supporting protocols */
   #ifndef SOCK_STREAM
   #define SOCK_STREAM             1       /* stream socket */
   #endif
   #ifndef SOCK_DGRAM
   #define SOCK_DGRAM              2       /* datagram socket */
   #endif
   #ifndef SOCK_RAW
   #define SOCK_RAW                3       /* raw-protocol interface */
   #endif
   #define SOCK_BPF                4       /* ethernet interface */
   #define SOCK_EXT                5       /* bi-directional pipe interface */
   
 /* RPC call request flags */  /* RPC call request flags */
   
 #define RPC_REPLY               0x0  #define RPC_REPLY               0x0
 #define RPC_NOREPLY             0x1  #define RPC_NOREPLY             0x1
   
   /* RPC call I/O direction */
   
   #define RPC_REQ                 0x0
   #define RPC_ACK                 0x1
   
 /* RPC builtin registed calls */  /* RPC builtin registed calls */
   
 #define CALL_TAG_MAX            65535  #define CALL_TAG_MAX            65535
Line 128  struct tagRPCCall { Line 146  struct tagRPCCall {
         rpc_sess_t      call_session;          rpc_sess_t      call_session;
   
         uint32_t        call_len;          uint32_t        call_len;
           uint32_t        call_seq;
         uint16_t        call_crc;          uint16_t        call_crc;
   
         union {          union {
Line 140  struct tagRPCCall { Line 159  struct tagRPCCall {
                 }       call_rep;                  }       call_rep;
         };          };
   
           uint8_t         call_io;
         uint16_t        call_tag;          uint16_t        call_tag;
        uint16_t        call_argc;        uint8_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)      (ntohl((u_long) (x)->call_req.flags) & RPC_NOREPLY)  #define RPC_CHK_NOREPLY(x)      (ntohl((u_long) (x)->call_req.flags) & RPC_NOREPLY)
Line 272  void rpc_SetErr(int eno, char *estr, ...); Line 292  void rpc_SetErr(int eno, char *estr, ...);
  * @type = type of socket   * @type = type of socket
  * @flags = receive flags   * @flags = receive flags
  * @sa = check client address, if you use udp protocol   * @sa = check client address, if you use udp protocol
 * @buf = buffer * @pkt = RPC packet
 * @blen = buffer length 
  * return: -1 error, 0 EOF or or >0 readed bytes into buffer   * 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,   ssize_t rpc_Read(int sock, int type, int flags, sockaddr_t * __restrict sa, 
                unsigned char * __restrict buf, size_t blen);                ait_val_t * __restrict pkt);
 /*  /*
  * rpc_Write() - RPC write operation   * rpc_Write() - RPC write operation
  *   *
Line 285  ssize_t rpc_Read(int sock, int type, int flags, sockad Line 304  ssize_t rpc_Read(int sock, int type, int flags, sockad
  * @type = type of socket   * @type = type of socket
  * @flags = send flags   * @flags = send flags
  * @sa = send to client address, if you use udp protocol   * @sa = send to client address, if you use udp protocol
 * @buf = buffer * @pkt = RPC packet
 * @blen = buffer length * @blen = write length
  * return: -1 error, 0 EOF or >0 written bytes into buffer   * 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,   ssize_t rpc_Write(int sock, int type, int flags, sockaddr_t * __restrict sa, 
                unsigned char * __restrict buf, size_t blen);                ait_val_t * __restrict pkt, size_t blen);
   
 /*  /*
  * rpc_chkPktSession() - Check RPC session   * rpc_chkPktSession() - Check RPC session
Line 360  void rpc_srv_endServer(rpc_srv_t ** __restrict psrv); Line 379  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)); \#define rpc_srv_execServer(_srv, _sync) \
                                                if (!(_srv)->srv_kill) { \        do { assert((_srv)); \
                                                        pthread_create(&(_srv)->srv_tid, NULL, (void*(*)(void*)) \                if (!(_srv)->srv_kill) { \
                                                                        rpc_srv_loopServer, (_srv)); \                        pthread_create(&(_srv)->srv_tid, NULL, (void*(*)(void*)) \
                                                        if ((_sync)) \                                        rpc_srv_loopServer, (_srv)); \
                                                                pthread_join((_srv)->srv_tid, (void**) (_sync)); \                        if ((_sync)) \
                                                        else \                                pthread_join((_srv)->srv_tid, (void**) (_sync)); \
                                                                pthread_detach((_srv)->srv_tid); \                        else \
                                                } } while (0)                                pthread_detach((_srv)->srv_tid); \
#define rpc_srv_killServer(_srv)        (assert((_srv)), (_srv)->srv_blob.kill = 1, (_srv)->srv_kill = 1)        } } 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 394  void rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) Line 415  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)); \#define rpc_srv_execBLOBServer(_srv) \
                                                if (!(_srv)->srv_kill && !(_srv)->srv_blob.kill) { \        do { assert((_srv)); \
                                                        pthread_create(&(_srv)->srv_blob.tid, NULL, \                if (!(_srv)->srv_kill && !(_srv)->srv_blob.kill) { \
                                                                        (void*(*)(void*)) \                        pthread_create(&(_srv)->srv_blob.tid, NULL, \
                                                                        rpc_srv_loopBLOBServer, (_srv)); \                                        (void*(*)(void*)) rpc_srv_loopBLOBServer, (_srv)); \
                                                        pthread_detach((_srv)->srv_blob.tid); \                        pthread_detach((_srv)->srv_blob.tid); \
                                                } \                } \
                                        } while (0)        } while (0)
   
 /*  /*
    * rpc_srv_initServer2() - Init & create layer2 RPC Server
    *
    * @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)
    * @csIface = Interface name for bind server, if NULL first interface on host
    * return: NULL == error or !=NULL bind and created RPC server instance
    */
   rpc_srv_t *rpc_srv_initServer2(u_char InstID, int concurentClients, int netBuf, 
                   const char *csIface);
   
   /*
    * rpc_srv_initServerExt() - Init & create pipe RPC Server
    *
    * @InstID = Instance for authentication & recognition
    * @netBuf = Network buffer length (min:512 bytes), if =0 == BUFSIZ (also meaning max RPC packet)
    * @fd = File descriptor
    * return: NULL == error or !=NULL bind and created RPC server instance
    */
   rpc_srv_t *rpc_srv_initServerExt(u_char InstID, int netBuf, int fd);
   
   /*
  * rpc_srv_registerCall() - Register call to RPC server   * rpc_srv_registerCall() - Register call to RPC server
  *   *
  * @srv = RPC Server instance   * @srv = RPC Server instance
Line 606  int rpc_pkt_Send(int sock, int type, sockaddr_t * __re Line 649  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
    * @seq = Signed packet with seq.no
  * return: -1 error, 0 EOF or >0 received 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, int seq);
 /*  /*
  * rpc_pkt_Request() - Build RPC Request packet   * rpc_pkt_Request() - Build RPC Request packet
  *   *
Line 619  int rpc_pkt_Receive(int sock, int type, sockaddr_t * _ Line 663  int rpc_pkt_Receive(int sock, int type, sockaddr_t * _
  * @vars = Function argument array of values, may be NULL   * @vars = Function argument array of values, may be NULL
  * @noreply = We not want RPC reply   * @noreply = We not want RPC reply
  * @nocrc = Without CRC calculation   * @nocrc = Without CRC calculation
    * @seq = Sign packet with seq.no
  * return: -1 error or != -1 prepared bytes into packet   * return: -1 error or != -1 prepared bytes into packet
  */   */
 int rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t * __restrict sess,   int rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t * __restrict sess, 
                unsigned short tag, array_t * __restrict vars, int noreply, int nocrc);                unsigned short tag, array_t * __restrict vars, int noreply, int nocrc, int seq);
 /*  /*
  * rpc_pkt_Replay() - Decode RPC Replay packet   * rpc_pkt_Replay() - Decode RPC Replay packet
  *   *
  * @pkt = Packet buffer   * @pkt = Packet buffer
 * @sess = RPC session info * @sess = RPC session info, if =NULL don't check session
 * @tag = Function tag * @tag = Function tag, if =CALL_TAG_MAX don't check tag
  * @vars = Function argument array of values, may be NULL   * @vars = Function argument array of values, may be NULL
  * @nocrc = Without CRC calculation   * @nocrc = Without CRC calculation
  * return: -1 error or != -1 return value from function   * return: -1 error or != -1 return value from function
Line 678  rpc_cli_t *rpc_cli_openBLOBClient(rpc_cli_t * __restri Line 723  rpc_cli_t *rpc_cli_openBLOBClient(rpc_cli_t * __restri
  * return: none   * return: none
  */   */
 void rpc_cli_closeBLOBClient(rpc_cli_t ** __restrict cli);  void rpc_cli_closeBLOBClient(rpc_cli_t ** __restrict cli);
   
   
   /*
    * rpc_cli_openClient2() - Connect to layer2 RPC Server
    *
    * @InstID = InstID for RPC session request
    * @netBuf = Network buffer length (min:512 bytes), if =0 == BUFSIZ (also meaning max RPC packet)
    * @csIface = Interface name for bind client, if NULL first interface on host
    * @csHost = Host ethernet address
    * return: NULL == error or !=NULL connection to RPC server established
    */
   rpc_cli_t *rpc_cli_openClient2(u_char InstID, int netBuf, 
                   const char *csIface, const char *csHost);
   /*
    * rpc_cli_closeClient2() - Close layer2 connection to RPC server and free resources
    *
    * @cli = RPC Client session
    * return: none
    */
   void rpc_cli_closeClient2(rpc_cli_t ** __restrict cli);
   
   
   /*
    * rpc_cli_openClientExt() - Connect to pipe RPC Server
    *
    * @InstID = InstID for RPC session request
    * @netBuf = Network buffer length (min:512 bytes), if =0 == BUFSIZ (also meaning max RPC packet)
    * @fd = File descriptor
    * return: NULL == error or !=NULL connection to RPC server established
    */
   rpc_cli_t *rpc_cli_openClientExt(u_char InstID, int netBuf, int fd);
   /*
    * rpc_cli_closeClientExt() - Close pipe connection to RPC server and free resources
    *
    * @cli = RPC Client session
    * return: none
    */
   void rpc_cli_closeClientExt(rpc_cli_t ** __restrict cli);
   
   
 #endif  #endif

Removed from v.1.24  
changed lines
  Added in v.1.26.2.2


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