Annotation of libaitrpc/src/builtin.c, revision 1.1
1.1 ! misho 1: /*************************************************************************
! 2: * (C) 2010 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
! 3: * by Michael Pounov <misho@openbsd-bg.org>
! 4: *
! 5: * $Author: misho $
! 6: * $Id: aitcli.c,v 1.2.2.17 2010/06/09 09:32:30 misho Exp $
! 7: *
! 8: *************************************************************************/
! 9: #include "global.h"
! 10:
! 11:
! 12: /* builtin RPC server functions */
! 13:
! 14: int
! 15: rpcServerClients(rpc_srv_t * __restrict srv, rpc_func_t *call, int ic, rpc_val_t *iv)
! 16: {
! 17: rpc_val_t *v, *vals = NULL;
! 18: rpc_cli_t *cli;
! 19: register int i;
! 20: const char *str;
! 21: char wrk[INET6_ADDRSTRLEN];
! 22: struct sockaddr_in *s;
! 23: struct sockaddr_in6 *s6;
! 24:
! 25: if (!srv || !call) {
! 26: rpc_SetErr(EINVAL, "Error:: invalid parameters ...\n");
! 27: return -1;
! 28: }
! 29: if (rpc_srv_declValsCall(call, srv->srv_numcli) == -1)
! 30: return -1;
! 31: else
! 32: rpc_srv_delValsCall(call);
! 33: if (rpc_srv_getValsCall(call, &vals) == -1)
! 34: return -1;
! 35:
! 36: for (i = 0, cli = srv->srv_clients, v = vals; i < srv->srv_numcli; cli++) {
! 37: if (!cli->cli_sa.sa_family)
! 38: continue;
! 39:
! 40: if (AF_INET == cli->cli_sa.sa_family) {
! 41: s = (struct sockaddr_in*) &cli->cli_sa;
! 42: str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk);
! 43: } else {
! 44: s6 = (struct sockaddr_in6*) &cli->cli_sa;
! 45: str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk);
! 46: }
! 47: if (str) {
! 48: RPC_SET_STR(v++, (char*) str);
! 49: i++;
! 50: }
! 51: }
! 52:
! 53: return 0;
! 54: }
! 55:
! 56: int
! 57: rpcServerCalls(rpc_srv_t * __restrict srv, rpc_func_t *call, int ic, rpc_val_t *iv)
! 58: {
! 59: rpc_val_t *v, *vals = NULL;
! 60: rpc_func_t *f;
! 61: register int i;
! 62: char str[MAXPATHLEN];
! 63:
! 64: if (!srv || !call) {
! 65: rpc_SetErr(EINVAL, "Error:: invalid parameters ...\n");
! 66: return -1;
! 67: }
! 68:
! 69: for (i = 0, f = srv->srv_funcs; f; i++, f = f->func_next);
! 70:
! 71: if (rpc_srv_declValsCall(call, i) == -1)
! 72: return -1;
! 73: else
! 74: rpc_srv_delValsCall(call);
! 75: if (rpc_srv_getValsCall(call, &vals) == -1)
! 76: return -1;
! 77:
! 78: for (f = srv->srv_funcs, v = vals; f; f = f->func_next) {
! 79: if (*f->func_name) {
! 80: memset(str, 0, MAXPATHLEN);
! 81: snprintf(str, MAXPATHLEN, "/%s/%s()", f->func_file, f->func_name);
! 82: RPC_SET_STR(v++, str);
! 83: }
! 84: }
! 85:
! 86: return 0;
! 87: }
! 88:
! 89: int
! 90: rpcServerSessions(rpc_srv_t * __restrict srv, rpc_func_t *call, int ic, rpc_val_t *iv)
! 91: {
! 92: rpc_val_t *vals = NULL;
! 93:
! 94: if (!srv || !call) {
! 95: rpc_SetErr(EINVAL, "Error:: invalid parameters ...\n");
! 96: return -1;
! 97: }
! 98:
! 99: if (rpc_srv_declValsCall(call, 4) == -1)
! 100: return -1;
! 101: else
! 102: rpc_srv_delValsCall(call);
! 103: if (rpc_srv_getValsCall(call, &vals) == -1)
! 104: return -1;
! 105:
! 106: RPC_SET_U8(&vals[0], srv->srv_session.sess_version);
! 107: RPC_SET_U32(&vals[1], srv->srv_session.sess_program);
! 108: RPC_SET_U32(&vals[2], srv->srv_session.sess_process);
! 109: RPC_SET_I32(&vals[3], srv->srv_numcli);
! 110:
! 111: return 0;
! 112: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>