Diff for /libaitrpc/src/srv.c between versions 1.6.2.8 and 1.6.2.9

version 1.6.2.8, 2012/03/14 15:08:03 version 1.6.2.9, 2012/03/15 00:44:24
Line 85  txPacket(sched_task_t *task) Line 85  txPacket(sched_task_t *task)
   
         /* calculate CRC */          /* calculate CRC */
         rpc->call_crc ^= rpc->call_crc;          rpc->call_crc ^= rpc->call_crc;
        rpc->call_crc = htons(crcFletcher16((u_short*) buf, ((wlen + 1) & ~1) / 2));        rpc->call_crc = htons(crcFletcher16((u_short*) buf, io_align(wlen, 1) / 2));
   
         /* send reply */          /* send reply */
         ret = send(TASK_FD(task), buf, wlen, 0);          ret = send(TASK_FD(task), buf, wlen, 0);
Line 187  rxPacket(sched_task_t *task) Line 187  rxPacket(sched_task_t *task)
         /* check integrity of packet */          /* check integrity of packet */
         crc = ntohs(rpc->call_crc);          crc = ntohs(rpc->call_crc);
         rpc->call_crc ^= rpc->call_crc;          rpc->call_crc ^= rpc->call_crc;
        if (crc != crcFletcher16((u_short*) buf, ((rlen + 1) & ~1) / 2)) {        if (crc != crcFletcher16((u_short*) buf, io_align(rlen, 1) / 2)) {
                 rpc_SetErr(ERPCMISMATCH, "Bad CRC RPC packet");                  rpc_SetErr(ERPCMISMATCH, "Bad CRC RPC packet");
   
                 schedRead(TASK_ROOT(task), rxPacket, TASK_ARG(task), TASK_FD(task),                   schedRead(TASK_ROOT(task), rxPacket, TASK_ARG(task), TASK_FD(task), 
Line 274  rpc_srv_dispatchCall(void *arg) Line 274  rpc_srv_dispatchCall(void *arg)
 static void *  static void *
 txBLOB(sched_task_t *task)  txBLOB(sched_task_t *task)
 {  {
         rpc_cli_t *c = TASK_ARG(task);  
         u_char *buf = TASK_DATA(task);          u_char *buf = TASK_DATA(task);
         struct tagBLOBHdr *blob = (struct tagBLOBHdr *) buf;          struct tagBLOBHdr *blob = (struct tagBLOBHdr *) buf;
         int wlen = sizeof(struct tagBLOBHdr);          int wlen = sizeof(struct tagBLOBHdr);
Line 283  txBLOB(sched_task_t *task) Line 282  txBLOB(sched_task_t *task)
   
         /* calculate CRC */          /* calculate CRC */
         blob->hdr_crc ^= blob->hdr_crc;          blob->hdr_crc ^= blob->hdr_crc;
        blob->hdr_crc = htons(crcFletcher16((u_short*) buf, ((wlen + 1) & ~1) / 2));        blob->hdr_crc = htons(crcFletcher16((u_short*) buf, io_align(wlen, 1) / 2));
   
         /* send reply */          /* send reply */
         wlen = send(TASK_FD(task), buf, wlen, 0);          wlen = send(TASK_FD(task), buf, wlen, 0);
Line 345  rxBLOB(sched_task_t *task) Line 344  rxBLOB(sched_task_t *task)
         /* check integrity of packet */          /* check integrity of packet */
         crc = ntohs(blob->hdr_crc);          crc = ntohs(blob->hdr_crc);
         blob->hdr_crc ^= blob->hdr_crc;          blob->hdr_crc ^= blob->hdr_crc;
        if (crc != crcFletcher16((u_short*) buf, ((rlen + 1) & ~1) / 2)) {        if (crc != crcFletcher16((u_short*) buf, io_align(rlen, 1) / 2)) {
                 rpc_SetErr(ERPCMISMATCH, "Bad CRC BLOB packet");                  rpc_SetErr(ERPCMISMATCH, "Bad CRC BLOB packet");
                 schedRead(TASK_ROOT(task), rxBLOB, TASK_ARG(task), TASK_FD(task),                   schedRead(TASK_ROOT(task), rxBLOB, TASK_ARG(task), TASK_FD(task), 
                                 TASK_DATA(task), TASK_DATLEN(task));                                  TASK_DATA(task), TASK_DATLEN(task));
Line 353  rxBLOB(sched_task_t *task) Line 352  rxBLOB(sched_task_t *task)
         }          }
   
         /* check RPC packet session info */          /* check RPC packet session info */
        if (rpc_chkPktSession(&blob->hdr_session, &s->srv_session)) {        if ((crc = rpc_chkPktSession(&blob->hdr_session, &s->srv_session))) {
                 rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session");                  rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session");
                 blob->hdr_cmd = error;                  blob->hdr_cmd = error;
                 goto end;                  goto end;
Line 461  rpc_srv_dispatchVars(void *arg) Line 460  rpc_srv_dispatchVars(void *arg)
         memset(c, 0, sizeof(rpc_cli_t));          memset(c, 0, sizeof(rpc_cli_t));
         free(buf);          free(buf);
         return NULL;          return NULL;
   
 #if 0  
 makeReply:  
                 /* Replay to client! */  
                 ret = send(c->cli_sock, buf, sizeof buf, 0);  
                 if (ret == -1) {  
                         LOGERR;  
                         ret = -8;  
                         break;  
                 }  
                 if (ret != sizeof buf) {  
                         rpc_SetErr(EPROCUNAVAIL, "Error:: in send BLOB reply, should be send %d bytes, "  
                                         "really is %d\n", sizeof buf, ret);  
                         ret = -9;  
                         if (s->srv_kill != kill && s->srv_blob.state != kill)  
                                 continue;  
                         else  
                                 break;  
                 }  
 #endif  
 }  }
   
 // -------------------------------------------------  // -------------------------------------------------
Line 756  rpc_srv_initServer(u_int regProgID, u_int regProcID, i Line 735  rpc_srv_initServer(u_int regProgID, u_int regProcID, i
                 Port = RPC_DEFPORT;                  Port = RPC_DEFPORT;
         if (!netBuf)          if (!netBuf)
                 netBuf = BUFSIZ;                  netBuf = BUFSIZ;
           else
                   netBuf = io_align(netBuf, 1);   /* align netBuf length */
         if (csHost && family != AF_LOCAL) {          if (csHost && family != AF_LOCAL) {
                 host = gethostbyname2(csHost, family);                  host = gethostbyname2(csHost, family);
                 if (!host) {                  if (!host) {

Removed from v.1.6.2.8  
changed lines
  Added in v.1.6.2.9


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