--- libaitrpc/src/srv.c 2012/03/14 15:08:03 1.6.2.8 +++ libaitrpc/src/srv.c 2012/03/15 00:44:24 1.6.2.9 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.6.2.8 2012/03/14 15:08:03 misho Exp $ +* $Id: srv.c,v 1.6.2.9 2012/03/15 00:44:24 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -85,7 +85,7 @@ txPacket(sched_task_t *task) /* calculate 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 */ ret = send(TASK_FD(task), buf, wlen, 0); @@ -187,7 +187,7 @@ rxPacket(sched_task_t *task) /* check integrity of packet */ crc = ntohs(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"); schedRead(TASK_ROOT(task), rxPacket, TASK_ARG(task), TASK_FD(task), @@ -274,7 +274,6 @@ rpc_srv_dispatchCall(void *arg) static void * txBLOB(sched_task_t *task) { - rpc_cli_t *c = TASK_ARG(task); u_char *buf = TASK_DATA(task); struct tagBLOBHdr *blob = (struct tagBLOBHdr *) buf; int wlen = sizeof(struct tagBLOBHdr); @@ -283,7 +282,7 @@ txBLOB(sched_task_t *task) /* calculate 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 */ wlen = send(TASK_FD(task), buf, wlen, 0); @@ -345,7 +344,7 @@ rxBLOB(sched_task_t *task) /* check integrity of packet */ crc = ntohs(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"); schedRead(TASK_ROOT(task), rxBLOB, TASK_ARG(task), TASK_FD(task), TASK_DATA(task), TASK_DATLEN(task)); @@ -353,7 +352,7 @@ rxBLOB(sched_task_t *task) } /* 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"); blob->hdr_cmd = error; goto end; @@ -461,26 +460,6 @@ rpc_srv_dispatchVars(void *arg) memset(c, 0, sizeof(rpc_cli_t)); free(buf); 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 } // ------------------------------------------------- @@ -756,6 +735,8 @@ rpc_srv_initServer(u_int regProgID, u_int regProcID, i Port = RPC_DEFPORT; if (!netBuf) netBuf = BUFSIZ; + else + netBuf = io_align(netBuf, 1); /* align netBuf length */ if (csHost && family != AF_LOCAL) { host = gethostbyname2(csHost, family); if (!host) {