version 1.9.2.1, 2012/05/15 22:47:10
|
version 1.9.2.4, 2012/05/18 15:24:33
|
Line 52 SUCH DAMAGE.
|
Line 52 SUCH DAMAGE.
|
* @srv = RPC Server instance |
* @srv = RPC Server instance |
* @tag = Function tag |
* @tag = Function tag |
* @funcaddr = Function address |
* @funcaddr = Function address |
* @args = Number of return function arguments |
|
* return: -1 error, 0 already registered tag or 1 register ok |
* return: -1 error, 0 already registered tag or 1 register ok |
*/ |
*/ |
int |
int |
rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_short tag, void *funcaddr, u_short args) | rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_short tag, void *funcaddr) |
{ |
{ |
rpc_func_t *func; |
rpc_func_t *func; |
|
|
Line 81 rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_sho
|
Line 80 rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_sho
|
AIT_KEY(&func->func_name) = tag; |
AIT_KEY(&func->func_name) = tag; |
AIT_SET_PTR(&func->func_name, funcaddr, 0); |
AIT_SET_PTR(&func->func_name, funcaddr, 0); |
|
|
/* allocate return variables */ |
|
if (args > 0 && !(func->func_vars = io_allocVars(args))) { |
|
AIT_FREE_VAL(&func->func_name); |
|
free(func); |
|
return -1; |
|
} |
|
|
|
/* add to list of functions */ |
/* add to list of functions */ |
TAILQ_INSERT_TAIL(&srv->srv_funcs, func, func_node); |
TAILQ_INSERT_TAIL(&srv->srv_funcs, func, func_node); |
return 1; |
return 1; |
Line 116 rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, u_s
|
Line 108 rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, u_s
|
|
|
TAILQ_REMOVE(&srv->srv_funcs, f, func_node); |
TAILQ_REMOVE(&srv->srv_funcs, f, func_node); |
|
|
io_freeVars(&f->func_vars); |
|
AIT_FREE_VAL(&f->func_name); |
AIT_FREE_VAL(&f->func_name); |
free(f); |
free(f); |
return 1; |
return 1; |
Line 158 rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t t
|
Line 149 rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t t
|
inline rpc_blob_t * |
inline rpc_blob_t * |
rpc_srv_getBLOB(rpc_srv_t * __restrict srv, uint32_t var) |
rpc_srv_getBLOB(rpc_srv_t * __restrict srv, uint32_t var) |
{ |
{ |
rpc_blob_t *b; | rpc_blob_t *b, *tmp; |
|
|
if (!srv) { |
if (!srv) { |
rpc_SetErr(EINVAL, "Invalid parameter can`t get BLOB variable"); |
rpc_SetErr(EINVAL, "Invalid parameter can`t get BLOB variable"); |
return NULL; |
return NULL; |
} |
} |
|
|
for (b = srv->srv_blob.blobs; b; b = b->blob_next) { | TAILQ_FOREACH_SAFE(b, &srv->srv_blob.blobs, blob_node, tmp) |
if (b->blob_var == var) |
if (b->blob_var == var) |
break; |
break; |
} |
|
|
|
return b; |
return b; |
} |
} |
Line 191 rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_
|
Line 181 rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_
|
} |
} |
|
|
blob = rpc_srv_blobCreate(srv, len); |
blob = rpc_srv_blobCreate(srv, len); |
if (blob) { |
|
blob->blob_next = srv->srv_blob.blobs; |
|
srv->srv_blob.blobs = blob; |
|
} |
|
|
|
|
TAILQ_INSERT_TAIL(&srv->srv_blob.blobs, blob, blob_node); |
return blob; |
return blob; |
} |
} |
|
|
Line 209 rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_
|
Line 196 rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_
|
int |
int |
rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uint32_t var) |
rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uint32_t var) |
{ |
{ |
rpc_blob_t *b, *curr; | rpc_blob_t *b; |
|
|
if (!srv) { |
if (!srv) { |
rpc_SetErr(EINVAL, "Invalid parameter can`t unregister BLOB variable"); |
rpc_SetErr(EINVAL, "Invalid parameter can`t unregister BLOB variable"); |
Line 219 rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uin
|
Line 206 rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uin
|
b = rpc_srv_getBLOB(srv, var); |
b = rpc_srv_getBLOB(srv, var); |
if (!b) /* not found element for unregister */ |
if (!b) /* not found element for unregister */ |
return 0; |
return 0; |
/* if BLOB is unmapped force to unmap object */ |
|
if (b->blob_data) |
|
rpc_srv_blobUnmap(b); |
|
|
|
if (srv->srv_blob.blobs == b) { /* if is 1st element */ | TAILQ_REMOVE(&srv->srv_blob.blobs, b, blob_node); |
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); |
rpc_srv_blobFree(srv, b); |
free(b); |
free(b); |
|
|
return 1; |
return 1; |
} |
} |