Diff for /libaitrpc/src/cli.c between versions 1.26 and 1.28

version 1.26, 2015/07/02 22:28:15 version 1.28, 2020/06/25 19:11:00
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 - 2015Copyright 2004 - 2019
         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, cli->cli_sa.sa.sa_len) == -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, cli->cli_sa.sa.sa_len) == -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, sa2.sa.sa_len) == -1) {                if (bind(cli->cli_sock, &sa2.sa, salen) == -1) {
                         LOGERR;                          LOGERR;
                         goto err;                          goto err;
                 }                  }
Line 268  rpc_cli_reconnectClient(rpc_cli_t * __restrict cli) Line 269  rpc_cli_reconnectClient(rpc_cli_t * __restrict cli)
                 shutdown(cli->cli_sock, SHUT_RDWR);                  shutdown(cli->cli_sock, SHUT_RDWR);
         if (cli->cli_id == SOCK_DGRAM && cli->cli_sa.sa.sa_family == AF_LOCAL) {          if (cli->cli_id == SOCK_DGRAM && cli->cli_sa.sa.sa_family == AF_LOCAL) {
                 sockaddr_t sa2 = E_SOCKADDR_INIT;                  sockaddr_t sa2 = E_SOCKADDR_INIT;
                socklen_t salen;                socklen_t salen = sizeof sa2;
   
                sa2.sa.sa_len = salen = sizeof sa2;#ifndef __linux__
                 sa2.sa.sa_len = salen;
 #endif
                 if (!getsockname(cli->cli_sock, &sa2.sa, &salen))                  if (!getsockname(cli->cli_sock, &sa2.sa, &salen))
                         unlink(sa2.sun.sun_path);                          unlink(sa2.sun.sun_path);
         }          }
Line 296  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, cli->cli_sa.sa.sa_len) == -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 322  rpc_cli_closeClient(rpc_cli_t ** __restrict cli) Line 325  rpc_cli_closeClient(rpc_cli_t ** __restrict cli)
                 shutdown((*cli)->cli_sock, SHUT_RDWR);                  shutdown((*cli)->cli_sock, SHUT_RDWR);
         if ((*cli)->cli_id == SOCK_DGRAM && (*cli)->cli_sa.sa.sa_family == AF_LOCAL) {          if ((*cli)->cli_id == SOCK_DGRAM && (*cli)->cli_sa.sa.sa_family == AF_LOCAL) {
                 sockaddr_t sa2 = E_SOCKADDR_INIT;                  sockaddr_t sa2 = E_SOCKADDR_INIT;
                socklen_t salen;                socklen_t salen = sizeof sa2;
   
                sa2.sa.sa_len = salen = sizeof sa2;#ifndef __linux__
                 sa2.sa.sa_len = salen;
 #endif
                 if (!getsockname((*cli)->cli_sock, &sa2.sa, &salen))                  if (!getsockname((*cli)->cli_sock, &sa2.sa, &salen))
                         unlink(sa2.sun.sun_path);                          unlink(sa2.sun.sun_path);
         }          }
Line 400  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 570  rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short  Line 575  rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short 
                 array_t * __restrict in_vars, array_t ** __restrict out_vars)                  array_t * __restrict in_vars, array_t ** __restrict out_vars)
 {  {
         int type = 0, wlen;          int type = 0, wlen;
         u_char *buf;  
         u_int seq = 0;          u_int seq = 0;
   
         if (!cli) {          if (!cli) {
Line 581  rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short  Line 585  rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short 
                         type = cli->cli_id;                          type = cli->cli_id;
                 else                  else
                         seq = random(); /* sign package */                          seq = random(); /* sign package */
                 buf = AIT_GET_BUF(&cli->cli_buf);  
         }          }
         if (out_vars)          if (out_vars)
                 *out_vars = NULL;                  *out_vars = NULL;
Line 602  rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short  Line 605  rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short 
         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;
 }  }
   
 /*  /*
Line 665  rpc_cli_ping(rpc_cli_t *cli) Line 670  rpc_cli_ping(rpc_cli_t *cli)
 rpc_cli_t *  rpc_cli_t *
 rpc_cli_openClient2(u_char InstID, int netBuf, const char *csIface, const char *csHost)  rpc_cli_openClient2(u_char InstID, int netBuf, const char *csIface, const char *csHost)
 {  {
   #ifndef __linux__
         rpc_cli_t *cli = NULL;          rpc_cli_t *cli = NULL;
         sockaddr_t sa = E_SOCKADDR_INIT, sal = E_SOCKADDR_INIT;          sockaddr_t sa = E_SOCKADDR_INIT, sal = E_SOCKADDR_INIT;
         char szIface[64], szStr[STRSIZ];          char szIface[64], szStr[STRSIZ];
Line 759  err: Line 765  err:
                 close(cli->cli_sock);                  close(cli->cli_sock);
         e_free(cli->cli_parent);          e_free(cli->cli_parent);
         e_free(cli);          e_free(cli);
   #else
           rpc_SetErr(ENOTSUP, "Feature isn't supported on Linux!");
   #endif
         return NULL;          return NULL;
 }  }
   

Removed from v.1.26  
changed lines
  Added in v.1.28


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