--- libaitrpc/src/builtin.c 2010/06/18 01:48:06 1.1.1.1 +++ libaitrpc/src/builtin.c 2010/06/24 15:01:19 1.1.1.1.2.3 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: builtin.c,v 1.1.1.1 2010/06/18 01:48:06 misho Exp $ +* $Id: builtin.c,v 1.1.1.1.2.3 2010/06/24 15:01:19 misho Exp $ * *************************************************************************/ #include "global.h" @@ -12,9 +12,10 @@ /* builtin RPC server functions */ int -rpcServerClients(rpc_srv_t * __restrict srv, rpc_func_t *call, int ic, rpc_val_t *iv) +rpcServerClients(rpc_func_t *call, int ic, rpc_val_t *iv) { - rpc_val_t *v, *vals = NULL; + rpc_srv_t *srv; + rpc_val_t *v, *vals; rpc_cli_t *cli; register int i; const char *str; @@ -22,15 +23,13 @@ rpcServerClients(rpc_srv_t * __restrict srv, rpc_func_ struct sockaddr_in *s; struct sockaddr_in6 *s6; - if (!srv || !call) { - rpc_SetErr(EINVAL, "Error:: invalid parameters ...\n"); + RPC_CALLBACK_CHECK_INPUT(call); + if (!call->func_parent) return -1; - } - if (rpc_srv_declValsCall(call, srv->srv_numcli) == -1) - return -1; else - rpc_srv_delValsCall(call); - if (rpc_srv_getValsCall(call, &vals) == -1) + srv = call->func_parent; + + if (!(vals = rpc_srv_retValsCall(call, srv->srv_numcli))) return -1; for (i = 0, cli = srv->srv_clients, v = vals; i < srv->srv_numcli; cli++) { @@ -54,26 +53,23 @@ rpcServerClients(rpc_srv_t * __restrict srv, rpc_func_ } int -rpcServerCalls(rpc_srv_t * __restrict srv, rpc_func_t *call, int ic, rpc_val_t *iv) +rpcServerCalls(rpc_func_t *call, int ic, rpc_val_t *iv) { - rpc_val_t *v, *vals = NULL; + rpc_srv_t *srv; + rpc_val_t *v, *vals; rpc_func_t *f; register int i; char str[MAXPATHLEN]; - if (!srv || !call) { - rpc_SetErr(EINVAL, "Error:: invalid parameters ...\n"); + RPC_CALLBACK_CHECK_INPUT(call); + if (!call->func_parent) return -1; - } + else + srv = call->func_parent; for (i = 0, f = srv->srv_funcs; f; i++, f = f->func_next); - - if (rpc_srv_declValsCall(call, i) == -1) + if (!(vals = rpc_srv_retValsCall(call, i))) return -1; - else - rpc_srv_delValsCall(call); - if (rpc_srv_getValsCall(call, &vals) == -1) - return -1; for (f = srv->srv_funcs, v = vals; f; f = f->func_next) { if (*f->func_name) { @@ -87,21 +83,19 @@ rpcServerCalls(rpc_srv_t * __restrict srv, rpc_func_t } int -rpcServerSessions(rpc_srv_t * __restrict srv, rpc_func_t *call, int ic, rpc_val_t *iv) +rpcServerSessions(rpc_func_t *call, int ic, rpc_val_t *iv) { - rpc_val_t *vals = NULL; + rpc_srv_t *srv; + rpc_val_t *vals; - if (!srv || !call) { - rpc_SetErr(EINVAL, "Error:: invalid parameters ...\n"); + RPC_CALLBACK_CHECK_INPUT(call); + if (!call->func_parent) return -1; - } + else + srv = call->func_parent; - if (rpc_srv_declValsCall(call, 4) == -1) + if (!(vals = rpc_srv_retValsCall(call, 4))) return -1; - else - rpc_srv_delValsCall(call); - if (rpc_srv_getValsCall(call, &vals) == -1) - return -1; RPC_SET_U8(&vals[0], srv->srv_session.sess_version); RPC_SET_U32(&vals[1], srv->srv_session.sess_program); @@ -110,3 +104,66 @@ rpcServerSessions(rpc_srv_t * __restrict srv, rpc_func return 0; } + +int +rpcServerShutdown(rpc_func_t *call, int ic, rpc_val_t *iv) +{ + rpc_srv_t *srv; + + RPC_CALLBACK_CHECK_INPUT(call); + if (!call->func_parent) + return -1; + else + srv = call->func_parent; + + pthread_mutex_lock(&srv->srv_mtx); + rpc_Kill = 1; + pthread_mutex_unlock(&srv->srv_mtx); + + return 0; +} + +// ---------------------------------------------------- + +int +rpcBLOBServerShutdown(rpc_func_t *call, int ic, rpc_val_t *iv) +{ + rpc_srv_t *srv; + + RPC_CALLBACK_CHECK_INPUT(call); + if (!call->func_parent) + return -1; + else + srv = call->func_parent; + + pthread_mutex_lock(&srv->srv_blob.mtx); + blob_Kill = 1; + pthread_mutex_unlock(&srv->srv_blob.mtx); + + return 0; +} + +int +rpcBLOBServerVars(rpc_func_t *call, int ic, rpc_val_t *iv) +{ + rpc_srv_t *srv; + rpc_val_t *v, *vals; + rpc_blob_t *b; + register int i; + + RPC_CALLBACK_CHECK_INPUT(call); + if (!call->func_parent) + return -1; + else + srv = call->func_parent; + + for (i = 0, b = srv->srv_blob.blobs; b; i++, b = b->blob_next); + if (!(vals = rpc_srv_retValsCall(call, i))) + return -1; + + for (b = srv->srv_blob.blobs, v = vals; b; b = b->blob_next) + RPC_SET_U32(v++, b->blob_var); + + return 0; +} +