easy connect wnc added to http request with debug mode enabled. traces collected for AT%CGEQOS, AT%MEAS, AT%PCONI

Dependencies:   easy-connect-httpmodified mbed-http

Fork of http-example-wnc-modified by Tyler Davis

Committer:
JMF
Date:
Wed Apr 19 21:06:36 2017 +0000
Revision:
18:2a891e583ec4
Parent:
15:e96b74243a80
json file changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JMF 15:e96b74243a80 1
JMF 15:e96b74243a80 2 #include "select-demo.h"
JMF 15:e96b74243a80 3
JMF 15:e96b74243a80 4 /* =====================================================================
JMF 15:e96b74243a80 5 Copyright © 2016, Avnet (R)
JMF 15:e96b74243a80 6
JMF 15:e96b74243a80 7 Contributors:
JMF 15:e96b74243a80 8 * James M Flynn, www.em.avnet.com
JMF 15:e96b74243a80 9
JMF 15:e96b74243a80 10 Licensed under the Apache License, Version 2.0 (the "License");
JMF 15:e96b74243a80 11 you may not use this file except in compliance with the License.
JMF 15:e96b74243a80 12 You may obtain a copy of the License at
JMF 15:e96b74243a80 13
JMF 15:e96b74243a80 14 http://www.apache.org/licenses/LICENSE-2.0
JMF 15:e96b74243a80 15
JMF 15:e96b74243a80 16 Unless required by applicable law or agreed to in writing,
JMF 15:e96b74243a80 17 software distributed under the License is distributed on an
JMF 15:e96b74243a80 18 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
JMF 15:e96b74243a80 19 either express or implied. See the License for the specific
JMF 15:e96b74243a80 20 language governing permissions and limitations under the License.
JMF 15:e96b74243a80 21
JMF 15:e96b74243a80 22 @file main.cpp / WNC14A2AInterface_HTTP_exampel
JMF 15:e96b74243a80 23 @version 1.0
JMF 15:e96b74243a80 24 @date Dec 2016
JMF 15:e96b74243a80 25
JMF 15:e96b74243a80 26 ======================================================================== */
JMF 15:e96b74243a80 27
JMF 15:e96b74243a80 28 #if DEMO == DEMO_HTTPx
JMF 15:e96b74243a80 29
JMF 15:e96b74243a80 30 #include "mbed.h"
JMF 15:e96b74243a80 31 #include "easy-connect.h"
JMF 15:e96b74243a80 32 #include "http_request.h"
JMF 15:e96b74243a80 33 #include "https_request.h"
JMF 15:e96b74243a80 34
JMF 15:e96b74243a80 35 #define STREAM_CNT 10 //when we test streaming, this is how many times to stream the string
JMF 15:e96b74243a80 36 #define STR_SIZE 150*(STREAM_CNT+1) //use a fixed size string buffer based on the streaming data count
JMF 15:e96b74243a80 37
JMF 15:e96b74243a80 38 #define TOSTR(x) #x
JMF 15:e96b74243a80 39 #define INTSTR(x) TOSTR(x)
JMF 15:e96b74243a80 40
JMF 15:e96b74243a80 41 //
JMF 15:e96b74243a80 42 // We do the same thing for both http and https, so create a macro to eaze the typing...
JMF 15:e96b74243a80 43 //
JMF 15:e96b74243a80 44
JMF 15:e96b74243a80 45
JMF 15:e96b74243a80 46 /* List of trusted root CA certificates
JMF 15:e96b74243a80 47 * currently one: Let's Encrypt, the CA for httpbin.org
JMF 15:e96b74243a80 48 *
JMF 15:e96b74243a80 49 * To add more root certificates, just concatenate them.
JMF 15:e96b74243a80 50 */
JMF 15:e96b74243a80 51 const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n"
JMF 15:e96b74243a80 52 "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n"
JMF 15:e96b74243a80 53 "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n"
JMF 15:e96b74243a80 54 "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n"
JMF 15:e96b74243a80 55 "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n"
JMF 15:e96b74243a80 56 "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n"
JMF 15:e96b74243a80 57 "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n"
JMF 15:e96b74243a80 58 "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n"
JMF 15:e96b74243a80 59 "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n"
JMF 15:e96b74243a80 60 "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n"
JMF 15:e96b74243a80 61 "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n"
JMF 15:e96b74243a80 62 "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n"
JMF 15:e96b74243a80 63 "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n"
JMF 15:e96b74243a80 64 "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n"
JMF 15:e96b74243a80 65 "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n"
JMF 15:e96b74243a80 66 "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n"
JMF 15:e96b74243a80 67 "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n"
JMF 15:e96b74243a80 68 "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n"
JMF 15:e96b74243a80 69 "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n"
JMF 15:e96b74243a80 70 "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n"
JMF 15:e96b74243a80 71 "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n"
JMF 15:e96b74243a80 72 "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n"
JMF 15:e96b74243a80 73 "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n"
JMF 15:e96b74243a80 74 "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n"
JMF 15:e96b74243a80 75 "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n"
JMF 15:e96b74243a80 76 "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n"
JMF 15:e96b74243a80 77 "-----END CERTIFICATE-----\n";
JMF 15:e96b74243a80 78
JMF 15:e96b74243a80 79 //
JMF 15:e96b74243a80 80 // This example is setup to use MBED OS (5.2). It sets up a thread to call the different tests
JMF 15:e96b74243a80 81 // so the default stack size can be varied. TLS is stack intensive and needs additional stack
JMF 15:e96b74243a80 82 // to work effeciently.
JMF 15:e96b74243a80 83 //
JMF 15:e96b74243a80 84
JMF 15:e96b74243a80 85 Serial pc(USBTX, USBRX);
JMF 15:e96b74243a80 86
JMF 15:e96b74243a80 87 //
JMF 15:e96b74243a80 88 // The two test functions do the same set of tests, the first one uses standard HTTP methods while
JMF 15:e96b74243a80 89 // the second test uses HTTPS.
JMF 15:e96b74243a80 90 //
JMF 15:e96b74243a80 91
JMF 15:e96b74243a80 92 void https_test_thread(void); //Thread that runs the two tests
JMF 15:e96b74243a80 93 void test_http(NetworkInterface *net); //function makes standard HTTP calls
JMF 15:e96b74243a80 94 void test_https(NetworkInterface *net); //function makes standard HTTPS calls
JMF 15:e96b74243a80 95
JMF 15:e96b74243a80 96 int main() {
JMF 15:e96b74243a80 97 Thread http_test(osPriorityNormal, DEFAULT_STACK_SIZE*4, NULL);
JMF 15:e96b74243a80 98 pc.baud(115200);
JMF 15:e96b74243a80 99
JMF 15:e96b74243a80 100 printf("Testing HTTP and HTTPS interface software.\n");
JMF 15:e96b74243a80 101 http_test.start(https_test_thread);
JMF 15:e96b74243a80 102 while (true) {
JMF 15:e96b74243a80 103 osDelay(500);
JMF 15:e96b74243a80 104 }
JMF 15:e96b74243a80 105 }
JMF 15:e96b74243a80 106
JMF 15:e96b74243a80 107 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
JMF 15:e96b74243a80 108 // this is the Thread that calls each of the two tests.
JMF 15:e96b74243a80 109 //
JMF 15:e96b74243a80 110 void https_test_thread(void) {
JMF 15:e96b74243a80 111
JMF 15:e96b74243a80 112 NetworkInterface *network = easy_connect(true);
JMF 15:e96b74243a80 113
JMF 15:e96b74243a80 114 if (!network) {
JMF 15:e96b74243a80 115 printf("Unable to connect to network!\n");
JMF 15:e96b74243a80 116 return;
JMF 15:e96b74243a80 117 }
JMF 15:e96b74243a80 118 else
JMF 15:e96b74243a80 119 printf("My IP Address is: %s \n\n", network->get_ip_address());
JMF 15:e96b74243a80 120
JMF 15:e96b74243a80 121 test_http(network);
JMF 15:e96b74243a80 122 test_https(network);
JMF 15:e96b74243a80 123
JMF 15:e96b74243a80 124 printf(" - - - - - - - ALL DONE - - - - - - - \n");
JMF 15:e96b74243a80 125
JMF 15:e96b74243a80 126 network->disconnect();
JMF 15:e96b74243a80 127 delete network;
JMF 15:e96b74243a80 128 Thread::wait(osWaitForever);
JMF 15:e96b74243a80 129 }
JMF 15:e96b74243a80 130
JMF 15:e96b74243a80 131
JMF 15:e96b74243a80 132 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
JMF 15:e96b74243a80 133 // Utility function to print out responses
JMF 15:e96b74243a80 134 //
JMF 15:e96b74243a80 135 void dump_response(HttpResponse* res)
JMF 15:e96b74243a80 136 {
JMF 15:e96b74243a80 137 printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
JMF 15:e96b74243a80 138
JMF 15:e96b74243a80 139 printf("Headers:\n");
JMF 15:e96b74243a80 140 for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
JMF 15:e96b74243a80 141 printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
JMF 15:e96b74243a80 142 }
JMF 15:e96b74243a80 143 printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
JMF 15:e96b74243a80 144 }
JMF 15:e96b74243a80 145
JMF 15:e96b74243a80 146 void stream_callback(const char *data, size_t len)
JMF 15:e96b74243a80 147 {
JMF 15:e96b74243a80 148 printf("Chunk Received:\n");
JMF 15:e96b74243a80 149 for( size_t x=0; x<len; x++ )
JMF 15:e96b74243a80 150 printf("%c",data[x]);
JMF 15:e96b74243a80 151 printf("\n");
JMF 15:e96b74243a80 152 }
JMF 15:e96b74243a80 153
JMF 15:e96b74243a80 154 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
JMF 15:e96b74243a80 155 // test the HTTP client class
JMF 15:e96b74243a80 156 //
JMF 15:e96b74243a80 157 void test_http(NetworkInterface *net)
JMF 15:e96b74243a80 158 {
JMF 15:e96b74243a80 159 TCPSocket *socket = new TCPSocket();
JMF 15:e96b74243a80 160
JMF 15:e96b74243a80 161 printf(">>>>>>>>>>>><<<<<<<<<<<<\n");
JMF 15:e96b74243a80 162 printf(">>> TEST HTTPClient <<<\n");
JMF 15:e96b74243a80 163 printf(">>>>>>>>>>>><<<<<<<<<<<<\n\n");
JMF 15:e96b74243a80 164
JMF 15:e96b74243a80 165 nsapi_error_t open_result = socket->open(net);
JMF 15:e96b74243a80 166 if (open_result != 0) {
JMF 15:e96b74243a80 167 printf("Opening TCPSocket failed... %d\n", open_result);
JMF 15:e96b74243a80 168 return;
JMF 15:e96b74243a80 169 }
JMF 15:e96b74243a80 170
JMF 15:e96b74243a80 171 nsapi_error_t connect_result = socket->connect("developer.mbed.org", 80);
JMF 15:e96b74243a80 172 if (connect_result != 0) {
JMF 15:e96b74243a80 173 printf("Connecting over TCPSocket failed... %d\n", connect_result);
JMF 15:e96b74243a80 174 return;
JMF 15:e96b74243a80 175 }
JMF 15:e96b74243a80 176 else
JMF 15:e96b74243a80 177 printf("Connected over TCP to developer.mbed.org\n\n");
JMF 15:e96b74243a80 178
JMF 15:e96b74243a80 179 printf(" >>>First, lets get a page from http://developer.mbed.org\n");
JMF 15:e96b74243a80 180 {
JMF 15:e96b74243a80 181 HttpRequest* get_req = new HttpRequest(socket,HTTP_GET,"http://developer.mbed.org/media/uploads/mbed_official/hello.txt");
JMF 15:e96b74243a80 182 HttpResponse* get_res = get_req->send();
JMF 15:e96b74243a80 183 if (!get_res) {
JMF 15:e96b74243a80 184 printf("HttpRequest failed (error code %d)\n", get_req->get_error());
JMF 15:e96b74243a80 185 return;
JMF 15:e96b74243a80 186 }
JMF 15:e96b74243a80 187
JMF 15:e96b74243a80 188 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 189 dump_response(get_res);
JMF 15:e96b74243a80 190 delete get_req;
JMF 15:e96b74243a80 191 }
JMF 15:e96b74243a80 192 delete socket;
JMF 15:e96b74243a80 193
JMF 15:e96b74243a80 194 socket = new TCPSocket();
JMF 15:e96b74243a80 195
JMF 15:e96b74243a80 196 open_result = socket->open(net);
JMF 15:e96b74243a80 197 if (open_result != 0) {
JMF 15:e96b74243a80 198 printf("Opening TCPSocket failed... %d\n", open_result);
JMF 15:e96b74243a80 199 return;
JMF 15:e96b74243a80 200 }
JMF 15:e96b74243a80 201
JMF 15:e96b74243a80 202 connect_result = socket->connect("httpbin.org", 80);
JMF 15:e96b74243a80 203 if (connect_result != 0) {
JMF 15:e96b74243a80 204 printf("Connecting over TCPSocket http://httpbin.org... %d\n", connect_result);
JMF 15:e96b74243a80 205 return;
JMF 15:e96b74243a80 206 }
JMF 15:e96b74243a80 207 else
JMF 15:e96b74243a80 208 printf("Connected over TCP to httpbin.org\n\n");
JMF 15:e96b74243a80 209
JMF 15:e96b74243a80 210 printf("\n\n >>>Post data... **\n");
JMF 15:e96b74243a80 211 {
JMF 15:e96b74243a80 212 HttpRequest* post_req = new HttpRequest(socket, HTTP_POST, "http://httpbin.org/post");
JMF 15:e96b74243a80 213 post_req->set_header("Content-Type", "application/json");
JMF 15:e96b74243a80 214 const char body[] = "{\"hello\":\"world\"},"
JMF 15:e96b74243a80 215 "{\"test\":\"1234\"}";
JMF 15:e96b74243a80 216
JMF 15:e96b74243a80 217 HttpResponse* post_res = post_req->send(body, strlen(body));
JMF 15:e96b74243a80 218 if (!post_res) {
JMF 15:e96b74243a80 219 printf("HttpRequest failed (error code %d)\n", post_req->get_error());
JMF 15:e96b74243a80 220 return;
JMF 15:e96b74243a80 221 }
JMF 15:e96b74243a80 222
JMF 15:e96b74243a80 223 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 224 dump_response(post_res);
JMF 15:e96b74243a80 225 delete post_req;
JMF 15:e96b74243a80 226 }
JMF 15:e96b74243a80 227
JMF 15:e96b74243a80 228 printf("\n\n >>>Put data... \n");
JMF 15:e96b74243a80 229 {
JMF 15:e96b74243a80 230 HttpRequest* put_req = new HttpRequest(socket, HTTP_PUT, "http://httpbin.org/put");
JMF 15:e96b74243a80 231 put_req->set_header("Content-Type", "application/json");
JMF 15:e96b74243a80 232
JMF 15:e96b74243a80 233 const char body[] = "This is a PUT test!";
JMF 15:e96b74243a80 234
JMF 15:e96b74243a80 235 HttpResponse* put_res = put_req->send(body, strlen(body));
JMF 15:e96b74243a80 236 if (!put_res) {
JMF 15:e96b74243a80 237 printf("HttpRequest failed (error code %d)\n", put_req->get_error());
JMF 15:e96b74243a80 238 return;
JMF 15:e96b74243a80 239 }
JMF 15:e96b74243a80 240
JMF 15:e96b74243a80 241 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 242 dump_response(put_res);
JMF 15:e96b74243a80 243 delete put_req;
JMF 15:e96b74243a80 244 }
JMF 15:e96b74243a80 245
JMF 15:e96b74243a80 246 printf("\n\n >>>Delete data... \n");
JMF 15:e96b74243a80 247 {
JMF 15:e96b74243a80 248 HttpRequest* del_req = new HttpRequest(socket, HTTP_DELETE, "http://httpbin.org/delete");
JMF 15:e96b74243a80 249 del_req->set_header("Content-Type", "application/json");
JMF 15:e96b74243a80 250
JMF 15:e96b74243a80 251 HttpResponse* del_res = del_req->send();
JMF 15:e96b74243a80 252 if (!del_res) {
JMF 15:e96b74243a80 253 printf("HttpRequest failed (error code %d)\n", del_req->get_error());
JMF 15:e96b74243a80 254 return;
JMF 15:e96b74243a80 255 }
JMF 15:e96b74243a80 256
JMF 15:e96b74243a80 257 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 258 dump_response(del_res);
JMF 15:e96b74243a80 259 delete del_req;
JMF 15:e96b74243a80 260 }
JMF 15:e96b74243a80 261
JMF 15:e96b74243a80 262 printf("\n\n >>>HTTP:stream, send http://httpbin.org/stream/" INTSTR(STREAM_CNT) "... \n");
JMF 15:e96b74243a80 263 {
JMF 15:e96b74243a80 264 HttpRequest* stream_req = new HttpRequest(socket, HTTP_GET, "http://httpbin.org/stream/" INTSTR(STREAM_CNT),
JMF 15:e96b74243a80 265 stream_callback );
JMF 15:e96b74243a80 266 stream_req->send();
JMF 15:e96b74243a80 267 delete stream_req;
JMF 15:e96b74243a80 268 }
JMF 15:e96b74243a80 269
JMF 15:e96b74243a80 270 printf("\n\n >>>HTTP:Status...\n");
JMF 15:e96b74243a80 271 {
JMF 15:e96b74243a80 272 HttpRequest* get_req = new HttpRequest(socket,HTTP_GET,"http://httpbin.org/get?show_env=1");
JMF 15:e96b74243a80 273 HttpResponse* get_res = get_req->send();
JMF 15:e96b74243a80 274 if (!get_res) {
JMF 15:e96b74243a80 275 printf("HttpRequest failed (error code %d)\n", get_req->get_error());
JMF 15:e96b74243a80 276 return;
JMF 15:e96b74243a80 277 }
JMF 15:e96b74243a80 278
JMF 15:e96b74243a80 279 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 280 dump_response(get_res);
JMF 15:e96b74243a80 281 delete get_req;
JMF 15:e96b74243a80 282 }
JMF 15:e96b74243a80 283 delete socket;
JMF 15:e96b74243a80 284 }
JMF 15:e96b74243a80 285
JMF 15:e96b74243a80 286
JMF 15:e96b74243a80 287 void dump_httpsresponse(HttpResponse* res)
JMF 15:e96b74243a80 288 {
JMF 15:e96b74243a80 289 mbedtls_printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
JMF 15:e96b74243a80 290
JMF 15:e96b74243a80 291 mbedtls_printf("Headers:\n");
JMF 15:e96b74243a80 292 for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
JMF 15:e96b74243a80 293 mbedtls_printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
JMF 15:e96b74243a80 294 }
JMF 15:e96b74243a80 295 mbedtls_printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
JMF 15:e96b74243a80 296 }
JMF 15:e96b74243a80 297
JMF 15:e96b74243a80 298 void stream_httpscallback(const char *data, size_t len)
JMF 15:e96b74243a80 299 {
JMF 15:e96b74243a80 300 printf("Chunk Received:\n");
JMF 15:e96b74243a80 301 for( size_t x=0; x<len; x++ )
JMF 15:e96b74243a80 302 printf("%c",data[x]);
JMF 15:e96b74243a80 303 printf("\n");
JMF 15:e96b74243a80 304 }
JMF 15:e96b74243a80 305
JMF 15:e96b74243a80 306 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
JMF 15:e96b74243a80 307 // test the HTTPS client class
JMF 15:e96b74243a80 308 //
JMF 15:e96b74243a80 309 void test_https(NetworkInterface *net)
JMF 15:e96b74243a80 310 {
JMF 15:e96b74243a80 311
JMF 15:e96b74243a80 312 printf(">>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<\n");
JMF 15:e96b74243a80 313 printf(">>> TEST HTTPS - set up TLS connection <<<\n");
JMF 15:e96b74243a80 314 printf(">>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<\n\n");
JMF 15:e96b74243a80 315
JMF 15:e96b74243a80 316 TLSSocket* socket = new TLSSocket(net, "httpbin.org", 443, SSL_CA_PEM);
JMF 15:e96b74243a80 317 socket->set_debug(true);
JMF 15:e96b74243a80 318 if (socket->connect() != 0) {
JMF 15:e96b74243a80 319 printf("TLS Connect failed %d\n", socket->error());
JMF 15:e96b74243a80 320 return;
JMF 15:e96b74243a80 321 }
JMF 15:e96b74243a80 322
JMF 15:e96b74243a80 323 printf("\n\n >>>Post data... **\n");
JMF 15:e96b74243a80 324 {
JMF 15:e96b74243a80 325 HttpsRequest* post_req = new HttpsRequest(socket, HTTP_POST, "http://httpbin.org/post");
JMF 15:e96b74243a80 326 post_req->set_header("Content-Type", "application/json");
JMF 15:e96b74243a80 327 const char body[] = "{\"hello\":\"world\"},"
JMF 15:e96b74243a80 328 "{\"test\":\"1234\"}";
JMF 15:e96b74243a80 329
JMF 15:e96b74243a80 330 HttpResponse* post_res = post_req->send(body, strlen(body));
JMF 15:e96b74243a80 331 if (!post_res) {
JMF 15:e96b74243a80 332 printf("HttpsRequest failed (error code %d)\n", post_req->get_error());
JMF 15:e96b74243a80 333 return;
JMF 15:e96b74243a80 334 }
JMF 15:e96b74243a80 335
JMF 15:e96b74243a80 336 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 337 dump_httpsresponse(post_res);
JMF 15:e96b74243a80 338 delete post_req;
JMF 15:e96b74243a80 339 }
JMF 15:e96b74243a80 340
JMF 15:e96b74243a80 341 printf("\n\n >>>Put data... \n");
JMF 15:e96b74243a80 342 {
JMF 15:e96b74243a80 343 HttpsRequest* put_req = new HttpsRequest(socket, HTTP_PUT, "http://httpbin.org/put");
JMF 15:e96b74243a80 344 put_req->set_header("Content-Type", "application/json");
JMF 15:e96b74243a80 345
JMF 15:e96b74243a80 346 const char body[] = "This is a PUT test!";
JMF 15:e96b74243a80 347
JMF 15:e96b74243a80 348 HttpResponse* put_res = put_req->send(body, strlen(body));
JMF 15:e96b74243a80 349 if (!put_res) {
JMF 15:e96b74243a80 350 printf("HttpsRequest failed (error code %d)\n", put_req->get_error());
JMF 15:e96b74243a80 351 return;
JMF 15:e96b74243a80 352 }
JMF 15:e96b74243a80 353
JMF 15:e96b74243a80 354 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 355 dump_httpsresponse(put_res);
JMF 15:e96b74243a80 356 delete put_req;
JMF 15:e96b74243a80 357 }
JMF 15:e96b74243a80 358
JMF 15:e96b74243a80 359 printf("\n\n >>>Delete data... \n");
JMF 15:e96b74243a80 360 {
JMF 15:e96b74243a80 361 HttpsRequest* del_req = new HttpsRequest(socket, HTTP_DELETE, "http://httpbin.org/delete");
JMF 15:e96b74243a80 362 del_req->set_header("Content-Type", "application/json");
JMF 15:e96b74243a80 363
JMF 15:e96b74243a80 364 HttpResponse* del_res = del_req->send();
JMF 15:e96b74243a80 365 if (!del_res) {
JMF 15:e96b74243a80 366 printf("HttpsRequest failed (error code %d)\n", del_req->get_error());
JMF 15:e96b74243a80 367 return;
JMF 15:e96b74243a80 368 }
JMF 15:e96b74243a80 369
JMF 15:e96b74243a80 370 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 371 dump_httpsresponse(del_res);
JMF 15:e96b74243a80 372 delete del_req;
JMF 15:e96b74243a80 373 }
JMF 15:e96b74243a80 374
JMF 15:e96b74243a80 375 printf("\n\n >>>HTTP:stream, send http://httpbin.org/stream/" INTSTR(STREAM_CNT)"... \n");
JMF 15:e96b74243a80 376 {
JMF 15:e96b74243a80 377 HttpsRequest* stream_req = new HttpsRequest(socket, HTTP_GET, "http://httpbin.org/stream/" INTSTR(STREAM_CNT),
JMF 15:e96b74243a80 378 stream_httpscallback );
JMF 15:e96b74243a80 379 stream_req->send();
JMF 15:e96b74243a80 380 delete stream_req;
JMF 15:e96b74243a80 381 }
JMF 15:e96b74243a80 382
JMF 15:e96b74243a80 383 printf("\n\n >>>HTTP:Status...\n");
JMF 15:e96b74243a80 384 {
JMF 15:e96b74243a80 385 HttpsRequest* get_req = new HttpsRequest(socket,HTTP_GET,"http://httpbin.org/get?show_env=1");
JMF 15:e96b74243a80 386 HttpResponse* get_res = get_req->send();
JMF 15:e96b74243a80 387 if (!get_res) {
JMF 15:e96b74243a80 388 printf("HttpsRequest failed (error code %d)\n", get_req->get_error());
JMF 15:e96b74243a80 389 return;
JMF 15:e96b74243a80 390 }
JMF 15:e96b74243a80 391
JMF 15:e96b74243a80 392 printf("\n----- RESPONSE: -----\n");
JMF 15:e96b74243a80 393 dump_httpsresponse(get_res);
JMF 15:e96b74243a80 394 delete get_req;
JMF 15:e96b74243a80 395 }
JMF 15:e96b74243a80 396 delete socket;
JMF 15:e96b74243a80 397 }
JMF 15:e96b74243a80 398
JMF 15:e96b74243a80 399 #endif // DEMO
JMF 15:e96b74243a80 400