--- libaitrpc/src/lists.c 2010/06/23 15:07:15 1.1.2.2 +++ libaitrpc/src/lists.c 2010/06/24 11:01:46 1.1.2.3 @@ -292,3 +292,63 @@ rpc_srv_getBLOB(rpc_srv_t * __restrict srv, uint32_t v return b; } +/* + * rpc_srv_registerBLOB() Register new BLOB to server + * @srv = RPC Server instance + * @len = BLOB length + * return: -1 error or 0 register ok + */ +rpc_blob_t * +rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_t len) +{ + rpc_blob_t *blob = NULL; + + if (!srv || !len) { + rpc_SetErr(EINVAL, "Error:: Invalid parameter can`t register BLOB to server ...\n"); + return blob; + } + + blob = rpc_srv_blobCreate(srv, len); + if (blob) { + pthread_mutex_lock(&srv->srv_blob.mtx); + blob->blob_next = srv->srv_blob.blobs; + srv->srv_blob.blobs = blob; + pthread_mutex_unlock(&srv->srv_blob.mtx); + } + + return blob; +} + +/* + * rpc_srv_unregisterBLOB() Unregister BLOB from server + * @srv = RPC Server instance + * @var = BLOB Variable for unregister + * return: -1 error, 0 not found call, 1 unregister ok + */ +int +rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uint32_t var) +{ + rpc_blob_t *b, *curr; + + if (!srv) { + rpc_SetErr(EINVAL, "Error:: Invalid parameter can`t unregister BLOB from server ...\n"); + return -1; + } + + b = rpc_srv_getBLOB(srv, var); + if (!b) // not found element for unregister + return 0; + + pthread_mutex_lock(&srv->srv_blob.mtx); + if (srv->srv_blob.blobs == b) { // if is 1st element + srv->srv_blob.blobs = srv->srv_blob.blobs->blob_next; + } else { + for (curr = srv->srv_blob.blobs; curr->blob_next != b; curr = curr->blob_next); + curr->blob_next = curr->blob_next->blob_next; + } + rpc_srv_blobFree(srv, b); + free(b); + pthread_mutex_unlock(&srv->srv_blob.mtx); + + return 1; +}