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;
}
Ejemplo n.º 2
0
/* 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;
}