fix superfluous \r\n after body
Fork of mbed-http by
Diff: source/http_request.h
- Revision:
- 11:96e4dcb9c0c2
- Parent:
- 10:b017c7d2cf23
- Child:
- 15:ffc77f212382
--- a/source/http_request.h Tue Mar 28 13:33:14 2017 +0200 +++ b/source/http_request.h Tue Mar 28 14:44:39 2017 +0200 @@ -30,7 +30,6 @@ /** * @todo: * - Userinfo parameter is not handled - * - Allow socket re-use */ @@ -57,6 +56,32 @@ parsed_url = new ParsedUrl(url); request_builder = new HttpRequestBuilder(method, parsed_url); + + socket = new TCPSocket(); + we_created_socket = true; + } + + /** + * HttpRequest Constructor + * + * @param[in] aSocket An open TCPSocket + * @param[in] aMethod HTTP method to use + * @param[in] url URL to the resource + * @param[in] aBodyCallback Callback on which to retrieve chunks of the response body. + If not set, the complete body will be allocated on the HttpResponse object, + which might use lots of memory. + */ + HttpRequest(TCPSocket* aSocket, http_method aMethod, const char* url, Callback<void(const char *at, size_t length)> aBodyCallback = 0) + : socket(aSocket), method(aMethod), body_callback(aBodyCallback) + { + error = 0; + response = NULL; + network = NULL; + + parsed_url = new ParsedUrl(url); + request_builder = new HttpRequestBuilder(method, parsed_url); + + we_created_socket = false; } /** @@ -76,6 +101,10 @@ if (request_builder) { delete request_builder; } + + if (socket && we_created_socket) { + delete socket; + } } /** @@ -90,24 +119,24 @@ error = 0; - TCPSocket socket; + if (we_created_socket) { + nsapi_error_t open_result = socket->open(network); + if (open_result != 0) { + error = open_result; + return NULL; + } - nsapi_error_t open_result = socket.open(network); - if (open_result != 0) { - error = open_result; - return NULL; - } - - nsapi_error_t connection_result = socket.connect(parsed_url->host(), parsed_url->port()); - if (connection_result != 0) { - error = connection_result; - return NULL; + nsapi_error_t connection_result = socket->connect(parsed_url->host(), parsed_url->port()); + if (connection_result != 0) { + error = connection_result; + return NULL; + } } size_t request_size = 0; char* request = request_builder->build(body, body_size, request_size); - nsapi_size_or_error_t send_result = socket.send(request, request_size); + nsapi_size_or_error_t send_result = socket->send(request, request_size); free(request); @@ -126,7 +155,7 @@ // TCPSocket::recv is called until we don't have any data anymore nsapi_size_or_error_t recv_ret; - while ((recv_ret = socket.recv(recv_buffer, HTTP_RECEIVE_BUFFER_SIZE)) > 0) { + while ((recv_ret = socket->recv(recv_buffer, HTTP_RECEIVE_BUFFER_SIZE)) > 0) { // Pass the chunk into the http_parser size_t nparsed = parser.execute((const char*)recv_buffer, recv_ret); @@ -154,8 +183,10 @@ // Free the receive buffer free(recv_buffer); - // Close the socket - socket.close(); + if (we_created_socket) { + // Close the socket + socket->close(); + } return response; } @@ -184,6 +215,7 @@ private: NetworkInterface* network; + TCPSocket* socket; http_method method; Callback<void(const char *at, size_t length)> body_callback; @@ -192,6 +224,8 @@ HttpRequestBuilder* request_builder; HttpResponse* response; + bool we_created_socket; + nsapi_error_t error; };