--- libaitrpc/src/lists.c 2013/05/30 09:22:02 1.14 +++ libaitrpc/src/lists.c 2013/07/15 14:54:40 1.14.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: lists.c,v 1.14 2013/05/30 09:22:02 misho Exp $ +* $Id: lists.c,v 1.14.2.1 2013/07/15 14:54:40 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -168,17 +168,31 @@ rpc_srv_getBLOB(rpc_srv_t * __restrict srv, uint32_t v return b; } +static void * +toutBLOB(sched_task_t *task) +{ + rpc_cli_t *c = TASK_ARG(task); + + rpc_srv_unregisterBLOB((rpc_srv_t*) c->cli_parent, (uint32_t) TASK_DATA(task)); + + return NULL; +} + /* * rpc_srv_registerBLOB() - Register new BLOB to server * * @srv = RPC Server instance * @len = BLOB length + * @tout = BLOB live timeout in seconds + * @task = task called this function * return: NULL error or new registered BLOB */ rpc_blob_t * -rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_t len) +rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_t len, int tout, + sched_task_t * __restrict task) { rpc_blob_t *blob = NULL; + struct timespec ts = { tout ? tout : RPC_BLOB_TIMEOUT, 0 }; if (!srv || !len) { rpc_SetErr(EINVAL, "Invalid parameter can`t register BLOB variable"); @@ -188,6 +202,9 @@ rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_ blob = rpc_srv_blobCreate(srv, len); TAILQ_INSERT_TAIL(&srv->srv_blob.blobs, blob, blob_node); + + schedTimer(TASK_ROOT(task), toutBLOB, TASK_ARG(task), ts, + (void*) (intptr_t) blob->blob_var, blob->blob_len); return blob; }