--- libaitrpc/src/builtin.c 2011/05/02 23:12:08 1.2 +++ libaitrpc/src/builtin.c 2011/08/19 09:20:46 1.2.4.3 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: builtin.c,v 1.2 2011/05/02 23:12:08 misho Exp $ +* $Id: builtin.c,v 1.2.4.3 2011/08/19 09:20:46 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -55,10 +55,11 @@ rpcServerClients(rpc_func_t *call, int ic, rpc_val_t * rpc_val_t *v, *vals; rpc_cli_t *cli; register int i; - const char *str; + const char *str = NULL; char wrk[INET6_ADDRSTRLEN]; struct sockaddr_in *s; struct sockaddr_in6 *s6; + struct sockaddr_un *su; RPC_CALLBACK_CHECK_INPUT(call); if (!call->func_parent) @@ -66,7 +67,7 @@ rpcServerClients(rpc_func_t *call, int ic, rpc_val_t * else srv = call->func_parent; - if (!(vals = rpc_srv_retValsCall(call, srv->srv_numcli))) + if (!(vals = rpc_srv_returnVars(call, srv->srv_numcli))) return -1; for (i = 0, cli = srv->srv_clients, v = vals; i < srv->srv_numcli; i++, cli++) { @@ -75,12 +76,19 @@ rpcServerClients(rpc_func_t *call, int ic, rpc_val_t * continue; } - if (AF_INET == cli->cli_sa.sa_family) { - s = (struct sockaddr_in*) &cli->cli_sa; - str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk); - } else { - s6 = (struct sockaddr_in6*) &cli->cli_sa; - str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk); + switch (cli->cli_sa.sa_family) { + case AF_INET: + s = (struct sockaddr_in*) &cli->cli_sa; + str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk); + break; + case AF_INET6: + s6 = (struct sockaddr_in6*) &cli->cli_sa; + str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk); + break; + case AF_LOCAL: + su = (struct sockaddr_un*) &cli->cli_sa; + str = su->sun_path; + break; } if (str) RPC_SET_STR(v++, (char*) str); @@ -107,7 +115,7 @@ rpcServerCalls(rpc_func_t *call, int ic, rpc_val_t *iv srv = call->func_parent; for (i = 0, f = srv->srv_funcs; f; i++, f = f->func_next); - if (!(vals = rpc_srv_retValsCall(call, i))) + if (!(vals = rpc_srv_returnVars(call, i))) return -1; for (f = srv->srv_funcs, v = vals; f; f = f->func_next) { @@ -133,7 +141,7 @@ rpcServerSessions(rpc_func_t *call, int ic, rpc_val_t else srv = call->func_parent; - if (!(vals = rpc_srv_retValsCall(call, 4))) + if (!(vals = rpc_srv_returnVars(call, 4))) return -1; RPC_SET_U8(&vals[0], srv->srv_session.sess_version); @@ -156,7 +164,7 @@ rpcServerShutdown(rpc_func_t *call, int ic, rpc_val_t srv = call->func_parent; pthread_mutex_lock(&srv->srv_mtx); - rpc_Kill = 1; + srv->srv_kill = kill; pthread_mutex_unlock(&srv->srv_mtx); return 0; @@ -176,7 +184,7 @@ rpcBLOBServerShutdown(rpc_func_t *call, int ic, rpc_va srv = call->func_parent; pthread_mutex_lock(&srv->srv_blob.mtx); - blob_Kill = 1; + srv->srv_blob.state = kill; pthread_mutex_unlock(&srv->srv_blob.mtx); return 0; @@ -198,7 +206,7 @@ rpcBLOBServerVars(rpc_func_t *call, int ic, rpc_val_t pthread_mutex_lock(&srv->srv_blob.mtx); for (i = 0, b = srv->srv_blob.blobs; b; i++, b = b->blob_next); - if (!(vals = rpc_srv_retValsCall(call, i))) { + if (!(vals = rpc_srv_returnVars(call, i))) { pthread_mutex_unlock(&srv->srv_blob.mtx); return 0; } @@ -235,10 +243,11 @@ rpcBLOBServerClients(rpc_func_t *call, int ic, rpc_val rpc_val_t *v, *vals; rpc_cli_t *cli; register int i; - const char *str; + const char *str = NULL; char wrk[INET6_ADDRSTRLEN]; struct sockaddr_in *s; struct sockaddr_in6 *s6; + struct sockaddr_un *su; RPC_CALLBACK_CHECK_INPUT(call); if (!call->func_parent) @@ -246,7 +255,7 @@ rpcBLOBServerClients(rpc_func_t *call, int ic, rpc_val else srv = call->func_parent; - if (!(vals = rpc_srv_retValsCall(call, srv->srv_numcli))) + if (!(vals = rpc_srv_returnVars(call, srv->srv_numcli))) return -1; for (i = 0, cli = srv->srv_blob.clients, v = vals; i < srv->srv_numcli; i++, cli++) { @@ -255,12 +264,19 @@ rpcBLOBServerClients(rpc_func_t *call, int ic, rpc_val continue; } - if (AF_INET == cli->cli_sa.sa_family) { - s = (struct sockaddr_in*) &cli->cli_sa; - str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk); - } else { - s6 = (struct sockaddr_in6*) &cli->cli_sa; - str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk); + switch (cli->cli_sa.sa_family) { + case AF_INET: + s = (struct sockaddr_in*) &cli->cli_sa; + str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk); + break; + case AF_INET6: + s6 = (struct sockaddr_in6*) &cli->cli_sa; + str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk); + break; + case AF_LOCAL: + su = (struct sockaddr_un*) &cli->cli_sa; + str = su->sun_path; + break; } if (str) RPC_SET_STR(v++, (char*) str);