int ConnectNetwork(Network* n, char* addr, unsigned int port) { UINT status; UCHAR record_buffer[200]; UINT record_count; UINT error_count = 0; status = nx_tcp_socket_create(n->my_ip, &n->my_socket, "MqttSocket", NX_IP_NORMAL, NX_DONT_FRAGMENT, NX_IP_TIME_TO_LIVE, 512, NX_NULL, NX_NULL); if (status)error_count++; status = nx_tcp_client_socket_bind(&n->my_socket, NX_ANY_PORT, 10000); if (status)error_count++; if( strncmp("http://", addr, sizeof("http://")) == 0 ) { status = nx_dns_server_add(&g_dns0, IP_ADDRESS(8,8,8,8)); if (status)error_count++; status = nx_dns_ipv4_address_by_name_get(&g_dns0, (UCHAR*)addr, (VOID *)&record_buffer[0], 200, &record_count, 400); if (status)error_count++; n->byte_ip = *((ULONG *)(record_buffer)); } else { int ip1,ip2,ip3,ip4; sscanf(addr,"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4); n->byte_ip = IP_ADDRESS(ip1,ip2,ip3,ip4); } status = nx_tcp_client_socket_connect(&n->my_socket, n->byte_ip, port, 2000); if (status)error_count++; if (error_count != 0) return -1; return 0; }
INT socket( INT protocolFamily, INT type, INT protocol ) { int a = 0; bsd_socket_t* free_socket; if ( wwd_wifi_is_ready_to_transceive( WWD_STA_INTERFACE ) == WWD_SUCCESS ) { interface = WWD_STA_INTERFACE; } else if ( wwd_wifi_is_ready_to_transceive( WWD_AP_INTERFACE ) == WWD_SUCCESS ) { interface = WWD_AP_INTERFACE; } else { return BSD_ERROR; } if ( socket_layer_inited == WICED_FALSE ) { sockets_layer_init( ); } // Find a free socket for ( ; a < MAX_BSD_SOCKETS; ++a ) { if ( sockets[a].available == WICED_TRUE ) { free_socket = &sockets[a]; free_socket->available = WICED_FALSE; free_socket->select_timeout = NX_WAIT_FOREVER; free_socket->local_bind_port = 0; free_socket->reuse = WICED_FALSE; switch ( type ) { case SOCK_DGRAM: free_socket->type = BSD_SOCKET_UDP; /* Set option to maximum throughput delivery */ if ( nx_udp_socket_create( &wiced_ip_handle[interface], &free_socket->socket.udp, "udp_socket", NX_IP_MAX_DATA, NX_FRAGMENT_OKAY, 255, 5) != NX_SUCCESS ) { return BSD_ERROR; } #ifdef IPERF_DISABLE_UDP_CHECKSUM nx_udp_socket_checksum_disable(&free_socket->socket.udp); #endif break; case SOCK_STREAM: free_socket->type = BSD_SOCKET_TCP; /* Set option to maximum throughput delivery */ if ( nx_tcp_socket_create( &wiced_ip_handle[interface], &free_socket->socket.tcp, "tcp_socket", NX_IP_MAX_DATA, NX_FRAGMENT_OKAY, NX_IP_TIME_TO_LIVE, TCP_WINDOW_SIZE, NX_NULL, NX_NULL ) != NX_SUCCESS ) { return BSD_ERROR; } break; } return a; } } return BSD_ERROR; }