--- libaitrpc/src/srv.c 2010/06/23 16:44:24 1.1.1.1.2.7 +++ libaitrpc/src/srv.c 2010/06/23 17:29:07 1.1.1.1.2.8 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.1.1.1.2.7 2010/06/23 16:44:24 misho Exp $ +* $Id: srv.c,v 1.1.1.1.2.8 2010/06/23 17:29:07 misho Exp $ * *************************************************************************/ #include "global.h" @@ -196,14 +196,13 @@ rpc_srv_dispatchVars(void *arg) cx = -1; do { - cx++; - FD_ZERO(&fds); FD_SET(c->cli_sock, &fds); ret = select(c->cli_sock + 1, &fds, NULL, NULL, NULL); if (ret == -1) { ret = -2; - } + } else + cx++; memset(buf, 0, sizeof buf); if ((ret = recv(c->cli_sock, buf, sizeof buf, 0)) == -1) { LOGERR; @@ -227,12 +226,14 @@ rpc_srv_dispatchVars(void *arg) ret = -5; break; } - // Go to decapsulate packet ... - if (!(b = rpc_srv_getBLOB(s, blob->hdr_var))) { - rpc_SetErr(EINVAL, "Error:: var (%x) not found into BLOB server ...\n", blob->hdr_var); - ret = -6; - break; - } + // get requested BLOB object + if (!(b = rpc_srv_getBLOB(s, blob->hdr_var))) + if (blob->hdr_cmd != set) { + rpc_SetErr(EINVAL, "Error:: var (%x) not found into BLOB server ...\n", blob->hdr_var); + ret = -6; + break; + } + // Go to proceed packet ... switch (blob->hdr_cmd) { case get: if (rpc_srv_blobMap(s, b) != -1) { @@ -242,12 +243,18 @@ rpc_srv_dispatchVars(void *arg) ret = -7; break; case set: - ret = rpc_srv_recvBLOB(c, b); + if (b) { + rpc_SetErr(EINVAL, "Error:: Cannot set var into BLOB server, already exists ...\n"); + ret = -6; + break; + } + + ret = rpc_srv_recvBLOB(c); if (ret == -1) ret = -7; break; case unset: - ret = rpc_srv_deleteBLOB(c, b); + ret = rpc_srv_blobFree(s, b); if (ret == -1) ret = -7; break;