--- libaitrpc/src/srv.c 2010/06/23 17:29:07 1.1.1.1.2.8 +++ libaitrpc/src/srv.c 2010/06/24 11:01:46 1.1.1.1.2.9 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.1.1.1.2.8 2010/06/23 17:29:07 misho Exp $ +* $Id: srv.c,v 1.1.1.1.2.9 2010/06/24 11:01:46 misho Exp $ * *************************************************************************/ #include "global.h" @@ -12,7 +12,7 @@ static void * rpc_srv_dispatchCall(void *arg) { - rpc_cli_t cli, *c = arg; + rpc_cli_t *c = arg; rpc_srv_t *s; rpc_val_t *vals, *v = NULL; rpc_func_t *f; @@ -74,10 +74,6 @@ rpc_srv_dispatchCall(void *arg) v[i].val.string = (int8_t*) data; data += v[i].val_len + 1; break; - case blob: - rpc_srv_getBLOBVar(&v[i], data); - data += sizeof(rpc_cli_t); - break; default: break; } @@ -135,20 +131,6 @@ rpc_srv_dispatchCall(void *arg) data += vals[i].val_len + 1; Limit += vals[i].val_len + 1; break; - case blob: - if (ret || Limit + sizeof(rpc_cli_t) > BUFSIZ) { - rpc_SetErr(EMSGSIZE, "Error:: in prepare RPC packet (-7) ...\n"); - rrpc.ret_retcode = ret = -7; - rrpc.ret_argc = 0; - break; - } - - memcpy(data, &cli, sizeof(rpc_cli_t)); - data += sizeof(rpc_cli_t); - Limit += sizeof(rpc_cli_t); - - rpc_srv_setBLOBVar(&vals[i], &cli); - break; default: break; } @@ -226,16 +208,16 @@ rpc_srv_dispatchVars(void *arg) ret = -5; 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 (!(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; + } + if (rpc_srv_blobMap(s, b) != -1) { ret = rpc_srv_sendBLOB(c, b); rpc_srv_blobUnmap(b); @@ -243,18 +225,17 @@ rpc_srv_dispatchVars(void *arg) ret = -7; break; case set: - if (b) { - rpc_SetErr(EINVAL, "Error:: Cannot set var into BLOB server, already exists ...\n"); - ret = -6; - break; - } + if ((b = rpc_srv_registerBLOB(s, blob->hdr_len))) { + // set new BLOB variable for reply :) + blob->hdr_var = b->blob_var; - ret = rpc_srv_recvBLOB(c); - if (ret == -1) + ret = rpc_srv_recvBLOB(c, b); + rpc_srv_blobUnmap(b); + } else ret = -7; break; case unset: - ret = rpc_srv_blobFree(s, b); + ret = rpc_srv_unregisterBLOB(s, blob->hdr_var); if (ret == -1) ret = -7; break;