Annotation of libaitrpc/src/aitrpc.c, revision 1.5.6.5
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 $
1.5.6.5 ! misho 6: * $Id: aitrpc.c,v 1.5.6.4 2012/05/15 22:47:10 misho Exp $
1.1 misho 7: *
1.2 misho 8: **************************************************************************
9: The ELWIX and AITNET software is distributed under the following
10: terms:
11:
12: All of the documentation and software included in the ELWIX and AITNET
13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
14:
1.5 misho 15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
1.2 misho 16: by Michael Pounov <misho@elwix.org>. All rights reserved.
17:
18: Redistribution and use in source and binary forms, with or without
19: modification, are permitted provided that the following conditions
20: are met:
21: 1. Redistributions of source code must retain the above copyright
22: notice, this list of conditions and the following disclaimer.
23: 2. Redistributions in binary form must reproduce the above copyright
24: notice, this list of conditions and the following disclaimer in the
25: documentation and/or other materials provided with the distribution.
26: 3. All advertising materials mentioning features or use of this software
27: must display the following acknowledgement:
28: This product includes software developed by Michael Pounov <misho@elwix.org>
29: ELWIX - Embedded LightWeight unIX and its contributors.
30: 4. Neither the name of AITNET nor the names of its contributors
31: may be used to endorse or promote products derived from this software
32: without specific prior written permission.
33:
34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
37: ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44: SUCH DAMAGE.
45: */
1.1 misho 46: #include "global.h"
47:
48:
49: #pragma GCC visibility push(hidden)
50:
51: int rpc_Errno;
52: char rpc_Error[STRSIZ];
53:
54: #pragma GCC visibility pop
55:
56: // rpc_GetErrno() Get error code of last operation
57: inline int
58: rpc_GetErrno()
59: {
60: return rpc_Errno;
61: }
62:
63: // rpc_GetError() Get error text of last operation
64: inline const char *
65: rpc_GetError()
66: {
67: return rpc_Error;
68: }
69:
70: // rpc_SetErr() Set error to variables for internal use!!!
71: inline void
72: rpc_SetErr(int eno, char *estr, ...)
73: {
74: va_list lst;
75:
76: rpc_Errno = eno;
77: memset(rpc_Error, 0, STRSIZ);
78: va_start(lst, estr);
79: vsnprintf(rpc_Error, STRSIZ, estr, lst);
80: va_end(lst);
81: }
82:
83:
1.4 misho 84: /*
1.5.6.1 misho 85: * rpc_chkPktSession() - Check RPC session
1.5 misho 86: *
1.4 misho 87: * @p = packet session
88: * @s = active session
1.5.6.1 misho 89: * return: -1, 1, 2, 3 are errors or 0 ok
1.4 misho 90: */
91: inline int
92: rpc_chkPktSession(rpc_sess_t *p, rpc_sess_t *s)
93: {
94: if (!p || !s)
95: return -1;
96:
97: if (p->sess_version != s->sess_version)
98: return 1;
99: if (ntohl(p->sess_program) != s->sess_program)
100: return 2;
1.5.6.3 misho 101: if (p->sess_process != s->sess_process)
1.4 misho 102: return 3;
103:
104: return 0;
105: }
106:
107: /*
1.5.6.1 misho 108: * rpc_addPktSession() - Prepare session into network format
1.5 misho 109: *
1.4 misho 110: * @p = packet session
1.5.6.1 misho 111: * @s = host session
1.4 misho 112: * return: -1 error or 0 ok
113: */
114: inline int
115: rpc_addPktSession(rpc_sess_t *p, rpc_sess_t *s)
116: {
117: if (!p || !s)
118: return -1;
119:
120: p->sess_version = s->sess_version;
121: p->sess_program = htonl(s->sess_program);
1.5.6.3 misho 122: p->sess_process = s->sess_process;
1.4 misho 123:
124: return 0;
125: }
1.5.6.2 misho 126:
127: /*
128: * rpc_register_srvServices() - Register internal service functions
129: *
130: * @srv = RPC server instance
131: * return: -1 error or 0 ok
132: */
133: int
134: rpc_register_srvServices(rpc_srv_t * __restrict srv)
135: {
136: if (!srv)
137: return -1;
138:
1.5.6.5 ! misho 139: if (rpc_srv_registerCall(srv, crcFletcher16((u_short*) CALL_SRVSHUTDOWN,
! 140: strlen(CALL_SRVSHUTDOWN) / 2), CALL_SRVSHUTDOWN, 0) < 1)
! 141: return -1;
! 142: if (rpc_srv_registerCall(srv, crcFletcher16((u_short*) CALL_SRVCLIENTS,
! 143: strlen(CALL_SRVCLIENTS) / 2), CALL_SRVCLIENTS, 1) < 1)
! 144: return -1;
! 145: if (rpc_srv_registerCall(srv, crcFletcher16((u_short*) CALL_SRVSESSIONS,
! 146: strlen(CALL_SRVSESSIONS) / 2), CALL_SRVSESSIONS, 4) < 1)
! 147: return -1;
! 148: if (rpc_srv_registerCall(srv, crcFletcher16((u_short*) CALL_SRVCALLS,
! 149: strlen(CALL_SRVCALLS) / 2), CALL_SRVCALLS, 1) < 1)
! 150: return -1;
1.5.6.2 misho 151:
152: return 0;
153: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>