Diff for /libaitrpc/src/srv.c between versions 1.17.4.1 and 1.17.6.2

version 1.17.4.1, 2013/08/20 23:37:43 version 1.17.6.2, 2013/08/22 12:22:25
Line 74  rpc_freeCli(rpc_cli_t * __restrict c) Line 74  rpc_freeCli(rpc_cli_t * __restrict c)
   
         schedCancelby(s->srv_root, taskMAX, CRITERIA_ARG, c, NULL);          schedCancelby(s->srv_root, taskMAX, CRITERIA_ARG, c, NULL);
   
        /* free buffer(s) */        /* free buffer */
        ait_freeVars(&c->cli_buf);        AIT_FREE_VAL(&c->cli_buf);
   
         array_Del(s->srv_clients, c->cli_id, 0);          array_Del(s->srv_clients, c->cli_id, 0);
         if (c)          if (c)
Line 127  _allocClient(rpc_srv_t * __restrict srv, sockaddr_t *  Line 127  _allocClient(rpc_srv_t * __restrict srv, sockaddr_t * 
                 }                  }
   
                 /* alloc empty buffer */                  /* alloc empty buffer */
                c->cli_buf = ait_allocVars(1);                AIT_SET_BUFSIZ(&c->cli_buf, 0, srv->srv_netbuf);
                if (!c->cli_buf) { 
                        rpc_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); 
                        array_Del(srv->srv_clients, n, 42); 
                        return NULL; 
                } else 
                        AIT_SET_BUFSIZ(array(c->cli_buf, 0, ait_val_t*), 0, srv->srv_netbuf); 
         }          }
   
         return c;          return c;
Line 178  txPacket(sched_task_t *task) Line 172  txPacket(sched_task_t *task)
                 f = rpc_srv_getCall(s, ntohs(rpc->call_tag));                  f = rpc_srv_getCall(s, ntohs(rpc->call_tag));
                 if (!f) {                  if (!f) {
                         rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");                          rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                         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);
Line 197  txPacket(sched_task_t *task) Line 192  txPacket(sched_task_t *task)
                 }                  }
         }          }
   
        rpc->call_len = htons(wlen);        rpc->call_len = htonl(wlen);
   
 #if 0  #if 0
         /* calculate CRC */          /* calculate CRC */
Line 223  execCall(sched_task_t *task) Line 218  execCall(sched_task_t *task)
         rpc_srv_t *s = c->cli_parent;          rpc_srv_t *s = c->cli_parent;
         rpc_func_t *f = NULL;          rpc_func_t *f = NULL;
         array_t *arr = NULL;          array_t *arr = NULL;
        u_char *buf = AIT_GET_BUF(&c->cli_buf) + TASK_VAL(task);        u_char *buf = AIT_GET_BUF(&c->cli_buf);
         struct tagRPCCall *rpc = (struct tagRPCCall*) buf;          struct tagRPCCall *rpc = (struct tagRPCCall*) buf;
         int argc = ntohs(rpc->call_argc);          int argc = ntohs(rpc->call_argc);
   
         /* Go decapsulate variables ... */          /* Go decapsulate variables ... */
         if (argc) {          if (argc) {
                 arr = ait_buffer2vars(buf + sizeof(struct tagRPCCall),                   arr = ait_buffer2vars(buf + sizeof(struct tagRPCCall), 
                                AIT_LEN(&c->cli_buf) - TASK_VAL(task) - sizeof(struct tagRPCCall),                                 AIT_LEN(&c->cli_buf) - sizeof(struct tagRPCCall), argc, 42);
                                argc, 42); 
                 if (!arr) {                  if (!arr) {
                         rpc_SetErr(ERPCMISMATCH, "#%d - %s", elwix_GetErrno(), elwix_GetError());                          rpc_SetErr(ERPCMISMATCH, "#%d - %s", elwix_GetErrno(), elwix_GetError());
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                         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);
Line 244  execCall(sched_task_t *task) Line 239  execCall(sched_task_t *task)
   
         if (!(f = rpc_srv_getCall(s, ntohs(rpc->call_tag)))) {          if (!(f = rpc_srv_getCall(s, ntohs(rpc->call_tag)))) {
                 rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");                  rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");
   
                 rpc->call_argc ^= rpc->call_argc;                  rpc->call_argc ^= rpc->call_argc;
                 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);
Line 309  rxPacket(sched_task_t *task) Line 305  rxPacket(sched_task_t *task)
                 } else                  } else
                         rpc = (struct tagRPCCall*) (buf + off);                          rpc = (struct tagRPCCall*) (buf + off);
   
                len = ntohs(rpc->call_len);                len = ntohl(rpc->call_len);
                 rlen -= len;                  rlen -= len;
   
                 /* check RPC packet lengths */                  /* check RPC packet lengths */
Line 337  rxPacket(sched_task_t *task) Line 333  rxPacket(sched_task_t *task)
                 /* check RPC packet session info */                  /* check RPC packet session info */
                 if (rpc_chkPktSession(&rpc->call_session, &s->srv_session)) {                  if (rpc_chkPktSession(&rpc->call_session, &s->srv_session)) {
                         rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session");                          rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                         rpc->call_rep.ret = RPC_ERROR(-1);                          rpc->call_rep.ret = RPC_ERROR(-1);
                         rpc->call_rep.eno = RPC_ERROR(errno);                          rpc->call_rep.eno = RPC_ERROR(errno);
                 } else {                  } else {
                         /* execute RPC call */                          /* execute RPC call */
                        schedEvent(TASK_ROOT(task), execCall, TASK_ARG(task), off, NULL, 0);                        schedEvent(TASK_ROOT(task), execCall, TASK_ARG(task), 
                                         (int) noreply, rpc, len);
                 }                  }
   
                 /* send RPC reply */                  /* send RPC reply */
Line 428  txUDPPacket(sched_task_t *task) Line 426  txUDPPacket(sched_task_t *task)
                 }                  }
         }          }
   
        rpc->call_len = htons(wlen);        rpc->call_len = htonl(wlen);
   
         /* calculate CRC */          /* calculate CRC */
         rpc->call_crc ^= rpc->call_crc;          rpc->call_crc ^= rpc->call_crc;
Line 486  rxUDPPacket(sched_task_t *task) Line 484  rxUDPPacket(sched_task_t *task)
                 } else                  } else
                         rpc = (struct tagRPCCall*) (AIT_GET_BUF(&c->cli_buf) + off);                          rpc = (struct tagRPCCall*) (AIT_GET_BUF(&c->cli_buf) + off);
   
                len = ntohs(rpc->call_len);                len = ntohl(rpc->call_len);
                 rlen -= len;                  rlen -= len;
   
                 /* check RPC packet lengths */                  /* check RPC packet lengths */
Line 512  rxUDPPacket(sched_task_t *task) Line 510  rxUDPPacket(sched_task_t *task)
                 /* check RPC packet session info */                  /* check RPC packet session info */
                 if (rpc_chkPktSession(&rpc->call_session, &srv->srv_session)) {                  if (rpc_chkPktSession(&rpc->call_session, &srv->srv_session)) {
                         rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session");                          rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                         rpc->call_rep.ret = RPC_ERROR(-1);                          rpc->call_rep.ret = RPC_ERROR(-1);
                         rpc->call_rep.eno = RPC_ERROR(errno);                          rpc->call_rep.eno = RPC_ERROR(errno);
                 } else {                  } else {
                         /* execute RPC call */                          /* execute RPC call */
                        schedEvent(TASK_ROOT(task), execCall, c, off, NULL, 0);                        schedEvent(TASK_ROOT(task), execCall, c, 
                                         (int) noreply, rpc, len);
                 }                  }
   
                 /* send RPC reply */                  /* send RPC reply */

Removed from v.1.17.4.1  
changed lines
  Added in v.1.17.6.2


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