--- libaitrpc/src/cli.c 2011/09/07 09:22:15 1.5.2.3 +++ libaitrpc/src/cli.c 2011/10/31 14:45:26 1.5.2.4 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: cli.c,v 1.5.2.3 2011/09/07 09:22:15 misho Exp $ +* $Id: cli.c,v 1.5.2.4 2011/10/31 14:45:26 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -56,15 +56,12 @@ rpc_cli_t * rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli, u_short Port) { rpc_cli_t *cli = NULL; - struct sockaddr sa; - struct sockaddr_in *sin = (struct sockaddr_in*) &sa; - struct sockaddr_in6 *sin6 = (struct sockaddr_in6*) &sa; - struct sockaddr_un *sun = (struct sockaddr_un*) &sa; + io_sockaddr_t sa; int n; if (!rpccli || - (rpccli->cli_sa.sa_family != AF_INET && rpccli->cli_sa.sa_family != AF_INET6 && - rpccli->cli_sa.sa_family != AF_LOCAL)) { + (rpccli->cli_sa.sa.sa_family != AF_INET && rpccli->cli_sa.sa.sa_family != AF_INET6 && + rpccli->cli_sa.sa.sa_family != AF_LOCAL)) { rpc_SetErr(EINVAL, "Error:: Invalid parameters can`t connect to BLOB server ...\n"); return NULL; } @@ -79,23 +76,21 @@ rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli, memcpy(cli, rpccli, sizeof(rpc_cli_t)); memcpy(&sa, &rpccli->cli_sa, sizeof sa); - switch (rpccli->cli_sa.sa_family) { + switch (rpccli->cli_sa.sa.sa_family) { case AF_INET: - sin->sin_port = htons(Port); - memcpy(&cli->cli_sa, sin, sizeof(struct sockaddr)); + sa.sin.sin_port = htons(Port); break; case AF_INET6: - sin6->sin6_port = htons(Port); - memcpy(&cli->cli_sa, sin6, sizeof(struct sockaddr)); + sa.sin6.sin6_port = htons(Port); break; case AF_LOCAL: - strlcat(sun->sun_path, ".blob", sizeof sun->sun_path); - memcpy(&cli->cli_sa, sun, sizeof(struct sockaddr)); + strlcat(sa.sun.sun_path, ".blob", sizeof sa.sun.sun_path); break; } + memcpy(&cli->cli_sa, &sa, sizeof sa); /* connect to BLOB server */ - cli->cli_sock = socket(cli->cli_sa.sa_family, SOCK_STREAM, 0); + cli->cli_sock = socket(cli->cli_sa.sa.sa_family, SOCK_STREAM, 0); if (cli->cli_sock == -1) { LOGERR; free(cli); @@ -114,7 +109,7 @@ rpc_cli_openBLOBClient(rpc_cli_t * __restrict rpccli, free(cli); return NULL; } - if (connect(cli->cli_sock, &cli->cli_sa, sizeof cli->cli_sa) == -1) { + if (connect(cli->cli_sock, &cli->cli_sa.sa, sizeof cli->cli_sa) == -1) { LOGERR; close(cli->cli_sock); free(cli); @@ -161,10 +156,7 @@ rpc_cli_openClient(u_int ProgID, u_int ProcID, int net { rpc_cli_t *cli = NULL; struct hostent *host = NULL; - struct sockaddr sa; - struct sockaddr_in *sin = (struct sockaddr_in*) &sa; - struct sockaddr_in6 *sin6 = (struct sockaddr_in6*) &sa; - struct sockaddr_un *sun = (struct sockaddr_un*) &sa; + io_sockaddr_t sa; int n; if (!csHost || (family != AF_INET && family != AF_INET6 && family != AF_LOCAL)) { @@ -183,24 +175,24 @@ rpc_cli_openClient(u_int ProgID, u_int ProcID, int net } } memset(&sa, 0, sizeof sa); - sa.sa_family = family; + sa.sa.sa_family = family; switch (family) { case AF_INET: - sin->sin_len = sizeof(struct sockaddr_in); - sin->sin_port = htons(Port); + sa.sin.sin_len = sizeof(struct sockaddr_in); + sa.sin.sin_port = htons(Port); if (csHost) - memcpy(&sin->sin_addr, host->h_addr, host->h_length); + memcpy(&sa.sin.sin_addr, host->h_addr, host->h_length); break; case AF_INET6: - sin6->sin6_len = sizeof(struct sockaddr_in6); - sin6->sin6_port = htons(Port); + sa.sin6.sin6_len = sizeof(struct sockaddr_in6); + sa.sin6.sin6_port = htons(Port); if (csHost) - memcpy(&sin6->sin6_addr, host->h_addr, host->h_length); + memcpy(&sa.sin6.sin6_addr, host->h_addr, host->h_length); break; case AF_LOCAL: - sun->sun_len = sizeof(struct sockaddr_un); + sa.sun.sun_len = sizeof(struct sockaddr_un); if (csHost) - strlcpy(sun->sun_path, csHost, sizeof sun->sun_path); + strlcpy(sa.sun.sun_path, csHost, sizeof sa.sun.sun_path); break; default: rpc_SetErr(EINVAL, "Error:: Invalid parameters can`t connect to RPC server ...\n"); @@ -226,17 +218,7 @@ rpc_cli_openClient(u_int ProgID, u_int ProcID, int net ((rpc_sess_t*) cli->cli_parent)->sess_process = ProcID; } - switch (family) { - case AF_INET: - memcpy(&cli->cli_sa, sin, sizeof cli->cli_sa); - break; - case AF_INET6: - memcpy(&cli->cli_sa, sin6, sizeof cli->cli_sa); - break; - case AF_LOCAL: - memcpy(&cli->cli_sa, sun, sizeof cli->cli_sa); - break; - } + memcpy(&cli->cli_sa, &sa, sizeof cli->cli_sa); /* connect to RPC server */ cli->cli_sock = socket(family, SOCK_STREAM, 0); @@ -261,7 +243,7 @@ rpc_cli_openClient(u_int ProgID, u_int ProcID, int net free(cli); return NULL; } - if (connect(cli->cli_sock, &cli->cli_sa, sizeof cli->cli_sa) == -1) { + if (connect(cli->cli_sock, &cli->cli_sa.sa, sizeof cli->cli_sa) == -1) { LOGERR; close(cli->cli_sock); free(cli->cli_parent);