/* Function: rwl_transport_setup * This will do the initialization for * for all the transports */ static int rwl_transport_setup(int argc, char** argv) { int transport_descriptor = -1; UNUSED_PARAMETER(argc); UNUSED_PARAMETER(argv); #ifdef RWL_SOCKET /* This function will parse the socket command line arguments * & open the socket in listen mode */ remote_type = REMOTE_SOCKET; transport_descriptor = rwl_init_server_socket_setup(argc, argv, remote_type); if (transport_descriptor < 0) { DPRINT_ERR(ERR, "wl_socket_server:Transport setup failed \n"); } #endif /* RWL_SOCKET */ #if defined (RWL_DONGLE) || defined (RWL_WIFI) || defined (RWL_SERIAL) g_rem_pkt_ptr = &g_rem_pkt; transport_descriptor = 0; #ifdef RWL_WIFI remote_type = REMOTE_WIFI; #endif #ifdef RWL_DONGLE remote_type = REMOTE_DONGLE; #endif /* RWL_DONGLE */ #ifdef RWL_SERIAL remote_type = REMOTE_SERIAL; if (argc < 2) { DPRINT_ERR(ERR, "Port name is required from the command line\n"); } else { (void)*argv++; DPRINT_DBG(OUTPUT, "Port name is %s\n", *argv); transport_descriptor = *(int*) rwl_open_transport(remote_type, *argv, 0, 0); } #endif /* RWL_SERIAL */ #endif /* RWL_DONGLE ||RWL_SERIAL ||RWL_WIFI */ #ifdef RWLASD g_serv_sock_desc = transport_descriptor; #endif return transport_descriptor; }
void * rwl_open_pipe(int remote_type, char *port, int ReadTotalTimeout, int debug) { return rwl_open_transport(remote_type, port, ReadTotalTimeout, debug); }
int rwl_init_server_socket_setup(int argc, char** argv, uint remote_type) { char netif[MAX_INTERFACE_NAME]; unsigned short servPort; struct sockaddr_in ServerAddress; int err, SockDes, val; /* Default option */ servPort = DEFAULT_SERVER_PORT; strcpy(netif, "eth0"); /* User option can override default arguments */ if (argc == 3) { argv++; if (isalpha(**argv) == FALSE) { DPRINT_ERR(ERR, "USAGE ERROR:Incorrect network interface\n"); return FAIL; } strcpy(netif, *argv); argv++; if (isdigit(**argv) == FALSE) { DPRINT_ERR(ERR, "USAGE ERROR:Incorrect port\n"); return FAIL; } servPort = atoi(*argv); } if (argc == 2) { argv++; if (isalpha(**argv) == FALSE) { if (isdigit(**argv) == FALSE) { DPRINT_ERR(ERR, "USAGE ERROR\n"); return FAIL; } else servPort = atoi(*argv); } else strcpy(netif, *argv); } DPRINT_INFO(OUTPUT, "INFO: Network Interface:%s, Port:%d\n", netif, servPort); if ((SockDes = (*(int *)rwl_open_transport(remote_type, NULL, 0, 0))) == FAIL) return FAIL; val = 1; if ((rwl_set_socket_option(SockDes, SOL_SOCKET, SO_REUSEADDR, val)) == FAIL) return FAIL; memset(&ServerAddress, 0, sizeof(ServerAddress)); rwl_GetifAddr(netif, &ServerAddress); ServerAddress.sin_family = AF_INET; /* host byte order */ ServerAddress.sin_port = hton16(servPort); /* short, network byte order */ if (((err = rwl_bindsocket(SockDes, (struct sockaddr *)&ServerAddress, sizeof(ServerAddress))) == FAIL)) return err; if ((err = rwl_listensocket(SockDes, BACKLOG)) == FAIL) return err; DPRINT_DBG(OUTPUT, "Waiting for client to connect...\n"); return SockDes; }
/* This function initializes the socket library binds and listens on the port * */ int rwl_init_server_socket_setup(int argc, char** argv, uint remote_type) { int err, SockDes, val; struct sockaddr_in ServerAddress; char ip_addres[MAX_IP_ADDR_LENGTH]; unsigned short servPort; struct ipv4_addr temp; /* Default option */ servPort = DEFAULT_SERVER_PORT; if (rwl_get_local_nic_ip() == NULL) { DPRINT_ERR(ERR, "\nunable to get the local ip\n"); return FAIL; } strcpy(ip_addres, rwl_get_local_nic_ip()); /* User option can override default arguments */ if (argc == 3) { *argv++; if (!wl_atoip(*argv, &temp)) { DPRINT_ERR(ERR, "\n USAGE ERROR:Incorrect IPaddress\n"); return FAIL; } strcpy(ip_addres, *argv); *argv++; if (isdigit(**argv) == FALSE) { DPRINT_ERR(ERR, "USAGE ERROR:Incorrect port\n"); return FAIL; } servPort = atoi(*argv); } if (argc == 2) { *argv++; if (!wl_atoip(*argv, &temp)) { if (isdigit(**argv) == FALSE) { DPRINT_ERR(ERR, "USAGE ERROR\n"); return FAIL; } else servPort = atoi(*argv); } else strcpy(ip_addres, *argv); } DPRINT_INFO(OUTPUT, "INFO: IP: %s, Port:%d\n", ip_addres, servPort); rwl_init_ws2_32dll(); if ((SockDes = (*(int *)rwl_open_transport(remote_type, NULL, 0, 0))) == FAIL) return FAIL; val = 1; if ((rwl_set_socket_option(SockDes, SOL_SOCKET, SO_REUSEADDR, val)) == -1) return FAIL; memset(&ServerAddress, 0, sizeof(ServerAddress)); ServerAddress.sin_family = AF_INET; /* host byte order */ ServerAddress.sin_port = htons(servPort); /* short, network byte order */ ServerAddress.sin_addr.s_addr = inet_addr(ip_addres); if (((err = rwl_bindsocket(SockDes, (struct sockaddr *)&ServerAddress, sizeof(ServerAddress))) != 1)) return err; if ((err = rwl_listensocket(SockDes, BACKLOG)) != 1) return err; DPRINT_DBG(OUTPUT, "Waiting for client to connect...\n"); return SockDes; }