this is using the mbed os version 5-13-1

Dependencies:   mbed-http

Committer:
ocomeni
Date:
Sun Mar 10 09:46:06 2019 +0000
Revision:
74:f26e846adfe9
Child:
90:ed0267eca7b5
ATCmdManager now instaltiates ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ocomeni 74:f26e846adfe9 1
ocomeni 74:f26e846adfe9 2 #include "wifi_demo.h"
ocomeni 74:f26e846adfe9 3 #include "common_config.h"
ocomeni 74:f26e846adfe9 4 // Wifi-demo
ocomeni 74:f26e846adfe9 5
ocomeni 74:f26e846adfe9 6 RawSerial *device; // tx, rx
ocomeni 74:f26e846adfe9 7 extern EventQueue eventQueue(/* event count */ 20 * EVENTS_EVENT_SIZE);
ocomeni 74:f26e846adfe9 8 int chunkNum;
ocomeni 74:f26e846adfe9 9 void dump_response(HttpResponse* res) {
ocomeni 74:f26e846adfe9 10 device->printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
ocomeni 74:f26e846adfe9 11
ocomeni 74:f26e846adfe9 12 device->printf("Headers:\n");
ocomeni 74:f26e846adfe9 13 for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
ocomeni 74:f26e846adfe9 14 device->printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
ocomeni 74:f26e846adfe9 15 }
ocomeni 74:f26e846adfe9 16 device->printf("\nBody (%lu bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
ocomeni 74:f26e846adfe9 17 }
ocomeni 74:f26e846adfe9 18
ocomeni 74:f26e846adfe9 19 void completed(){
ocomeni 74:f26e846adfe9 20 }
ocomeni 74:f26e846adfe9 21 void dump_chunked_response(const char *at, uint32_t length) {
ocomeni 74:f26e846adfe9 22 device->printf("\n Chunked response: Chunk %d : Total Bytes = %d\n", chunkNum , length);
ocomeni 74:f26e846adfe9 23 //device->printf("\n Try Print Header as string:\n\n ");
ocomeni 74:f26e846adfe9 24 //device->printf("recv %d [%.*s]\n", length, strstr((char *)at, "\r\n")-(char *)at, (char *)at);
ocomeni 74:f26e846adfe9 25 //if(false)
ocomeni 74:f26e846adfe9 26 if(chunkNum < 2)
ocomeni 74:f26e846adfe9 27 for(int i=0; i < length; i++){
ocomeni 74:f26e846adfe9 28
ocomeni 74:f26e846adfe9 29 while(device->writeable())
ocomeni 74:f26e846adfe9 30 {
ocomeni 74:f26e846adfe9 31 device->putc((uint8_t)at[i]);
ocomeni 74:f26e846adfe9 32 }
ocomeni 74:f26e846adfe9 33 //int resp = write( (const uint8_t *)at, (int) length, &completed, SERIAL_EVENT_TX_COMPLETE);
ocomeni 74:f26e846adfe9 34 }
ocomeni 74:f26e846adfe9 35 if(false)
ocomeni 74:f26e846adfe9 36 for (size_t ix = 0; ix < length; ix++) {
ocomeni 74:f26e846adfe9 37 device->printf("%02X: ", at[ix]);
ocomeni 74:f26e846adfe9 38 if((ix % 32) == 0 and ix)
ocomeni 74:f26e846adfe9 39 device->printf("\n");
ocomeni 74:f26e846adfe9 40 }
ocomeni 74:f26e846adfe9 41 device->printf("\n\n");
ocomeni 74:f26e846adfe9 42 chunkNum++;
ocomeni 74:f26e846adfe9 43 //device->printf("\nBody (%lu bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
ocomeni 74:f26e846adfe9 44 }
ocomeni 74:f26e846adfe9 45
ocomeni 74:f26e846adfe9 46
ocomeni 74:f26e846adfe9 47 int wifi_demo_func(NetworkInterface* network){
ocomeni 74:f26e846adfe9 48 device = new RawSerial(USBTX, USBRX, DEFAULT_BAUD_RATE);
ocomeni 74:f26e846adfe9 49 if (!network) {
ocomeni 74:f26e846adfe9 50 device->printf("Cannot connect to the network, see serial output\n");
ocomeni 74:f26e846adfe9 51 return 1;
ocomeni 74:f26e846adfe9 52 }
ocomeni 74:f26e846adfe9 53 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 54
ocomeni 74:f26e846adfe9 55 mbed_trace_init();
ocomeni 74:f26e846adfe9 56 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 57
ocomeni 74:f26e846adfe9 58 // GET request to os.mbed.com
ocomeni 74:f26e846adfe9 59 {
ocomeni 74:f26e846adfe9 60 chunkNum = 0;
ocomeni 74:f26e846adfe9 61 device->printf("\n----- HTTPS GET request -----\n");
ocomeni 74:f26e846adfe9 62
ocomeni 74:f26e846adfe9 63 HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, "https://os.mbed.com/media/uploads/mbed_official/hello.txt", &dump_chunked_response);
ocomeni 74:f26e846adfe9 64
ocomeni 74:f26e846adfe9 65 HttpResponse* get_res = get_req->send();
ocomeni 74:f26e846adfe9 66 if (!get_res) {
ocomeni 74:f26e846adfe9 67 device->printf("HttpRequest failed (error code %d)\n", get_req->get_error());
ocomeni 74:f26e846adfe9 68 return 1;
ocomeni 74:f26e846adfe9 69 }
ocomeni 74:f26e846adfe9 70 device->printf("\n----- HTTPS GET response -----\n");
ocomeni 74:f26e846adfe9 71 dump_response(get_res);
ocomeni 74:f26e846adfe9 72 delete get_req;
ocomeni 74:f26e846adfe9 73 }
ocomeni 74:f26e846adfe9 74
ocomeni 74:f26e846adfe9 75 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 76
ocomeni 74:f26e846adfe9 77 // Do a GET request to httpbin.org
ocomeni 74:f26e846adfe9 78 {
ocomeni 74:f26e846adfe9 79 chunkNum = 0;
ocomeni 74:f26e846adfe9 80 device->printf("\n----- HTTP GET request to httpbin.org -----\n");
ocomeni 74:f26e846adfe9 81
ocomeni 74:f26e846adfe9 82 // By default the body is automatically parsed and stored in a buffer, this is memory heavy.
ocomeni 74:f26e846adfe9 83 // To receive chunked response, pass in a callback as last parameter to the constructor.
ocomeni 74:f26e846adfe9 84 HttpRequest* get_req = new HttpRequest(network, HTTP_GET, "http://httpbin.org/status/418");
ocomeni 74:f26e846adfe9 85
ocomeni 74:f26e846adfe9 86 HttpResponse* get_res = get_req->send();
ocomeni 74:f26e846adfe9 87 if (!get_res) {
ocomeni 74:f26e846adfe9 88 device->printf("HttpRequest failed (error code %d)\n", get_req->get_error());
ocomeni 74:f26e846adfe9 89 return 1;
ocomeni 74:f26e846adfe9 90 }
ocomeni 74:f26e846adfe9 91
ocomeni 74:f26e846adfe9 92 device->printf("\n----- HTTP GET response from httpbin.org -----\n");
ocomeni 74:f26e846adfe9 93 dump_response(get_res);
ocomeni 74:f26e846adfe9 94
ocomeni 74:f26e846adfe9 95 delete get_req;
ocomeni 74:f26e846adfe9 96 }
ocomeni 74:f26e846adfe9 97
ocomeni 74:f26e846adfe9 98 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 99
ocomeni 74:f26e846adfe9 100
ocomeni 74:f26e846adfe9 101 // Do a GET request to ovh.net
ocomeni 74:f26e846adfe9 102 if(false)
ocomeni 74:f26e846adfe9 103 {
ocomeni 74:f26e846adfe9 104 chunkNum = 0;
ocomeni 74:f26e846adfe9 105 device->printf("\n----- HTTP GET request to ovh.net (LARGE FILE) http://www.ovh.net/files/1Mio.dat -----\n");
ocomeni 74:f26e846adfe9 106 Timer t;
ocomeni 74:f26e846adfe9 107 // By default the body is automatically parsed and stored in a buffer, this is memory heavy.
ocomeni 74:f26e846adfe9 108 // To receive chunked response, pass in a callback as last parameter to the constructor.
ocomeni 74:f26e846adfe9 109 t.start();
ocomeni 74:f26e846adfe9 110 HttpRequest* get_req = new HttpRequest(network, HTTP_GET, "http://www.ovh.net/files/1Mio.dat", &dump_chunked_response);
ocomeni 74:f26e846adfe9 111
ocomeni 74:f26e846adfe9 112 HttpResponse* get_res = get_req->send();
ocomeni 74:f26e846adfe9 113 if (!get_res) {
ocomeni 74:f26e846adfe9 114 device->printf("HttpRequest failed (error code %d)\n", get_req->get_error());
ocomeni 74:f26e846adfe9 115 return 1;
ocomeni 74:f26e846adfe9 116 }
ocomeni 74:f26e846adfe9 117
ocomeni 74:f26e846adfe9 118 device->printf("\n----- HTTP GET response from ovh.net -----\n");
ocomeni 74:f26e846adfe9 119 dump_response(get_res);
ocomeni 74:f26e846adfe9 120 t.stop();
ocomeni 74:f26e846adfe9 121 device->printf("The time taken was %f seconds\n", t.read());
ocomeni 74:f26e846adfe9 122
ocomeni 74:f26e846adfe9 123
ocomeni 74:f26e846adfe9 124 delete get_req;
ocomeni 74:f26e846adfe9 125 }
ocomeni 74:f26e846adfe9 126 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 127
ocomeni 74:f26e846adfe9 128 {
ocomeni 74:f26e846adfe9 129 device->printf("\n----- HTTPS GET request (small file!) -----\n");
ocomeni 74:f26e846adfe9 130
ocomeni 74:f26e846adfe9 131 HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, "https://os.mbed.com/media/uploads/mbed_official/hello.txt");
ocomeni 74:f26e846adfe9 132
ocomeni 74:f26e846adfe9 133 HttpResponse* get_res = get_req->send();
ocomeni 74:f26e846adfe9 134 if (!get_res) {
ocomeni 74:f26e846adfe9 135 device->printf("HttpRequest failed (error code %d)\n", get_req->get_error());
ocomeni 74:f26e846adfe9 136 return 1;
ocomeni 74:f26e846adfe9 137 }
ocomeni 74:f26e846adfe9 138 /*
ocomeni 74:f26e846adfe9 139 while (0 < (response = socket.recv(p, remaining))) {
ocomeni 74:f26e846adfe9 140 p += response;
ocomeni 74:f26e846adfe9 141 rcount += response;
ocomeni 74:f26e846adfe9 142 remaining -= response;
ocomeni 74:f26e846adfe9 143 }
ocomeni 74:f26e846adfe9 144 */
ocomeni 74:f26e846adfe9 145 device->printf("\n----- HTTPS GET response -----\n");
ocomeni 74:f26e846adfe9 146 dump_response(get_res);
ocomeni 74:f26e846adfe9 147
ocomeni 74:f26e846adfe9 148
ocomeni 74:f26e846adfe9 149
ocomeni 74:f26e846adfe9 150 delete get_req;
ocomeni 74:f26e846adfe9 151 }
ocomeni 74:f26e846adfe9 152 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 153
ocomeni 74:f26e846adfe9 154 // POST request to httpbin.org
ocomeni 74:f26e846adfe9 155 {
ocomeni 74:f26e846adfe9 156 device->printf("\n----- HTTPS POST request -----\n");
ocomeni 74:f26e846adfe9 157
ocomeni 74:f26e846adfe9 158 HttpsRequest* post_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_POST, "https://httpbin.org/post");
ocomeni 74:f26e846adfe9 159 post_req->set_header("Content-Type", "application/json");
ocomeni 74:f26e846adfe9 160
ocomeni 74:f26e846adfe9 161 const char body[] = "{\"hello\":\"world\"}";
ocomeni 74:f26e846adfe9 162
ocomeni 74:f26e846adfe9 163 HttpResponse* post_res = post_req->send(body, strlen(body));
ocomeni 74:f26e846adfe9 164 if (!post_res) {
ocomeni 74:f26e846adfe9 165 device->printf("HttpRequest failed (error code %d)\n", post_req->get_error());
ocomeni 74:f26e846adfe9 166 return 1;
ocomeni 74:f26e846adfe9 167 }
ocomeni 74:f26e846adfe9 168
ocomeni 74:f26e846adfe9 169 device->printf("\n----- HTTPS POST response -----\n");
ocomeni 74:f26e846adfe9 170 dump_response(post_res);
ocomeni 74:f26e846adfe9 171
ocomeni 74:f26e846adfe9 172 delete post_req;
ocomeni 74:f26e846adfe9 173 }
ocomeni 74:f26e846adfe9 174
ocomeni 74:f26e846adfe9 175 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 176
ocomeni 74:f26e846adfe9 177 // POST request to ws.dnanudge.io:80
ocomeni 74:f26e846adfe9 178 {
ocomeni 74:f26e846adfe9 179 device->printf("\n----- HTTP POST request (http://ws.dnanudge.io/nudgebox/v1) -----\n");
ocomeni 74:f26e846adfe9 180
ocomeni 74:f26e846adfe9 181 HttpRequest* post_req = new HttpRequest(network, HTTP_POST, "http://ws.dnanudge.io/nudgebox/v1");
ocomeni 74:f26e846adfe9 182 post_req->set_header("Host", "ws.dnanudge.io");
ocomeni 74:f26e846adfe9 183 post_req->set_header("Accept", "*/*");
ocomeni 74:f26e846adfe9 184 post_req->set_header("Content-Type", "application/octet-stream");
ocomeni 74:f26e846adfe9 185 post_req->set_header("Content-Length", "20");
ocomeni 74:f26e846adfe9 186 // 00 08 6a 48 f8 2d 8e 82 01 68
ocomeni 74:f26e846adfe9 187 const uint8_t body[] = {0x00, 0x08, 0x6a, 0x48, 0xf8, 0x2d, 0x8e, 0x82, 0x01, 0x68,
ocomeni 74:f26e846adfe9 188 // 65 6c 6c 6f 00 00 67 c3 19 f8
ocomeni 74:f26e846adfe9 189 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x67, 0xc3, 0x19, 0xf8};
ocomeni 74:f26e846adfe9 190
ocomeni 74:f26e846adfe9 191 HttpResponse* post_res = post_req->send(body, 20);
ocomeni 74:f26e846adfe9 192 if (!post_res) {
ocomeni 74:f26e846adfe9 193 device->printf("HttpRequest failed (error code %d)\n", post_req->get_error());
ocomeni 74:f26e846adfe9 194 return 1;
ocomeni 74:f26e846adfe9 195 }
ocomeni 74:f26e846adfe9 196
ocomeni 74:f26e846adfe9 197 device->printf("\n----- HTTPS POST response -----\n");
ocomeni 74:f26e846adfe9 198 dump_response(post_res);
ocomeni 74:f26e846adfe9 199
ocomeni 74:f26e846adfe9 200 delete post_req;
ocomeni 74:f26e846adfe9 201 }
ocomeni 74:f26e846adfe9 202
ocomeni 74:f26e846adfe9 203 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 204
ocomeni 74:f26e846adfe9 205 // POST request to httpbin.org
ocomeni 74:f26e846adfe9 206 if(false)
ocomeni 74:f26e846adfe9 207 {
ocomeni 74:f26e846adfe9 208 device->printf("\n----- HTTPS POST request to AWS -----\n");
ocomeni 74:f26e846adfe9 209
ocomeni 74:f26e846adfe9 210 HttpsRequest* post_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_POST, "https://q6bc0dxw7f.execute-api.eu-west-2.amazonaws.com/test/samples/v1");
ocomeni 74:f26e846adfe9 211 post_req->set_header("Content-Type", "application/json");
ocomeni 74:f26e846adfe9 212
ocomeni 74:f26e846adfe9 213 const char body[] =
ocomeni 74:f26e846adfe9 214 "{"
ocomeni 74:f26e846adfe9 215 "\"firstName\": \"Maria\", "
ocomeni 74:f26e846adfe9 216 "\"lastName\": \"Huntera\", "
ocomeni 74:f26e846adfe9 217 "\"dob\": \"1970-12-03\", "
ocomeni 74:f26e846adfe9 218 "\"mobile\": \"07841887580\", "
ocomeni 74:f26e846adfe9 219 "\"cartridgeId\": \"DN00000000RMPOE\", "
ocomeni 74:f26e846adfe9 220 "\"labSampleId\": \"DYYAK\""
ocomeni 74:f26e846adfe9 221 "}";
ocomeni 74:f26e846adfe9 222 HttpResponse* post_res = post_req->send(body, strlen(body));
ocomeni 74:f26e846adfe9 223 if (!post_res) {
ocomeni 74:f26e846adfe9 224 device->printf("HttpRequest failed (error code %d)\n", post_req->get_error());
ocomeni 74:f26e846adfe9 225 return 1;
ocomeni 74:f26e846adfe9 226 }
ocomeni 74:f26e846adfe9 227
ocomeni 74:f26e846adfe9 228 device->printf("\n----- HTTPS POST response from AWS -----\n");
ocomeni 74:f26e846adfe9 229 dump_response(post_res);
ocomeni 74:f26e846adfe9 230
ocomeni 74:f26e846adfe9 231 delete post_req;
ocomeni 74:f26e846adfe9 232 }
ocomeni 74:f26e846adfe9 233 wait(1); // wait for 1 sec
ocomeni 74:f26e846adfe9 234 delete device;
ocomeni 74:f26e846adfe9 235 return 0;
ocomeni 74:f26e846adfe9 236 }