Experimental HTTP and HTTPS library for mbed OS 5

Committer:
nmathon
Date:
Sun Dec 23 17:55:40 2018 +0000
Revision:
33:305c17fe6737
Parent:
32:fa4d71265625
Remove TLSSocket because it's already in Mbed 0S 5.11

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jan Jongboom 0:910f5949759f 1 /*
Jan Jongboom 0:910f5949759f 2 * PackageLicenseDeclared: Apache-2.0
Jan Jongboom 0:910f5949759f 3 * Copyright (c) 2017 ARM Limited
Jan Jongboom 0:910f5949759f 4 *
Jan Jongboom 0:910f5949759f 5 * Licensed under the Apache License, Version 2.0 (the "License");
Jan Jongboom 0:910f5949759f 6 * you may not use this file except in compliance with the License.
Jan Jongboom 0:910f5949759f 7 * You may obtain a copy of the License at
Jan Jongboom 0:910f5949759f 8 *
Jan Jongboom 0:910f5949759f 9 * http://www.apache.org/licenses/LICENSE-2.0
Jan Jongboom 0:910f5949759f 10 *
Jan Jongboom 0:910f5949759f 11 * Unless required by applicable law or agreed to in writing, software
Jan Jongboom 0:910f5949759f 12 * distributed under the License is distributed on an "AS IS" BASIS,
Jan Jongboom 0:910f5949759f 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Jan Jongboom 0:910f5949759f 14 * See the License for the specific language governing permissions and
Jan Jongboom 0:910f5949759f 15 * limitations under the License.
Jan Jongboom 0:910f5949759f 16 */
Jan Jongboom 0:910f5949759f 17
Jan Jongboom 0:910f5949759f 18 #ifndef _MBED_HTTPS_REQUEST_H_
Jan Jongboom 0:910f5949759f 19 #define _MBED_HTTPS_REQUEST_H_
Jan Jongboom 0:910f5949759f 20
Jan Jongboom 0:910f5949759f 21 #include <string>
Jan Jongboom 0:910f5949759f 22 #include <vector>
Jan Jongboom 0:910f5949759f 23 #include <map>
Jan Jongboom 31:b3730a2c4f39 24 #include "http_request_base.h"
Jan Jongboom 31:b3730a2c4f39 25 #include "TLSSocket.h"
Jan Jongboom 0:910f5949759f 26
Jan Jongboom 20:0e63d6a93c02 27 #ifndef HTTP_RECEIVE_BUFFER_SIZE
Jan Jongboom 20:0e63d6a93c02 28 #define HTTP_RECEIVE_BUFFER_SIZE 8 * 1024
Jan Jongboom 20:0e63d6a93c02 29 #endif
Jan Jongboom 20:0e63d6a93c02 30
Jan Jongboom 0:910f5949759f 31 /**
Jan Jongboom 0:910f5949759f 32 * \brief HttpsRequest implements the logic for interacting with HTTPS servers.
Jan Jongboom 0:910f5949759f 33 */
Jan Jongboom 31:b3730a2c4f39 34 class HttpsRequest : public HttpRequestBase {
Jan Jongboom 0:910f5949759f 35 public:
Jan Jongboom 0:910f5949759f 36 /**
Jan Jongboom 0:910f5949759f 37 * HttpsRequest Constructor
Jan Jongboom 0:910f5949759f 38 * Initializes the TCP socket, sets up event handlers and flags.
Jan Jongboom 0:910f5949759f 39 *
Jan Jongboom 31:b3730a2c4f39 40 * @param[in] network The network interface
Jan Jongboom 0:910f5949759f 41 * @param[in] ssl_ca_pem String containing the trusted CAs
Jan Jongboom 0:910f5949759f 42 * @param[in] method HTTP method to use
Jan Jongboom 0:910f5949759f 43 * @param[in] url URL to the resource
Jan Jongboom 0:910f5949759f 44 * @param[in] body_callback Callback on which to retrieve chunks of the response body.
Jan Jongboom 0:910f5949759f 45 If not set, the complete body will be allocated on the HttpResponse object,
Jan Jongboom 0:910f5949759f 46 which might use lots of memory.
Jan Jongboom 0:910f5949759f 47 */
Jan Jongboom 31:b3730a2c4f39 48 HttpsRequest(NetworkInterface* network,
Jan Jongboom 0:910f5949759f 49 const char* ssl_ca_pem,
Jan Jongboom 0:910f5949759f 50 http_method method,
Jan Jongboom 0:910f5949759f 51 const char* url,
Jan Jongboom 31:b3730a2c4f39 52 Callback<void(const char *at, uint32_t length)> body_callback = 0)
Jan Jongboom 31:b3730a2c4f39 53 : HttpRequestBase(NULL, body_callback)
Jan Jongboom 0:910f5949759f 54 {
Jan Jongboom 0:910f5949759f 55 _parsed_url = new ParsedUrl(url);
Jan Jongboom 0:910f5949759f 56 _request_builder = new HttpRequestBuilder(method, _parsed_url);
Jan Jongboom 0:910f5949759f 57 _response = NULL;
Jan Jongboom 0:910f5949759f 58
Jan Jongboom 31:b3730a2c4f39 59 _socket = new TLSSocket();
Jan Jongboom 31:b3730a2c4f39 60 ((TLSSocket*)_socket)->open(network);
Jan Jongboom 31:b3730a2c4f39 61 ((TLSSocket*)_socket)->set_root_ca_cert(ssl_ca_pem);
Jan Jongboom 31:b3730a2c4f39 62 _we_created_socket = true;
Jan Jongboom 11:96e4dcb9c0c2 63 }
Jan Jongboom 0:910f5949759f 64
Jan Jongboom 11:96e4dcb9c0c2 65 /**
Jan Jongboom 11:96e4dcb9c0c2 66 * HttpsRequest Constructor
Jan Jongboom 11:96e4dcb9c0c2 67 * Sets up event handlers and flags.
Jan Jongboom 11:96e4dcb9c0c2 68 *
Jan Jongboom 11:96e4dcb9c0c2 69 * @param[in] socket A connected TLSSocket
Jan Jongboom 11:96e4dcb9c0c2 70 * @param[in] method HTTP method to use
Jan Jongboom 11:96e4dcb9c0c2 71 * @param[in] url URL to the resource
Jan Jongboom 11:96e4dcb9c0c2 72 * @param[in] body_callback Callback on which to retrieve chunks of the response body.
Jan Jongboom 11:96e4dcb9c0c2 73 If not set, the complete body will be allocated on the HttpResponse object,
Jan Jongboom 11:96e4dcb9c0c2 74 which might use lots of memory.
Jan Jongboom 11:96e4dcb9c0c2 75 */
Jan Jongboom 11:96e4dcb9c0c2 76 HttpsRequest(TLSSocket* socket,
Jan Jongboom 11:96e4dcb9c0c2 77 http_method method,
Jan Jongboom 11:96e4dcb9c0c2 78 const char* url,
Jan Jongboom 31:b3730a2c4f39 79 Callback<void(const char *at, uint32_t length)> body_callback = 0)
Jan Jongboom 31:b3730a2c4f39 80 : HttpRequestBase(socket, body_callback)
Jan Jongboom 11:96e4dcb9c0c2 81 {
Jan Jongboom 11:96e4dcb9c0c2 82 _parsed_url = new ParsedUrl(url);
Jan Jongboom 11:96e4dcb9c0c2 83 _body_callback = body_callback;
Jan Jongboom 11:96e4dcb9c0c2 84 _request_builder = new HttpRequestBuilder(method, _parsed_url);
Jan Jongboom 11:96e4dcb9c0c2 85 _response = NULL;
Jan Jongboom 11:96e4dcb9c0c2 86
Jan Jongboom 31:b3730a2c4f39 87 _we_created_socket = false;
Jan Jongboom 0:910f5949759f 88 }
Jan Jongboom 0:910f5949759f 89
Jan Jongboom 31:b3730a2c4f39 90 virtual ~HttpsRequest() {}
Jan Jongboom 11:96e4dcb9c0c2 91
Jan Jongboom 0:910f5949759f 92 protected:
Jan Jongboom 31:b3730a2c4f39 93 virtual nsapi_error_t connect_socket(char *host, uint16_t port) {
Jan Jongboom 31:b3730a2c4f39 94 return ((TLSSocket*)_socket)->connect(host, port);
Jan Jongboom 23:15fa2726f793 95 }
Jan Jongboom 0:910f5949759f 96 };
Jan Jongboom 0:910f5949759f 97
Jan Jongboom 0:910f5949759f 98 #endif // _MBED_HTTPS_REQUEST_H_