Diff for /libaitrpc/src/cli.c between versions 1.16.8.2 and 1.16.8.3

version 1.16.8.2, 2013/08/22 08:56:15 version 1.16.8.3, 2013/08/22 11:52:20
Line 322  int Line 322  int
 rpc_pkt_Receive(int sock, int type, sockaddr_t * __restrict sa, ait_val_t * __restrict pkt)  rpc_pkt_Receive(int sock, int type, sockaddr_t * __restrict sa, ait_val_t * __restrict pkt)
 {  {
         struct pollfd pfd;          struct pollfd pfd;
        int ret, len = 0;        int ret, estlen, blen = sizeof(struct tagRPCCall), len = 0;
         u_char *buf;          u_char *buf;
         sockaddr_t sa2;          sockaddr_t sa2;
         socklen_t salen;          socklen_t salen;
           struct tagRPCCall *rpc;
   
         if (!pkt) {          if (!pkt) {
                 rpc_SetErr(EINVAL, "Invalid argument(s)!");                  rpc_SetErr(EINVAL, "Invalid argument(s)!");
Line 352  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res Line 353  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res
                         return -1;                          return -1;
                 }                  }
   
                memset(buf, 0, AIT_LEN(pkt));                if (type == SOCK_STREAM) {
                if (type == SOCK_STREAM)                        memset(buf, 0, blen);
                        ret = recv(sock, buf, AIT_LEN(pkt), 0);                        ret = recv(sock, buf, blen, 0);
                else {                } else {
                         blen = AIT_LEN(pkt);
                         memset(buf, 0, blen);
                         memset(&sa2, 0, sizeof sa2);                          memset(&sa2, 0, sizeof sa2);
                         salen = sa2.ss.ss_len = sizeof(sockaddr_t);                          salen = sa2.ss.ss_len = sizeof(sockaddr_t);
                        ret = recvfrom(sock, buf, AIT_LEN(pkt), 0, &sa2.sa, &salen);                        ret = recvfrom(sock, buf, blen, 0, &sa2.sa, &salen);
                 }                  }
                 if (ret < 1) {                  if (ret < 1) {
                         if (ret) {                          if (ret) {
Line 371  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res Line 374  rpc_pkt_Receive(int sock, int type, sockaddr_t * __res
                 }                  }
   
                 /* check for response from known address */                  /* check for response from known address */
                if (type == SOCK_DGRAM)                if (type == SOCK_DGRAM) {
                         if (e_addrcmp(sa, &sa2, 42)) {                          if (e_addrcmp(sa, &sa2, 42)) {
                                 rpc_SetErr(ERPCMISMATCH,                                   rpc_SetErr(ERPCMISMATCH, 
                                                 "Received RPC response from unknown address");                                                  "Received RPC response from unknown address");
                                 continue;                                  continue;
                         }                          }
                   } else {
                           /* 1st read for RPC header */
                           if (buf == AIT_GET_BUF(pkt)) {
                                   if (ret < sizeof(struct tagRPCCall)) {
                                           rpc_SetErr(ERPCMISMATCH, "Short RPC packet %d bytes", ret);
                                           return -1;
                                   }
   
                                   /* calc estimated length */
                                   rpc = (struct tagRPCCall*) buf;
                                   estlen = ntohs(rpc->call_len) + blen;
                                   printf("ret = %d len=%d\n", ret, estlen);
                                   if (estlen > AIT_LEN(pkt))
                                           AIT_RE_BUF(pkt, estlen);
                                   buf = AIT_GET_BUF(pkt) + blen;
                                   blen = AIT_LEN(pkt) - blen;
                           } else
                                   ret += sizeof(struct tagRPCCall);
                   }
         } while (0);          } while (0);
   
         if (ret < sizeof(struct tagRPCCall)) {          if (ret < sizeof(struct tagRPCCall)) {
                 rpc_SetErr(ERPCMISMATCH, "Short RPC packet %d bytes", ret);                  rpc_SetErr(ERPCMISMATCH, "Short RPC packet %d bytes", ret);
                 return -1;                  return -1;

Removed from v.1.16.8.2  
changed lines
  Added in v.1.16.8.3


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