Diff for /libaitrpc/src/srv.c between versions 1.21.2.2 and 1.21.2.6

version 1.21.2.2, 2013/11/14 23:38:41 version 1.21.2.6, 2013/11/15 09:09:39
Line 223  txPacket(sched_task_t *task) Line 223  txPacket(sched_task_t *task)
                         if (ret)                          if (ret)
                                 LOGERR;                                  LOGERR;
                         else                          else
                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Server not respond");                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Client not respond");
                         /* close connection */                          /* close connection */
                         schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT],                           schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], 
                                         TASK_ARG(task), 0, NULL, 0);                                          TASK_ARG(task), 0, NULL, 0);
Line 346  rxPacket(sched_task_t *task) Line 346  rxPacket(sched_task_t *task)
                         if (rlen)                          if (rlen)
                                 LOGERR;                                  LOGERR;
                         else                          else
                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Server not respond");                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Client not respond");
                         schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT],                           schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], 
                                         TASK_ARG(task), 0, NULL, 0);                                          TASK_ARG(task), 0, NULL, 0);
                         return NULL;                          return NULL;
Line 448  txUDPPacket(sched_task_t *task) Line 448  txUDPPacket(sched_task_t *task)
         rpc_func_t *f = NULL;          rpc_func_t *f = NULL;
         u_char *buf = AIT_GET_BUF(&c->cli_buf);          u_char *buf = AIT_GET_BUF(&c->cli_buf);
         struct tagRPCCall *rpc = (struct tagRPCCall*) buf;          struct tagRPCCall *rpc = (struct tagRPCCall*) buf;
        int ret, wlen = sizeof(struct tagRPCCall);        int ret, estlen, wlen = sizeof(struct tagRPCCall);
         struct timespec ts = { DEF_RPC_TIMEOUT, 0 };          struct timespec ts = { DEF_RPC_TIMEOUT, 0 };
         struct pollfd pfd;          struct pollfd pfd;
   
Line 464  txUDPPacket(sched_task_t *task) Line 464  txUDPPacket(sched_task_t *task)
                         rpc->call_rep.ret = RPC_ERROR(-1);                          rpc->call_rep.ret = RPC_ERROR(-1);
                         rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                          rpc->call_rep.eno = RPC_ERROR(rpc_Errno);
                 } else {                  } else {
                           /* calc estimated length */
                           estlen = ait_resideVars(RPC_RETVARS(c)) + wlen;
                           if (estlen > AIT_LEN(&c->cli_buf))
                                   AIT_RE_BUF(&c->cli_buf, estlen);
                           buf = AIT_GET_BUF(&c->cli_buf);
                           rpc = (struct tagRPCCall*) buf;
   
                         rpc->call_argc = htons(array_Size(RPC_RETVARS(c)));                          rpc->call_argc = htons(array_Size(RPC_RETVARS(c)));
                         /* Go Encapsulate variables */                          /* Go Encapsulate variables */
                         ret = ait_vars2buffer(buf + wlen, AIT_LEN(&c->cli_buf) - wlen,                           ret = ait_vars2buffer(buf + wlen, AIT_LEN(&c->cli_buf) - wlen, 
Line 495  txUDPPacket(sched_task_t *task) Line 502  txUDPPacket(sched_task_t *task)
                         if (ret)                          if (ret)
                                 LOGERR;                                  LOGERR;
                         else                          else
                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Server not respond");                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Client not respond");
                         /* close connection */                          /* close connection */
                         schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT],                           schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], 
                                         TASK_ARG(task), 0, NULL, 0);                                          TASK_ARG(task), 0, NULL, 0);
Line 537  rxUDPPacket(sched_task_t *task) Line 544  rxUDPPacket(sched_task_t *task)
         }          }
   
         c = _allocClient(srv, &sa);          c = _allocClient(srv, &sa);
        if (!c)        if (!c) {
                 EVERBOSE(1, "RPC client quota exceeded! Connection will be shutdown!\n");
                 usleep(2000);   /* blocked client delay */
                 goto end;                  goto end;
        else {        } else {
                 estlen = ntohl(rpc->call_len);                  estlen = ntohl(rpc->call_len);
                 if (estlen > AIT_LEN(&c->cli_buf))                  if (estlen > AIT_LEN(&c->cli_buf))
                         AIT_RE_BUF(&c->cli_buf, estlen);                          AIT_RE_BUF(&c->cli_buf, estlen);
Line 566  rxUDPPacket(sched_task_t *task) Line 575  rxUDPPacket(sched_task_t *task)
                         if (rlen)                          if (rlen)
                                 LOGERR;                                  LOGERR;
                         else                          else
                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Server not respond");                                rpc_SetErr(ETIMEDOUT, "Timeout reached! Client not respond");
                         schedEvent(TASK_ROOT(task), cbProto[srv->srv_proto][CB_CLOSECLIENT],                           schedEvent(TASK_ROOT(task), cbProto[srv->srv_proto][CB_CLOSECLIENT], 
                                         c, 0, NULL, 0);                                          c, 0, NULL, 0);
                         return NULL;                          return NULL;
                 }                  }
                   salen = sa.ss.ss_len = sizeof(sockaddr_t);
                 rlen = recvfrom(TASK_FD(task), buf, len, 0, &sa.sa, &salen);                  rlen = recvfrom(TASK_FD(task), buf, len, 0, &sa.sa, &salen);
                 if (rlen == -1) {                  if (rlen == -1) {
                         /* close connection */                          /* close connection */
Line 578  rxUDPPacket(sched_task_t *task) Line 588  rxUDPPacket(sched_task_t *task)
                                         c, 0, NULL, 0);                                          c, 0, NULL, 0);
                         return NULL;                          return NULL;
                 }                  }
                   if (e_addrcmp(&c->cli_sa, &sa, 42))
                           rlen ^= rlen;   /* skip if arrive from different address */
         }          }
         len = estlen;          len = estlen;
   

Removed from v.1.21.2.2  
changed lines
  Added in v.1.21.2.6


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