diff options
Diffstat (limited to 'tool/mbed/mbed-sdk/libraries/tests/net/echo/udp_client')
| -rw-r--r-- | tool/mbed/mbed-sdk/libraries/tests/net/echo/udp_client/main.cpp | 82 | 
1 files changed, 82 insertions, 0 deletions
diff --git a/tool/mbed/mbed-sdk/libraries/tests/net/echo/udp_client/main.cpp b/tool/mbed/mbed-sdk/libraries/tests/net/echo/udp_client/main.cpp new file mode 100644 index 0000000000..97f6050508 --- /dev/null +++ b/tool/mbed/mbed-sdk/libraries/tests/net/echo/udp_client/main.cpp @@ -0,0 +1,82 @@ +#include "mbed.h" +#include "rtos.h" +#include "test_env.h" +#include "EthernetInterface.h" +#include <algorithm> + +#define CHECK(RC, STEP)       if (RC < 0) error(STEP": %d\r\n", RC) + +namespace { +    const int BUFFER_SIZE = 64; +    const int MAX_ECHO_LOOPS = 100; +    const char ASCII_MAX = '~' - ' '; + +    struct s_ip_address { +        int ip_1; +        int ip_2; +        int ip_3; +        int ip_4; +    }; +} + +char char_rand() { +    return (rand() % ASCII_MAX) + ' '; +} + +int main() { +    MBED_HOSTTEST_TIMEOUT(20); +    MBED_HOSTTEST_SELECT(udpecho_client_auto); +    MBED_HOSTTEST_DESCRIPTION(UDP echo client); +    MBED_HOSTTEST_START("NET_6"); + +    char buffer[BUFFER_SIZE] = {0}; +    char out_buffer[BUFFER_SIZE] = {0}; +    s_ip_address ip_addr = {0, 0, 0, 0}; +    int port = 0; +    bool result = true; + +    printf("MBED: UDPCllient waiting for server IP and port...\r\n"); +    scanf("%d.%d.%d.%d:%d", &ip_addr.ip_1, &ip_addr.ip_2, &ip_addr.ip_3, &ip_addr.ip_4, &port); +    printf("MBED: Address received: %d.%d.%d.%d:%d\r\n", ip_addr.ip_1, ip_addr.ip_2, ip_addr.ip_3, ip_addr.ip_4, port); + +    EthernetInterface eth; +    int rc = eth.init(); //Use DHCP +    CHECK(rc, "eth init"); + +    rc = eth.connect(); +    CHECK(rc, "connect"); +    printf("IP: %s\n", eth.getIPAddress()); + +    UDPSocket socket; +    rc = socket.init(); +    CHECK(rc, "socket init"); + +    printf("MBED: UDPClient IP Address is %s\r\n", eth.getIPAddress()); +    sprintf(buffer, "%d.%d.%d.%d", ip_addr.ip_1, ip_addr.ip_2, ip_addr.ip_3, ip_addr.ip_4); + +    Endpoint echo_server; +    rc = echo_server.set_address(buffer, port); +    CHECK(rc, "set_address"); + +    for (int i =0; i < MAX_ECHO_LOOPS; i++) { +        std::generate(out_buffer, out_buffer + BUFFER_SIZE, char_rand); +        rc = socket.sendTo(echo_server, out_buffer, sizeof(out_buffer)); +        CHECK(rc, "sendTo"); + +        const int n = socket.receiveFrom(echo_server, buffer, sizeof(buffer)); +        CHECK(n, "receiveFrom"); + +        if (memcmp(buffer, out_buffer, BUFFER_SIZE) != 0) { +            result = false; +            break; +        } +    } + +    if (notify_completion_str(result, buffer)) { +        socket.sendTo(echo_server, buffer, strlen(buffer)); +    } + +    socket.close(); +    eth.disconnect(); +    MBED_HOSTTEST_RESULT(result); +}  | 
