HttpRequest: remove fOutputBuffer
We can send the data directly to the output socket instead of copying it into a BString first, at the cost of very slightly less information in debug output.
This commit is contained in:
@@ -63,16 +63,14 @@ private:
|
|||||||
bool _ResolveHostName();
|
bool _ResolveHostName();
|
||||||
status_t _MakeRequest();
|
status_t _MakeRequest();
|
||||||
|
|
||||||
void _CreateRequest();
|
void _SendRequest();
|
||||||
void _AddHeaders();
|
void _SendHeaders();
|
||||||
|
|
||||||
status_t _GetLine(BString& destString);
|
status_t _GetLine(BString& destString);
|
||||||
|
|
||||||
void _ParseStatus();
|
void _ParseStatus();
|
||||||
void _ParseHeaders();
|
void _ParseHeaders();
|
||||||
|
|
||||||
void _AddOutputBufferLine(const char* line);
|
|
||||||
|
|
||||||
// URL result parameters access
|
// URL result parameters access
|
||||||
BPositionIO* _ResultRawData();
|
BPositionIO* _ResultRawData();
|
||||||
BHttpHeaders& _ResultHeaders();
|
BHttpHeaders& _ResultHeaders();
|
||||||
@@ -87,7 +85,6 @@ private:
|
|||||||
BString fRequestMethod;
|
BString fRequestMethod;
|
||||||
int8 fHttpVersion;
|
int8 fHttpVersion;
|
||||||
|
|
||||||
BString fOutputBuffer;
|
|
||||||
BNetBuffer fInputBuffer;
|
BNetBuffer fInputBuffer;
|
||||||
|
|
||||||
BHttpHeaders fHeaders;
|
BHttpHeaders fHeaders;
|
||||||
|
|||||||
@@ -293,7 +293,6 @@ BHttpRequest::_ProtocolLoop()
|
|||||||
newRequest = false;
|
newRequest = false;
|
||||||
|
|
||||||
// Result reset
|
// Result reset
|
||||||
fOutputBuffer.Truncate(0, true);
|
|
||||||
fOutputHeaders.Clear();
|
fOutputHeaders.Clear();
|
||||||
fHeaders.Clear();
|
fHeaders.Clear();
|
||||||
_ResultHeaders().Clear();
|
_ResultHeaders().Clear();
|
||||||
@@ -305,10 +304,6 @@ BHttpRequest::_ProtocolLoop()
|
|||||||
return B_PROT_CANT_RESOLVE_HOSTNAME;
|
return B_PROT_CANT_RESOLVE_HOSTNAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
_CreateRequest();
|
|
||||||
_AddHeaders();
|
|
||||||
_AddOutputBufferLine("");
|
|
||||||
|
|
||||||
status_t requestStatus = _MakeRequest();
|
status_t requestStatus = _MakeRequest();
|
||||||
if (requestStatus != B_PROT_SUCCESS)
|
if (requestStatus != B_PROT_SUCCESS)
|
||||||
return requestStatus;
|
return requestStatus;
|
||||||
@@ -445,20 +440,19 @@ BHttpRequest::_MakeRequest()
|
|||||||
if (fListener != NULL)
|
if (fListener != NULL)
|
||||||
fListener->ConnectionOpened(this);
|
fListener->ConnectionOpened(this);
|
||||||
|
|
||||||
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Connection opened.");
|
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Connection opened, sending request.");
|
||||||
|
|
||||||
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Sending request (size=%d)",
|
_SendRequest();
|
||||||
fOutputBuffer.Length());
|
_SendHeaders();
|
||||||
fSocket->Write(fOutputBuffer.String(), fOutputBuffer.Length());
|
fSocket->Write("\r\n", 2);
|
||||||
fOutputBuffer.Truncate(0);
|
|
||||||
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Request sent.");
|
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Request sent.");
|
||||||
|
|
||||||
if (fRequestMethod == B_HTTP_POST && fOptPostFields != NULL) {
|
if (fRequestMethod == B_HTTP_POST && fOptPostFields != NULL) {
|
||||||
if (fOptPostFields->GetFormType() != B_HTTP_FORM_MULTIPART) {
|
if (fOptPostFields->GetFormType() != B_HTTP_FORM_MULTIPART) {
|
||||||
fOutputBuffer = fOptPostFields->RawData();
|
BString outputBuffer = fOptPostFields->RawData();
|
||||||
_EmitDebug(B_URL_PROTOCOL_DEBUG_TRANSFER_OUT,
|
_EmitDebug(B_URL_PROTOCOL_DEBUG_TRANSFER_OUT,
|
||||||
"%s", fOutputBuffer.String());
|
"%s", outputBuffer.String());
|
||||||
fSocket->Write(fOutputBuffer.String(), fOutputBuffer.Length());
|
fSocket->Write(outputBuffer.String(), outputBuffer.Length());
|
||||||
} else {
|
} else {
|
||||||
for (BHttpForm::Iterator it = fOptPostFields->GetIterator();
|
for (BHttpForm::Iterator it = fOptPostFields->GetIterator();
|
||||||
const BHttpFormData* currentField = it.Next();
|
const BHttpFormData* currentField = it.Next();
|
||||||
@@ -537,7 +531,6 @@ BHttpRequest::_MakeRequest()
|
|||||||
fSocket->Write("0\r\n\r\n", 5);
|
fSocket->Write("0\r\n\r\n", 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fOutputBuffer.Truncate(0, true);
|
|
||||||
|
|
||||||
fRequestStatus = kRequestInitialState;
|
fRequestStatus = kRequestInitialState;
|
||||||
|
|
||||||
@@ -766,7 +759,7 @@ BHttpRequest::_ParseHeaders()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BHttpRequest::_CreateRequest()
|
BHttpRequest::_SendRequest()
|
||||||
{
|
{
|
||||||
BString request(fRequestMethod);
|
BString request(fRequestMethod);
|
||||||
|
|
||||||
@@ -778,28 +771,23 @@ BHttpRequest::_CreateRequest()
|
|||||||
if (Url().HasRequest())
|
if (Url().HasRequest())
|
||||||
request << '?' << Url().Request();
|
request << '?' << Url().Request();
|
||||||
|
|
||||||
if (Url().HasFragment())
|
|
||||||
request << '#' << Url().Fragment();
|
|
||||||
|
|
||||||
request << ' ';
|
|
||||||
|
|
||||||
switch (fHttpVersion) {
|
switch (fHttpVersion) {
|
||||||
case B_HTTP_11:
|
case B_HTTP_11:
|
||||||
request << "HTTP/1.1";
|
request << " HTTP/1.1\r\n";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case B_HTTP_10:
|
case B_HTTP_10:
|
||||||
request << "HTTP/1.0";
|
request << " HTTP/1.0\r\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_AddOutputBufferLine(request.String());
|
fSocket->Write(request.String(), request.Length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BHttpRequest::_AddHeaders()
|
BHttpRequest::_SendHeaders()
|
||||||
{
|
{
|
||||||
// HTTP 1.1 additional headers
|
// HTTP 1.1 additional headers
|
||||||
if (fHttpVersion == B_HTTP_11) {
|
if (fHttpVersion == B_HTTP_11) {
|
||||||
@@ -900,19 +888,13 @@ BHttpRequest::_AddHeaders()
|
|||||||
// Write output headers to output stream
|
// Write output headers to output stream
|
||||||
for (int32 headerIndex = 0; headerIndex < fOutputHeaders.CountHeaders();
|
for (int32 headerIndex = 0; headerIndex < fOutputHeaders.CountHeaders();
|
||||||
headerIndex++) {
|
headerIndex++) {
|
||||||
_AddOutputBufferLine(fOutputHeaders.HeaderAt(headerIndex).Header());
|
const char* header = fOutputHeaders.HeaderAt(headerIndex).Header();
|
||||||
|
fSocket->Write(header, strlen(header));
|
||||||
|
fSocket->Write("\r\n", 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
BHttpRequest::_AddOutputBufferLine(const char* line)
|
|
||||||
{
|
|
||||||
_EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", line);
|
|
||||||
fOutputBuffer << line << "\r\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BHttpHeaders&
|
BHttpHeaders&
|
||||||
BHttpRequest::_ResultHeaders()
|
BHttpRequest::_ResultHeaders()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user