Diff for /libaitrpc/src/cli.c between versions 1.23.2.3 and 1.23.2.4

version 1.23.2.3, 2015/01/18 01:11:35 version 1.23.2.4, 2015/01/21 00:37:04
Line 350  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res Line 350  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res
         do {          do {
                 if (type == SOCK_STREAM)                  if (type == SOCK_STREAM)
                         ret = rpc_Read(sock, type, !estlen ? MSG_PEEK : 0, NULL, buf, blen);                          ret = rpc_Read(sock, type, !estlen ? MSG_PEEK : 0, NULL, buf, blen);
                else if (type == SOCK_EXT)                else if (type == SOCK_EXT) {
                         ret = rpc_Read(sock, type, 0, NULL, buf, blen);                          ret = rpc_Read(sock, type, 0, NULL, buf, blen);
                else if (type == SOCK_BPF) {                        if (ret > 0)
                                 estlen = ret;
                 } else if (type == SOCK_BPF) {
                         ret = rpc_Read(sock, type, 0, sa, AIT_GET_BUF(pkt), AIT_LEN(pkt));                          ret = rpc_Read(sock, type, 0, sa, AIT_GET_BUF(pkt), AIT_LEN(pkt));
                         if (ret > 0)                          if (ret > 0)
                                 estlen = ret;                                  estlen = ret;
Line 361  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res Line 363  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res
                 if (ret < 1)                  if (ret < 1)
                         return ret;                          return ret;
   
                   /* 1st read for RPC header */
                   if (ret < sizeof(struct tagRPCCall)) {
                           rpc_SetErr(ERPCMISMATCH, "Short RPC packet %d bytes", ret);
                           return -1;
                   }
   
                   /* check for loop request */
                   if (!(rpc->call_io & RPC_ACK))
                           continue;
   
                 /* check for response from known address */                  /* check for response from known address */
                 if (!estlen) {                  if (!estlen) {
                         /* 1st read for RPC header */  
                         if (ret < sizeof(struct tagRPCCall)) {  
                                 rpc_SetErr(ERPCMISMATCH, "Short RPC packet %d bytes", ret);  
                                 return -1;  
                         }  
   
                         /* calc estimated length */                          /* calc estimated length */
                         estlen = ntohl(rpc->call_len);                          estlen = ntohl(rpc->call_len);
                         if (estlen > AIT_LEN(pkt))                          if (estlen > AIT_LEN(pkt))
Line 383  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res Line 389  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res
                 break;                  break;
         } while (42);          } while (42);
   
        if (ret < sizeof(struct tagRPCCall) || estlen != ret) {        if (estlen != ret) {
                 rpc_SetErr(ERPCMISMATCH, "RPC packet mismatch estimate %d bytes, but received %d\n",                   rpc_SetErr(ERPCMISMATCH, "RPC packet mismatch estimate %d bytes, but received %d\n", 
                                 estlen, ret);                                  estlen, ret);
                 return -1;                  return -1;
Line 429  rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t Line 435  rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t
         if (!vars)          if (!vars)
                 rpc->call_argc = 0;                  rpc->call_argc = 0;
         else          else
                rpc->call_argc = htons(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 ? RPC_NOREPLY : RPC_REPLY);
Line 446  rpc_pkt_Request(ait_val_t * __restrict pkt, rpc_sess_t Line 452  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;
   
         if (!nocrc) {          if (!nocrc) {
                 /* calculate CRC */                  /* calculate CRC */
Line 507  rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_sess_t  Line 514  rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_sess_t 
                                 strerror(ntohl(rpc->call_rep.eno)));                                  strerror(ntohl(rpc->call_rep.eno)));
                 return -1;                  return -1;
         }          }
        len = ntohs(rpc->call_argc) * sizeof(ait_val_t);        len = rpc->call_argc * sizeof(ait_val_t);
         if (len > AIT_LEN(pkt) - sizeof(struct tagRPCCall)) {          if (len > AIT_LEN(pkt) - sizeof(struct tagRPCCall)) {
                 rpc_SetErr(EMSGSIZE, "Reply RPC packet not enough buffer space ...");                  rpc_SetErr(EMSGSIZE, "Reply RPC packet not enough buffer space ...");
                 return -1;                  return -1;
Line 518  rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_sess_t  Line 525  rpc_pkt_Replay(ait_val_t * __restrict pkt, rpc_sess_t 
         }          }
   
         /* RPC is OK! Go de-marshaling variables ... */          /* RPC is OK! Go de-marshaling variables ... */
        if (vars && ntohs(rpc->call_argc)) {        if (vars && rpc->call_argc) {
 #ifdef CLI_RES_ZCOPY  #ifdef CLI_RES_ZCOPY
                 *vars = ait_buffer2vars(buf + sizeof(struct tagRPCCall), len,                   *vars = ait_buffer2vars(buf + sizeof(struct tagRPCCall), len, 
                                ntohs(rpc->call_argc), 42);                                rpc->call_argc, 42);
 #else  #else
                 *vars = ait_buffer2vars(buf + sizeof(struct tagRPCCall), len,                   *vars = ait_buffer2vars(buf + sizeof(struct tagRPCCall), len, 
                                ntohs(rpc->call_argc), 0);                                rpc->call_argc, 0);
 #endif  #endif
                 if (!*vars) {                  if (!*vars) {
                         rpc_SetErr(elwix_GetErrno(), "%s", elwix_GetError());                          rpc_SetErr(elwix_GetErrno(), "%s", elwix_GetError());

Removed from v.1.23.2.3  
changed lines
  Added in v.1.23.2.4


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