|
| 1 | +#include "mbed.h" |
| 2 | +#include "mbed_trace.h" |
| 3 | + |
| 4 | +const char cert[] = \ |
| 5 | + "-----BEGIN CERTIFICATE-----\n" |
| 6 | + "MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU\n" |
| 7 | + "MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs\n" |
| 8 | + "IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290\n" |
| 9 | + "MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux\n" |
| 10 | + "FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h\n" |
| 11 | + "bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v\n" |
| 12 | + "dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt\n" |
| 13 | + "H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9\n" |
| 14 | + "uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX\n" |
| 15 | + "mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX\n" |
| 16 | + "a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN\n" |
| 17 | + "E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0\n" |
| 18 | + "WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD\n" |
| 19 | + "VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0\n" |
| 20 | + "Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU\n" |
| 21 | + "cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx\n" |
| 22 | + "IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN\n" |
| 23 | + "AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH\n" |
| 24 | + "YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5\n" |
| 25 | + "6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC\n" |
| 26 | + "Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX\n" |
| 27 | + "c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a\n" |
| 28 | + "mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=\n" |
| 29 | + "-----END CERTIFICATE-----"; |
| 30 | + |
| 31 | +int main(void) |
| 32 | +{ |
| 33 | + char *buffer = new char[256]; |
| 34 | + nsapi_size_or_error_t result; |
| 35 | + nsapi_size_t size; |
| 36 | + const char query[] = "GET / HTTP/1.1\r\nHost: api.ipify.org\r\nConnection: close\r\n\r\n"; |
| 37 | + |
| 38 | + mbed_trace_init(); |
| 39 | + |
| 40 | + printf("TLSSocket Example.\n"); |
| 41 | + printf("Mbed OS version: %d.%d.%d\n\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION); |
| 42 | + |
| 43 | + NetworkInterface *net = NetworkInterface::get_default_instance(); |
| 44 | + |
| 45 | + if (!net) { |
| 46 | + printf("Error! No network inteface found.\n"); |
| 47 | + return 0; |
| 48 | + } |
| 49 | + |
| 50 | + printf("Connecting to network\n"); |
| 51 | + result = net->connect(); |
| 52 | + if (result != 0) { |
| 53 | + printf("Error! net->connect() returned: %d\n", result); |
| 54 | + return result; |
| 55 | + } |
| 56 | + |
| 57 | + TLSSocket *socket = new TLSSocket; |
| 58 | + result = socket->set_root_ca_cert(cert); |
| 59 | + if (result != 0) { |
| 60 | + printf("Error: socket->set_root_ca_cert() returned %d\n", result); |
| 61 | + return result; |
| 62 | + } |
| 63 | + |
| 64 | + result = socket->open(net); |
| 65 | + if (result != 0) { |
| 66 | + printf("Error! socket->open() returned: %d\n", result); |
| 67 | + return result; |
| 68 | + } |
| 69 | + |
| 70 | + printf("Connecting to api.ipify.org\n"); |
| 71 | + result = socket->connect("api.ipify.org", 443); |
| 72 | + if (result != 0) { |
| 73 | + printf("Error! socket->connect() returned: %d\n", result); |
| 74 | + goto DISCONNECT; |
| 75 | + } |
| 76 | + |
| 77 | + // Send a simple http request |
| 78 | + size = strlen(query); |
| 79 | + result = socket->send(query+result, size); |
| 80 | + if (result != size) { |
| 81 | + printf("Error! socket->send() returned: %d\n", result); |
| 82 | + goto DISCONNECT; |
| 83 | + } |
| 84 | + |
| 85 | + // Receieve an HTTP response and print out the response line |
| 86 | + while ((result = socket->recv(buffer, 255)) > 0) { |
| 87 | + buffer[result] = 0; |
| 88 | + printf("%s", buffer); |
| 89 | + } |
| 90 | + printf("\n"); |
| 91 | + |
| 92 | + if (result < 0) { |
| 93 | + printf("Error! socket->recv() returned: %d\n", result); |
| 94 | + goto DISCONNECT; |
| 95 | + } |
| 96 | + |
| 97 | + |
| 98 | +DISCONNECT: |
| 99 | + delete[] buffer; |
| 100 | + // Close the socket to return its memory and bring down the network interface |
| 101 | + socket->close(); |
| 102 | + |
| 103 | + // Bring down the ethernet interface |
| 104 | + net->disconnect(); |
| 105 | + printf("Done\n"); |
| 106 | +} |
0 commit comments