--- libaitrpc/src/builtin.c 2010/06/23 11:33:38 1.1.1.1.2.2 +++ 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.2.2 2010/06/23 11:33:38 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,13 +23,13 @@ rpcServerClients(rpc_srv_t * __restrict srv, rpc_func_ struct sockaddr_in *s; struct sockaddr_in6 *s6; - RPC_CALLBACK_CHECK_INPUT(srv, call); - - if (rpc_srv_declValsCall(call, srv->srv_numcli) == -1) + RPC_CALLBACK_CHECK_INPUT(call); + if (!call->func_parent) 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++) { @@ -52,23 +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]; - RPC_CALLBACK_CHECK_INPUT(srv, call); + 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) { @@ -82,17 +83,18 @@ 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; - RPC_CALLBACK_CHECK_INPUT(srv, call); - - if (rpc_srv_declValsCall(call, 4) == -1) + RPC_CALLBACK_CHECK_INPUT(call); + if (!call->func_parent) return -1; else - rpc_srv_delValsCall(call); - if (rpc_srv_getValsCall(call, &vals) == -1) + srv = call->func_parent; + + if (!(vals = rpc_srv_retValsCall(call, 4))) return -1; RPC_SET_U8(&vals[0], srv->srv_session.sess_version); @@ -104,13 +106,64 @@ rpcServerSessions(rpc_srv_t * __restrict srv, rpc_func } int -rpcServerShutdown(rpc_srv_t * __restrict srv, rpc_func_t *call, int ic, rpc_val_t *iv) +rpcServerShutdown(rpc_func_t *call, int ic, rpc_val_t *iv) { - RPC_CALLBACK_CHECK_INPUT(srv, call); + 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; +} +