--- libaitrpc/src/srv.c 2012/05/16 12:20:05 1.9.2.14 +++ libaitrpc/src/srv.c 2012/05/16 16:36:10 1.9.2.17 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.9.2.14 2012/05/16 12:20:05 misho Exp $ +* $Id: srv.c,v 1.9.2.17 2012/05/16 16:36:10 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -82,6 +82,7 @@ txPacket(sched_task_t *task) if (rpc->call_argc) { f = rpc_srv_getCall(s, ntohs(rpc->call_tag)); if (!f) { + rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); rpc->call_argc ^= rpc->call_argc; rpc->call_rep.ret = RPC_ERROR(-1); rpc->call_rep.eno = RPC_ERROR(rpc_Errno); @@ -482,7 +483,6 @@ int rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_short Port, const char *diskDir) { int n = 1; - io_sockaddr_t sa; if (!srv || srv->srv_kill) { rpc_SetErr(EINVAL, "Invalid parameters can`t init BLOB server"); @@ -502,15 +502,18 @@ rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s srv->srv_blob.server.cli_parent = srv; memcpy(&srv->srv_blob.server.cli_sa, &srv->srv_server.cli_sa, sizeof(io_sockaddr_t)); - switch (sa.sa.sa_family) { + switch (srv->srv_blob.server.cli_sa.sa.sa_family) { case AF_INET: - sa.sin.sin_port = htons(Port ? Port : ntohs(sa.sin.sin_port) + 1); + srv->srv_blob.server.cli_sa.sin.sin_port = + htons(Port ? Port : ntohs(srv->srv_blob.server.cli_sa.sin.sin_port) + 1); break; case AF_INET6: - sa.sin6.sin6_port = htons(Port ? Port : ntohs(sa.sin6.sin6_port) + 1); + srv->srv_blob.server.cli_sa.sin6.sin6_port = + htons(Port ? Port : ntohs(srv->srv_blob.server.cli_sa.sin6.sin6_port) + 1); break; case AF_LOCAL: - strlcat(sa.sun.sun_path, ".blob", sizeof sa.sun.sun_path); + strlcat(srv->srv_blob.server.cli_sa.sun.sun_path, ".blob", + sizeof srv->srv_blob.server.cli_sa.sun.sun_path); break; default: AIT_FREE_VAL(&srv->srv_blob.dir); @@ -704,6 +707,14 @@ rpc_srv_initServer(u_int regProgID, u_char regProcID, else netBuf = io_align(netBuf, 1); /* align netBuf length */ +#ifdef HAVE_SRANDOMDEV + srandomdev(); +#else + time_t tim; + + srandom((time(&tim) ^ getpid())); +#endif + srv = malloc(sizeof(rpc_srv_t)); if (!srv) { LOGERR; @@ -789,10 +800,8 @@ rpc_srv_endServer(rpc_srv_t ** __restrict psrv) register int i; rpc_func_t *f, *tmp; - if (!psrv || !*psrv) { - rpc_SetErr(EINVAL, "Can`t destroy server because parameter is null!"); + if (!psrv || !*psrv) return; - } if (!(*psrv)->srv_blob.kill) rpc_srv_endBLOBServer(*psrv);