--- libaitrpc/inc/aitrpc.h 2015/01/15 01:42:37 1.25 +++ libaitrpc/inc/aitrpc.h 2015/01/21 00:37:03 1.25.2.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitrpc.h,v 1.25 2015/01/15 01:42:37 misho Exp $ +* $Id: aitrpc.h,v 1.25.2.5 2015/01/21 00:37:03 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004 - 2014 +Copyright 2004 - 2015 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -62,14 +62,32 @@ SUCH DAMAGE. #include -#define RPC_VERSION 7 +#define RPC_VERSION 8 #define RPC_DEFPORT 2611 +/* Additional ELWIX RPC supporting protocols */ +#ifndef SOCK_STREAM +#define SOCK_STREAM 1 /* stream socket */ +#endif +#ifndef SOCK_DGRAM +#define SOCK_DGRAM 2 /* datagram socket */ +#endif +#ifndef SOCK_RAW +#define SOCK_RAW 3 /* raw-protocol interface */ +#endif +#define SOCK_BPF 4 /* ethernet interface */ +#define SOCK_EXT 5 /* bi-directional pipe interface */ + /* RPC call request flags */ #define RPC_REPLY 0x0 #define RPC_NOREPLY 0x1 +/* RPC call I/O direction */ + +#define RPC_REQ 0x0 +#define RPC_ACK 0x1 + /* RPC builtin registed calls */ #define CALL_TAG_MAX 65535 @@ -141,7 +159,8 @@ struct tagRPCCall { }; uint16_t call_tag; - uint16_t call_argc; + uint8_t call_io; + uint8_t call_argc; ait_val_t call_argv[0]; } __packed; /* size == 20 bytes */ #define RPC_CHK_NOREPLY(x) (ntohl((u_long) (x)->call_req.flags) & RPC_NOREPLY) @@ -418,6 +437,16 @@ rpc_srv_t *rpc_srv_initServer2(u_char InstID, int conc const char *csIface); /* + * rpc_srv_initServerExt() - Init & create pipe RPC Server + * + * @InstID = Instance for authentication & recognition + * @netBuf = Network buffer length (min:512 bytes), if =0 == BUFSIZ (also meaning max RPC packet) + * @fd = File descriptor + * return: NULL == error or !=NULL bind and created RPC server instance + */ +rpc_srv_t *rpc_srv_initServerExt(u_char InstID, int netBuf, int fd); + +/* * rpc_srv_registerCall() - Register call to RPC server * * @srv = RPC Server instance @@ -712,6 +741,24 @@ rpc_cli_t *rpc_cli_openClient2(u_char InstID, int netB * return: none */ void rpc_cli_closeClient2(rpc_cli_t ** __restrict cli); + + +/* + * rpc_cli_openClientExt() - Connect to pipe RPC Server + * + * @InstID = InstID for RPC session request + * @netBuf = Network buffer length (min:512 bytes), if =0 == BUFSIZ (also meaning max RPC packet) + * @fd = File descriptor + * return: NULL == error or !=NULL connection to RPC server established + */ +rpc_cli_t *rpc_cli_openClientExt(u_char InstID, int netBuf, int fd); +/* + * rpc_cli_closeClientExt() - Close pipe connection to RPC server and free resources + * + * @cli = RPC Client session + * return: none + */ +void rpc_cli_closeClientExt(rpc_cli_t ** __restrict cli); #endif