--- libaitrpc/src/cli.c 2012/05/17 12:52:30 1.9.2.8 +++ libaitrpc/src/cli.c 2012/05/17 14:22:24 1.9.2.9 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: cli.c,v 1.9.2.8 2012/05/17 12:52:30 misho Exp $ +* $Id: cli.c,v 1.9.2.9 2012/05/17 14:22:24 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -235,8 +235,8 @@ rpc_cli_closeClient(rpc_cli_t ** __restrict cli) * @cli = RPC Client session * @noreply = We not want RPC reply * @tag = Function tag for execution - * @in_vars = IN RPC call array of rpc values - * @out_vars = OUT returned array of rpc values, must be free after use with rpc_cli_freeVals() + * @in_vars = IN RPC call array of rpc values, may be NULL + * @out_vars = OUT returned array of rpc values, if !=NULL must be free after use with io_freeVars() * return: -1 error or != -1 ok result */ int @@ -349,14 +349,39 @@ rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short } /* RPC is OK! Go de-marshaling variables ... */ - if (ntohs(rpc->call_argc)) { + if (out_vars && ntohs(rpc->call_argc)) { *out_vars = io_buffer2vars(buf + wlen, AIT_LEN(&cli->cli_buf) - wlen, ntohs(rpc->call_argc), 0); if (!*out_vars) { + rpc_SetErr(io_GetErrno(), "%s", io_GetError()); return -1; } } ret = ntohl(rpc->call_rep.ret); + return ret; +} + +/* + * rpc_cli_ping() - Ping RPC server + * + * @cli = connected client + * return: -1 error or !=-1 ping seq id + */ +inline int +rpc_cli_ping(rpc_cli_t *cli) +{ + array_t *arr; + int ret = 0; + + if (!cli) + return -1; + + if (rpc_cli_execCall(cli, RPC_REPLY, CALL_SRVPING, NULL, &arr)) + return -1; + else + ret = AIT_GET_U16(io_getVars(arr, 0)); + io_freeVars(&arr); + return ret; }