This Socket Example Program Implements a TCP Socket, UDP Socket, and HTTPClient socket then uses each of these to perform basic I/O.

Dependencies:   JSON M2XStreamClient-JMF WNCInterface mbed-rtos mbed

See the README for details on this example program. NOTE: When started, the program can take up to 40 seconds before it will respond. This delay is the time required for the WNC Data Module to connect with the network.

main.cpp

Committer:
JMF
Date:
2016-12-02
Revision:
9:667c078c40c6
Parent:
7:beefa072a165
Child:
10:51937195d6d1

File content as of revision 9:667c078c40c6:


#include "mbed.h"
 
#include "WNCInterface.h"

#include "Socket/Socket.h"
#include "Socket/TCPSocketConnection.h"
#include "Socket/UDPSocket.h"

#define DEBUG
#define MBED_PLATFORM
#include "HTTPClient.h"

#define STR_SIZE    1024
#define STREAM_CNT  5

#define CRLF    "\n\r"

MODSERIAL pc(USBTX,USBRX,256,256);

void https_test_thread(void);

int main() {
    Thread http_test(osPriorityNormal, DEFAULT_STACK_SIZE*4, NULL);
    http_test.start(https_test_thread);
    while (true) {
        osDelay(500);
    }
}

void test_http(void);
void test_https(void);
        
void https_test_thread(void) {
    int ret;

    WNCInterface wnc;
    
    //pc.baud(9600);
    printf("STARTING WNCInterface & Socket Test" CRLF);
    
    ret = wnc.init();  
                       
    printf("WNC Module %s initialized (%02X)." CRLF, ret?"IS":"IS NOT", ret);
    if( !ret ) {
        printf(" - - - - - - - ALL DONE - - - - - - - " CRLF);
        while(1);
        }
        
    ret = wnc.connect();                 
    printf("IP Address: %s " CRLF CRLF, wnc.getIPAddress());

    test_http();
    test_https();
    
    wnc.disconnect();
    printf(" - - - - - - - ALL DONE - - - - - - - " CRLF);
    while(1) {}
}



void test_http(void) {
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//demonstrate HTTPClient operations
//
    printf(CRLF CRLF">>>  Do the HTTPClient Tests  <<< "CRLF);
    printf(         "-----------------------------------------" CRLF CRLF);
    HTTPClient  http;
    char str[STR_SIZE];
    int ret;
    
    //GET data
    printf(" ** Fetch a page... **" CRLF);

    ret = http.get("https://developer.mbed.org/media/uploads/mbed_official/hello.txt", str, STR_SIZE);
    if (!ret) {
      printf("Page fetched successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF "Result: %s" CRLF "<----->" CRLF, str); 
      }
    else 
      printf("Error - ret = %d - HTTP return code = %d" CRLF, ret, http.getHTTPResponseCode());

    //POST data
    HTTPMap map;
    HTTPText inText(str, STR_SIZE);

    map.put("Hello", "World");
    map.put("test", "1234");

    printf(CRLF CRLF " ** Post data... **" CRLF);
    ret = http.post("http://httpbin.org/post", map, &inText);
    if (!ret) {
      printf("Executed POST successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF );
      printf("Result: %s" CRLF "<----->" CRLF, str);
      }
    else 
      printf("Error - ret = %d - HTTP return code = %d" CRLF, ret, http.getHTTPResponseCode());
    
    //PUT data
    
    strcpy(str, "This is a PUT test!");
    HTTPText outText(str);    
    printf(CRLF CRLF " ** Put data... **" CRLF);

    ret = http.put("http://httpbin.org/put", outText, &inText);
    if (!ret) {
      printf("Executed PUT successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF );
      printf("Result: %s" CRLF "<----->" CRLF, str); 
      }
    else 
      printf("Error - ret = %d - HTTP return code = %d" CRLF, ret, http.getHTTPResponseCode());
    
    //DELETE data
    printf(CRLF CRLF " ** Delete data... **" CRLF);
    ret = http.del("http://httpbin.org/delete", &inText);
    if (!ret) {
      printf("Executed DELETE successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF );
      printf("Result: %s" CRLF "<----->" CRLF, str);
      }
    else 
      printf("Error - ret = %d - HTTP return code = %d" CRLF, ret, http.getHTTPResponseCode());

    printf(CRLF CRLF " ** HTTP:stream data " INTSTR(STREAM_CNT) " times... **" CRLF);
    if( (ret=http.get("http://httpbin.org:80/stream/" INTSTR(STREAM_CNT), str,sizeof(str))) == HTTP_OK) {
        printf(CRLF "STREAM successfull - returned %d characters" CRLF, strlen(str));
        printf("<----->" CRLF "Result:" CRLF "%s" CRLF "<----->" CRLF CRLF, str);
        }
    else
        printf(CRLF "STREAM FAILED!, returned %d" CRLF, ret);
        
        
    printf(CRLF CRLF ">>>>HTTP:Status..." CRLF);
    ret = http.get("http://httpbin.org/get?show_env=1", str, STR_SIZE);
    if (!ret) {
      printf("Executed STATUS successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF );
      printf("Result: %s" CRLF "<----->" CRLF, str);
      }
    else {
      printf("Error - ret = %d - HTTP return code = -0x%04X" CRLF, ret, -http.getHTTPResponseCode());
      }
 
}


void test_https(void) {
//
// Now do HTTPS exchange
//
    HTTPSClient *https = new HTTPSClient;
    char str[STR_SIZE];
    int ret;
    
    https->setHost("developer.mbed.org");
    https->addRootCACertificate(SSL_CA_PEM);

    printf(CRLF CRLF">>>  Do HTTPSClient Tests  <<< "CRLF);
    printf(         "-------------------------------" CRLF CRLF);
 
    //GET data

    memset(str,0x00,STR_SIZE);
    printf(CRLF " ** HTTPS:Fetch a page... **" CRLF);
                                                   
    ret = https->get("https://developer.mbed.org/media/uploads/mbed_official/hello.txt", str, STR_SIZE);
    if (!ret){
      printf("Page fetched successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF "Result: %s" CRLF "<----->" CRLF, str); 
      }
    else 
      printf("Error - ret = %d - HTTP return code = -0x%04X" CRLF, ret, -https->getHTTPResponseCode());

    delete https;

    https = new HTTPSClient;
    https->setHost("httpbin.org");
    https->addRootCACertificate(SSL_CA_HTTPBIN);

    HTTPMap map;
    HTTPText inText(str, STR_SIZE);

    //POST data
    map.put("https Testing", "https doing a Post");
    printf(CRLF CRLF ">>>>HTTPS:Post data..." CRLF);
    ret = https->post("https://httpbin.org:443/post", map, &inText);
    if (!ret) {
      printf("Executed POST successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF );
      printf("Result: %s" CRLF "<----->" CRLF, str);
      }
    else 
      printf("Error - ret = %d - HTTP return code = -0x%04X" CRLF, ret, -https->getHTTPResponseCode());

    //PUT data
    memset(str,0x00,STR_SIZE);
    strcpy(str, "This is an HTTPS PUT test!");
    HTTPText outText(str);    
    printf(CRLF CRLF ">>>>HTTPS:Put data..." CRLF);
    ret = https->put("https://httpbin.org:443/put", outText, &inText);
    if (!ret) {
      printf("Executed PUT successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF );
      printf("Result: %s" CRLF "<----->" CRLF, str); 
      }
    else 
      printf("Error - ret = %d - HTTP return code = -0x%04X" CRLF, ret, -https->getHTTPResponseCode());
   
    printf(CRLF CRLF ">>>>HTTPS:stream data..." CRLF);
    if( (ret=https->get("https://httpbin.org:443/stream/" INTSTR(STREAM_CNT), str,sizeof(str))) == HTTP_OK) {
        printf(CRLF "STREAM successfull - returned %d characters" CRLF, strlen(str));
        printf("<----->" CRLF "Result:" CRLF "%s" CRLF "<----->" CRLF, str);
        }
    else
        printf(CRLF "STREAM FAILED!, returned %d - HTTP return code = -x%04X" CRLF, ret, -https->getHTTPResponseCode());
    //DELETE data
    printf(CRLF CRLF ">>>>HTTPS:Delete data..." CRLF);
    ret = https->del("https://httpbin.org/delete", &inText);
    if (!ret) {
      printf("Executed DELETE successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF );
      printf("Result: %s" CRLF "<----->" CRLF, str);
      }
    else {
      printf("Error - ret = %d - HTTP return code = -0x%04X" CRLF, ret, -https->getHTTPResponseCode());
      }
    
   
    printf(CRLF CRLF ">>>>HTTPS:Status..." CRLF);
    ret = https->get("https://httpbin.org:443/get?show_env=1", str, STR_SIZE);
    if (!ret) {
      printf("Executed STATUS successfully - read %d characters" CRLF, strlen(str));
      printf("<----->" CRLF );
      printf("Result: %s" CRLF "<----->" CRLF, str);
      }
    else {
      printf("Error - ret = %d - HTTP return code = -0x%04X" CRLF, ret, -https->getHTTPResponseCode());
      }
      
    delete https;
}