Diff for /libaitrpc/src/aitrpc.c between versions 1.11 and 1.14

version 1.11, 2013/08/23 13:53:15 version 1.14, 2013/12/15 23:01:02
Line 149  rpc_addPktSession(rpc_sess_t *p, rpc_sess_t *s) Line 149  rpc_addPktSession(rpc_sess_t *p, rpc_sess_t *s)
  * @sa = check client address, if you use udp protocol   * @sa = check client address, if you use udp protocol
  * @buf = buffer   * @buf = buffer
  * @blen = buffer length   * @blen = buffer length
 * return: -1 error or >-1 readed bytes into buffer * return: -1 error, 0 EOF or or >0 readed bytes into buffer
  */   */
 ssize_t  ssize_t
 rpc_Read(int sock, int type, int flags, sockaddr_t * __restrict sa,   rpc_Read(int sock, int type, int flags, sockaddr_t * __restrict sa, 
Line 166  rpc_Read(int sock, int type, int flags, sockaddr_t * _ Line 166  rpc_Read(int sock, int type, int flags, sockaddr_t * _
         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);
   
        if (type == SOCK_STREAM) {        for (len = blen; len > 0; len -= ret, buf += ret) {
                for (len = blen; len > 0; len -= ret, buf += ret) {                if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 || 
                        if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 ||                                 pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) {
                                        pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) {                        if (ret)
                                 LOGERR;                                  LOGERR;
                                return -1;                        else
                        } else                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Server not respond");
                                ret = recv(sock, buf, len, flags);                        return -1;
                        if (ret == -1) { 
                                LOGERR; 
                                return -1; 
                        } 
                 }                  }
                if (ret > -1)                if (type == SOCK_STREAM)
                        ret = blen - len;                        ret = recv(sock, buf, len, flags);
        } else {                else {
                do {                        ret = recvfrom(sock, buf, len, flags, &sa2.sa, &salen);
                        if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 ||                         if (ret > -1 && sa && e_addrcmp(sa, &sa2, 42)) {
                                        pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) {                                rpc_SetErr(ERPCMISMATCH, 
                                LOGERR;                                                "Received RPC response from unknown address");
                                 return -1;                                  return -1;
                         } else  
                                 ret = recvfrom(sock, buf, blen, flags, &sa2.sa, &salen);  
                         if (ret < 0) {  
                                 LOGERR;  
                                 return -1;  
                         }                          }
                        if (e_addrcmp(sa, &sa2, 42))                }
                                rpc_SetErr(ERPCMISMATCH, "Received RPC response from unknown address");                if (ret == -1) {
                        else                        LOGERR;
                                break;                        return -1;
                } while (42);                }
                 if (!ret)       /* EOF */
                         return 0;
         }          }
           ret = blen - len;
   
         return ret;          return ret;
 }  }
Line 212  rpc_Read(int sock, int type, int flags, sockaddr_t * _ Line 206  rpc_Read(int sock, int type, int flags, sockaddr_t * _
  * @sa = send to client address, if you use udp protocol   * @sa = send to client address, if you use udp protocol
  * @buf = buffer   * @buf = buffer
  * @blen = buffer length   * @blen = buffer length
 * return: -1 error or >-1 written bytes into buffer * return: -1 error, 0 EOF or >0 written bytes into buffer
  */   */
 ssize_t  ssize_t
 rpc_Write(int sock, int type, int flags, sockaddr_t * __restrict sa,   rpc_Write(int sock, int type, int flags, sockaddr_t * __restrict sa, 
Line 223  rpc_Write(int sock, int type, int flags, sockaddr_t *  Line 217  rpc_Write(int sock, int type, int flags, sockaddr_t * 
   
         pfd.fd = sock;          pfd.fd = sock;
         pfd.events = POLLOUT;          pfd.events = POLLOUT;
        for (len = blen; len > 0; len -= ret, buf += ret) {
        if (type == SOCK_STREAM) { 
                for (len = blen; len > 0; len -= ret, buf += ret) { 
                        if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 ||  
                                        pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) { 
                                LOGERR; 
                                return -1; 
                        } else 
                                ret = send(sock, buf, len, flags); 
                        if (ret == -1) { 
                                LOGERR; 
                                return -1; 
                        } 
                } 
                if (ret > -1) 
                        ret = blen - len; 
        } else if (sa) { 
                 if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 ||                   if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 || 
                                 pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) {                                  pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) {
   #if 0
                           if (!ret)
                                   continue;
   #endif
                           if (ret > 0)
                                   rpc_SetErr(EPIPE, "Disconnected RPC session\n");
                           else
                                   LOGERR;
                           return -1;
                   }
                   if (type == SOCK_STREAM)
                           ret = send(sock, buf, len, flags);
                   else if (sa)
                           ret = sendto(sock, buf, len, flags, &sa->sa, sa->sa.sa_len);
                   else {
                           rpc_SetErr(EINVAL, "Invalid argument(s)!");
                           return -1;
                   }
                   if (ret == -1) {
                         LOGERR;                          LOGERR;
                         return -1;                          return -1;
                } else                }
                        ret = sendto(sock, buf, blen, flags, &sa->sa, sa->sa.sa_len);                if (!ret)       /* EOF */
        } else {                        return 0;
                rpc_SetErr(EINVAL, "Invalid argument(s)!"); 
                return -1; 
         }          }
        if (ret == -1) {        ret = blen - len;
                LOGERR;        if (ret != blen) {
                return -1; 
        } else if (ret != blen) { 
                 rpc_SetErr(EPROCUNAVAIL, "RPC request, should be send %d bytes, "                  rpc_SetErr(EPROCUNAVAIL, "RPC request, should be send %d bytes, "
                                 "really sended %d bytes", len, ret);                                  "really sended %d bytes", len, ret);
                 return -1;                  return -1;

Removed from v.1.11  
changed lines
  Added in v.1.14


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