diff --git a/headers/os/net/HttpRequest.h b/headers/os/net/HttpRequest.h index 9121f6717e..cb65e1e002 100644 --- a/headers/os/net/HttpRequest.h +++ b/headers/os/net/HttpRequest.h @@ -84,11 +84,17 @@ private: BHttpAuthentication fAuthentication; // Request status + BHttpHeaders fOutputHeaders; - bool fStatusReceived; - bool fHeadersReceived; - bool fContentReceived; - bool fTrailingHeadersReceived; + + // Request state/events + enum { + kRequestInitialState, + kRequestStatusReceived, + kRequestHeadersReceived, + kRequestContentReceived, + kRequestTrailingHeadersReceived + } fRequestStatus; // Protocol options @@ -134,43 +140,6 @@ enum { }; -// HTTP Protocol options -enum { - B_HTTPOPT_METHOD = 0, - // (int) Request method (see B_HTTP_GET, ...) - B_HTTPOPT_FOLLOWLOCATION, - // (bool) Follow Location: headers - B_HTTPOPT_MAXREDIRS, - // (int) Max relocation - B_HTTPOPT_HEADERS, - // (BHttpHeaders*) Headers to be sent - B_HTTPOPT_REFERER, - // (string) Referer - B_HTTPOPT_USERAGENT, - // (string) User-Agent - B_HTTPOPT_SETCOOKIES, - // (bool) Send cookies from context - B_HTTPOPT_DISCARD_DATA, - // (bool) Discard incoming data (still notified) - B_HTTPOPT_DISABLE_LISTENER, - // (bool) Don't send notification to the listener - B_HTTPOPT_AUTOREFERER, - // (bool) Automatically set the Referer header - B_HTTPOPT_POSTFIELDS, - // (BHttpForm*) POST data to be sent - B_HTTPOPT_INPUTDATA, - // (BDataIO*) Input data to be sent (POST, PUT) - B_HTTPOPT_AUTHUSERNAME, - // (string) Authentication username - B_HTTPOPT_AUTHPASSWORD, - // (string) Authentication password - B_HTTPOPT_AUTHMETHOD, - // (int) Allowed authentication methods (see BHttpAuthenticationMethod) - - B_HTTPOPT__OPT_NUM -}; - - // HTTP status classes enum http_status_code_class { B_HTTP_STATUS_CLASS_INVALID = 000, diff --git a/src/kits/network/libnetapi/HttpRequest.cpp b/src/kits/network/libnetapi/HttpRequest.cpp index d21aba0c4f..a49db2f06d 100644 --- a/src/kits/network/libnetapi/HttpRequest.cpp +++ b/src/kits/network/libnetapi/HttpRequest.cpp @@ -33,9 +33,14 @@ BHttpRequest::BHttpRequest(const BUrl& url, BUrlResult& result, bool ssl, BUrlContext* context) : BUrlRequest(url, listener, context, result, "BUrlProtocol.HTTP", protocolName), + fSocket(NULL), fSSL(ssl), fRequestMethod(B_HTTP_GET), - fHttpVersion(B_HTTP_11) + fHttpVersion(B_HTTP_11), + fRequestStatus(kRequestInitialState), + fOptHeaders(NULL), + fOptInputData(NULL), + fOptInputDataSize(-1) { _ResetOptions(); if (ssl) @@ -488,8 +493,7 @@ BHttpRequest::_MakeRequest() } fOutputBuffer.Truncate(0, true); - fStatusReceived = false; - fHeadersReceived = false; + fRequestStatus = kRequestInitialState; // Receive loop bool receiveEnd = false; @@ -522,16 +526,16 @@ BHttpRequest::_MakeRequest() else bytesRead = 0; - if (!fStatusReceived) { + if (fRequestStatus < kRequestStatusReceived) { _ParseStatus(); //! ProtocolHook:ResponseStarted - if (fStatusReceived && fListener != NULL) + if (fRequestStatus >= kRequestStatusReceived && fListener != NULL) fListener->ResponseStarted(this); - } else if (!fHeadersReceived) { + } else if (fRequestStatus < kRequestHeadersReceived) { _ParseHeaders(); - if (fHeadersReceived) { + if (fRequestStatus >= kRequestHeadersReceived) { receiveBufferSize = kHttpProtocolReceiveBufferSize; _ResultHeaders() = fHeaders; @@ -595,7 +599,7 @@ BHttpRequest::_MakeRequest() PRINT(("BHP[%p] Chunk %s=%ld\n", this, chunkHeader.String(), chunkSize)); if (chunkSize == 0) { - fContentReceived = true; + fRequestStatus = kRequestContentReceived; } bytesRead = -1; @@ -697,7 +701,7 @@ BHttpRequest::_ParseStatus() if (statusLine.CountChars() < 12) return; - fStatusReceived = true; + fRequestStatus = kRequestStatusReceived; BString statusCodeStr; BString statusText; @@ -720,7 +724,7 @@ BHttpRequest::_ParseHeaders() // An empty line means the end of the header section if (currentHeader.Length() == 0) { - fHeadersReceived = true; + fRequestStatus = kRequestHeadersReceived; return; }