Diff for /libaitrpc/src/cli.c between versions 1.26.4.2 and 1.28.2.1

version 1.26.4.2, 2016/08/02 10:26:58 version 1.28.2.1, 2024/03/19 15:17:16
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 - 2016Copyright 2004 - 2024
         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 71  rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli,  Line 71  rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli, 
         } else          } else
                 memcpy(cli, rpccli, sizeof(rpc_cli_t));                  memcpy(cli, rpccli, sizeof(rpc_cli_t));
   
        memcpy(&cli->cli_sa, &rpccli->cli_sa, sizeof(sockaddr_t));        memcpy(&cli->cli_sa, &rpccli->cli_sa, sizeof cli->cli_sa);
         switch (cli->cli_sa.sa.sa_family) {          switch (cli->cli_sa.sa.sa_family) {
                 case AF_INET:                  case AF_INET:
                         cli->cli_sa.sin.sin_port =                           cli->cli_sa.sin.sin_port = 
Line 111  rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli,  Line 111  rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli, 
                 e_free(cli);                  e_free(cli);
                 return NULL;                  return NULL;
         }          }
        if (connect(cli->cli_sock, &cli->cli_sa.sa, sizeof cli->cli_sa.sa) == -1) {        if (connect(cli->cli_sock, &cli->cli_sa.sa, e_addrlen(&cli->cli_sa)) == -1) {
                 LOGERR;                  LOGERR;
                 close(cli->cli_sock);                  close(cli->cli_sock);
                 e_free(cli);                  e_free(cli);
Line 161  rpc_cli_openClient(u_char InstID, int netBuf, const ch Line 161  rpc_cli_openClient(u_char InstID, int netBuf, const ch
         int n = 1;          int n = 1;
         rpc_cli_t *cli = NULL;          rpc_cli_t *cli = NULL;
         sockaddr_t sa = E_SOCKADDR_INIT;          sockaddr_t sa = E_SOCKADDR_INIT;
           socklen_t salen;
   
         if (proto < 0 || proto > SOCK_RAW) {          if (proto < 0 || proto > SOCK_RAW) {
                 rpc_SetErr(EINVAL, "Invalid parameters can`t open RPC client");                  rpc_SetErr(EINVAL, "Invalid parameters can`t open RPC client");
Line 171  rpc_cli_openClient(u_char InstID, int netBuf, const ch Line 172  rpc_cli_openClient(u_char InstID, int netBuf, const ch
   
         if (!Port && proto < SOCK_RAW)          if (!Port && proto < SOCK_RAW)
                 Port = RPC_DEFPORT;                  Port = RPC_DEFPORT;
        if (!e_gethostbyname(csHost, Port, &sa))        if (!(salen = e_gethostbyname(csHost, Port, &sa)))
                 return NULL;                  return NULL;
         if (!proto)          if (!proto)
                 proto = SOCK_STREAM;                  proto = SOCK_STREAM;
Line 221  rpc_cli_openClient(u_char InstID, int netBuf, const ch Line 222  rpc_cli_openClient(u_char InstID, int netBuf, const ch
         }          }
         if (cli->cli_id == SOCK_STREAM) {          if (cli->cli_id == SOCK_STREAM) {
                 setsockopt(cli->cli_sock, IPPROTO_TCP, TCP_NODELAY, &n, sizeof n);                  setsockopt(cli->cli_sock, IPPROTO_TCP, TCP_NODELAY, &n, sizeof n);
                if (connect(cli->cli_sock, &cli->cli_sa.sa, sizeof cli->cli_sa.sa) == -1) {                if (connect(cli->cli_sock, &cli->cli_sa.sa, salen) == -1) {
                         LOGERR;                          LOGERR;
                         goto err;                          goto err;
                 }                  }
Line 229  rpc_cli_openClient(u_char InstID, int netBuf, const ch Line 230  rpc_cli_openClient(u_char InstID, int netBuf, const ch
         if (cli->cli_id == SOCK_DGRAM) {          if (cli->cli_id == SOCK_DGRAM) {
                 sockaddr_t sa2;                  sockaddr_t sa2;
   
                if (!e_gethostbyname(csHost, 0, &sa2))                if (!(salen = e_gethostbyname(csHost, 0, &sa2)))
                         goto err;                          goto err;
                if (bind(cli->cli_sock, &sa2.sa, sizeof sa2.sa) == -1) {                if (bind(cli->cli_sock, &sa2.sa, salen) == -1) {
                         LOGERR;                          LOGERR;
                         goto err;                          goto err;
                 }                  }
Line 298  rpc_cli_reconnectClient(rpc_cli_t * __restrict cli) Line 299  rpc_cli_reconnectClient(rpc_cli_t * __restrict cli)
                 return -1;                  return -1;
         }          }
         if (cli->cli_id == SOCK_STREAM)          if (cli->cli_id == SOCK_STREAM)
                if (connect(cli->cli_sock, &cli->cli_sa.sa, sizeof cli->cli_sa.sa) == -1) {                if (connect(cli->cli_sock, &cli->cli_sa.sa, e_addrlen(&cli->cli_sa)) == -1) {
                         LOGERR;                          LOGERR;
                         close(cli->cli_sock);                          close(cli->cli_sock);
                         return -1;                          return -1;
Line 404  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res Line 405  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res
                         if (seq != ntohl(rpc->call_seq))                          if (seq != ntohl(rpc->call_seq))
                                 continue;                                  continue;
                 }                  }
        } while (ret < 1);        } while (ret < 0);
   
         return ret;          return ret;
 }  }
Line 416  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res Line 417  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res
  * @sess = RPC session info   * @sess = RPC session info
  * @tag = Function tag for execution   * @tag = Function tag for execution
  * @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 = >0 We not want RPC reply, -1 IPC request with reply
  * @nocrc = Without CRC calculation   * @nocrc = Without CRC calculation
  * @seq = Sign packet with seq.no   * @seq = Sign packet with seq.no
  * return: -1 error or != -1 prepared bytes into packet   * return: -1 error or != -1 prepared bytes into packet
Line 452  rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t Line 453  rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t
                 rpc->call_argc = (u_char) array_Size(vars);                  rpc->call_argc = (u_char) array_Size(vars);
   
         /* set reply */          /* set reply */
        rpc->call_req.flags = (uint64_t) htonl(noreply ? RPC_NOREPLY : RPC_REPLY);        rpc->call_req.flags = (uint64_t) htonl((noreply > 0) ? RPC_NOREPLY : RPC_REPLY);
   
         if (array_Size(vars)) {          if (array_Size(vars)) {
                 /* marshaling variables */                  /* marshaling variables */
Line 466  rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t Line 467  rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t
   
         /* total packet length */          /* total packet length */
         rpc->call_len = htonl(len);          rpc->call_len = htonl(len);
        rpc->call_io = RPC_REQ;        rpc->call_io = (noreply == -1) ? RPC_IPC : RPC_REQ;
   
         /* sign packet */          /* sign packet */
         rpc->call_seq = htonl(seq);          rpc->call_seq = htonl(seq);
Line 563  rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_sess_t  Line 564  rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_sess_t 
  * rpc_cli_execCall() - Execute RPC call   * rpc_cli_execCall() - Execute RPC call
  *   *
  * @cli = RPC Client session   * @cli = RPC Client session
 * @noreply = We not want RPC reply * @noreply = >0 We not want RPC reply, -1 IPC request with reply
  * @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()
Line 595  rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short  Line 596  rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short 
         if ((wlen = rpc_pkt_Send(cli->cli_sock, cli->cli_id, &cli->cli_sa,           if ((wlen = rpc_pkt_Send(cli->cli_sock, cli->cli_id, &cli->cli_sa, 
                                         &cli->cli_buf, wlen)) == -1)                                          &cli->cli_buf, wlen)) == -1)
                 return -1;                  return -1;
        if (!wlen)      /* closed rpc connection */        if (!wlen)              /* closed rpc connection */
                 return 1;                  return 1;
   
        if (noreply)       /* we not want reply */        if (noreply > 0)       /* we not want reply */
                 return 0;                  return 0;
   
         if ((wlen = rpc_pkt_Receive(cli->cli_sock, cli->cli_id, &cli->cli_sa,           if ((wlen = rpc_pkt_Receive(cli->cli_sock, cli->cli_id, &cli->cli_sa, 
                                         &cli->cli_buf, seq)) == -1)                                          &cli->cli_buf, seq)) == -1)
                 return -1;                  return -1;
        if (!wlen)      /* closed rpc connection */        if (!wlen) {        /* closed rpc connection */
                return 1;                rpc_SetErr(ECONNRESET, "Closed connection");
                 return -1;
         }
   
         if ((wlen = rpc_pkt_Replay(&cli->cli_buf, cli->cli_parent, tag,           if ((wlen = rpc_pkt_Replay(&cli->cli_buf, cli->cli_parent, tag, 
                                         out_vars, type)) == -1)                                          out_vars, type)) == -1)
                 return -1;                  return -1;
   
        return 0;        return wlen;
 }  }
   
 /*  /*

Removed from v.1.26.4.2  
changed lines
  Added in v.1.28.2.1


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