/** * Use a connection, checking that it is good * Checks via doing an NTP transaction */ static void use_connection(OnboardCellularInterface *driver) { const char *ip_address = driver->get_ip_address(); const char *net_mask = driver->get_netmask(); const char *gateway = driver->get_gateway(); TEST_ASSERT(driver->is_connected()); TEST_ASSERT(ip_address != NULL); tr_debug("IP address %s.", ip_address); TEST_ASSERT(net_mask != NULL); tr_debug("Net mask %s.", net_mask); TEST_ASSERT(gateway != NULL); tr_debug("Gateway %s.", gateway); UDPSocket sock; SocketAddress host_address; TEST_ASSERT(driver->gethostbyname(MBED_CONF_APP_ECHO_SERVER, &host_address) == 0); host_address.set_port(MBED_CONF_APP_ECHO_UDP_PORT); tr_debug("UDP: Server %s address: %s on port %d.", MBED_CONF_APP_ECHO_SERVER, host_address.get_ip_address(), host_address.get_port()); TEST_ASSERT(sock.open(driver) == 0) sock.set_timeout(10000); do_udp_echo(&sock, &host_address, 1); sock.close(); }
/** * Test TCP data exchange via the asynchronous sigio() mechanism */ void test_tcp_echo_async() { TCPSocket sock; SocketAddress host_address; bool callback_triggered = false; int x; int size; driver.disconnect(); TEST_ASSERT(do_connect(&driver) == 0); TEST_ASSERT( driver.gethostbyname(MBED_CONF_APP_ECHO_SERVER, &host_address) == 0); host_address.set_port(MBED_CONF_APP_ECHO_TCP_PORT); tr_debug("TCP: Server %s address: %s on port %d.", MBED_CONF_APP_ECHO_SERVER, host_address.get_ip_address(), host_address.get_port()); TEST_ASSERT(sock.open(&driver) == 0) // Set up the async callback and set the timeout to zero sock.sigio(callback(async_cb, &callback_triggered)); sock.set_timeout(0); TEST_ASSERT(sock.connect(host_address) == 0); // Test min, max, and some random sizes in-between do_tcp_echo_async(&sock, 1, &callback_triggered); do_tcp_echo_async(&sock, MBED_CONF_APP_TCP_MAX_PACKET_SIZE, &callback_triggered); sock.close(); drop_connection(&driver); tr_debug("TCP packets of size up to %d byte(s) echoed asynchronously and successfully.", MBED_CONF_APP_TCP_MAX_PACKET_SIZE); }
/** * Test UDP data exchange */ void test_udp_echo() { UDPSocket sock; SocketAddress host_address; int x; int size; driver.disconnect(); TEST_ASSERT(do_connect(&driver) == 0); TEST_ASSERT(driver.gethostbyname(MBED_CONF_APP_ECHO_SERVER, &host_address) == 0); host_address.set_port(MBED_CONF_APP_ECHO_UDP_PORT); tr_debug("UDP: Server %s address: %s on port %d.", MBED_CONF_APP_ECHO_SERVER, host_address.get_ip_address(), host_address.get_port()); TEST_ASSERT(sock.open(&driver) == 0) sock.set_timeout(10000); // Test min, max, and some random sizes in-between do_udp_echo(&sock, &host_address, 1); do_udp_echo(&sock, &host_address, MBED_CONF_APP_UDP_MAX_PACKET_SIZE); for (x = 0; x < 10; x++) { size = (rand() % MBED_CONF_APP_UDP_MAX_PACKET_SIZE) + 1; size = fix(size, MBED_CONF_APP_UDP_MAX_PACKET_SIZE + 1); do_udp_echo(&sock, &host_address, size); } sock.close(); drop_connection(&driver); tr_debug("%d UDP packets of size up to %d byte(s) echoed successfully.", x, MBED_CONF_APP_UDP_MAX_PACKET_SIZE); }