File:  [ELWIX - Embedded LightWeight unIX -] / libaitrpc / src / builtin.c
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Fri Jun 18 01:48:06 2010 UTC (14 years ago) by misho
Branches: MAIN
CVS tags: HEAD
Initial revision

    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: builtin.c,v 1.1 2010/06/18 01:48:06 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>