From 1322d5073201f2fec54dbabc32e34e009f0664d5 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 27 Jan 2019 08:42:30 +0100 Subject: [PATCH] HttpRequest: write whole request to socket Better performance by using a single write, and some servers may not be happy about getting so many TCP fragments for the HTTP header. Change-Id: If7139e2a7748ea423d470676e70bd523a89031b2 Reviewed-on: https://review.haiku-os.org/c/909 Reviewed-by: waddlesplash --- headers/os/net/HttpRequest.h | 4 ++-- src/kits/network/libnetapi/HttpRequest.cpp | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/headers/os/net/HttpRequest.h b/headers/os/net/HttpRequest.h index bc9d0b0575..7704baedf9 100644 --- a/headers/os/net/HttpRequest.h +++ b/headers/os/net/HttpRequest.h @@ -68,8 +68,8 @@ private: status_t _ProtocolLoop(); status_t _MakeRequest(); - void _SendRequest(); - void _SendHeaders(); + BString _SerializeRequest(); + BString _SerializeHeaders(); void _SendPostData(); void _ParseStatus(); diff --git a/src/kits/network/libnetapi/HttpRequest.cpp b/src/kits/network/libnetapi/HttpRequest.cpp index 95c2654588..c74624ec8e 100644 --- a/src/kits/network/libnetapi/HttpRequest.cpp +++ b/src/kits/network/libnetapi/HttpRequest.cpp @@ -551,9 +551,11 @@ BHttpRequest::_MakeRequest() _EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Connection opened, sending request."); - _SendRequest(); - _SendHeaders(); - fSocket->Write("\r\n", 2); + BString requestHeaders; + requestHeaders.Append(_SerializeRequest()); + requestHeaders.Append(_SerializeHeaders()); + requestHeaders.Append("\r\n"); + fSocket->Write(requestHeaders.String(), requestHeaders.Length()); _EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Request sent."); _SendPostData(); @@ -835,8 +837,8 @@ BHttpRequest::_ParseHeaders() } -void -BHttpRequest::_SendRequest() +BString +BHttpRequest::_SerializeRequest() { BString request(fRequestMethod); request << ' '; @@ -868,12 +870,14 @@ BHttpRequest::_SendRequest() break; } - fSocket->Write(request.String(), request.Length()); + _EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", request.String()); + + return request; } -void -BHttpRequest::_SendHeaders() +BString +BHttpRequest::_SerializeHeaders() { BHttpHeaders outputHeaders; @@ -996,7 +1000,7 @@ BHttpRequest::_SendHeaders() _EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", header); } - fSocket->Write(headerData.String(), headerData.Length()); + return headerData; }