示例#1
0
/* 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;

}
示例#2
0
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;
}
示例#4
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;
}