--- libaitrpc/src/blob.c 2010/06/23 16:23:31 1.1.2.2 +++ libaitrpc/src/blob.c 2010/06/23 17:29:07 1.1.2.3 @@ -94,19 +94,50 @@ rpc_srv_blobFree(rpc_srv_t * __restrict srv, rpc_blob_ // ------------------------------------------------------------ +/* + * rpc_srv_sendBLOB() Send mapped BLOB to client + * @cli = Client instance + * @blob = Mapped BLOB element + * return: -1 error, 0 ok + */ int -rpc_srv_sendBLOB(rpc_cli_t * __restrict cli, rpc_blob_t *blob) +rpc_srv_sendBLOB(rpc_cli_t * __restrict cli, rpc_blob_t * __restrict blob) { - int ret = 0; - uint8_t buf[BLOBSIZ]; + int ret, len; + uint8_t *pos; - if (!cli || !blob) { + if (!cli || !blob || !blob->blob_data) { rpc_SetErr(EINVAL, "Error:: invalid arguments ...\n"); return -1; } - do { - } while (ret); + for (ret = blob->blob_len, pos = blob->blob_data; ret > 0; ret -= len, pos += len) + if ((len = send(cli->cli_sock, pos, ret > BLOBSIZ ? BLOBSIZ : ret, 0)) == -1) { + LOGERR; + return -1; + } - return blob->blob_len; + return ret; +} + +/* + * rpc_srv_recvBLOB() Receive BLOB from client + * @cli = Client instance + * return: -1 error, 0 ok + */ +int +rpc_srv_recvBLOB(rpc_cli_t * __restrict cli) +{ + int ret, len; + uint8_t *pos; + rpc_srv_t *s; + + if (!cli || !cli->cli_parent) { + rpc_SetErr(EINVAL, "Error:: invalid arguments ...\n"); + return -1; + } else + s = cli->cli_parent; + + + return ret; }