diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2016-11-03 16:29:04 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2016-11-03 16:29:04 +0900 |
| commit | 2df30b144748dda434aa0002d636220e1f3aa87b (patch) | |
| tree | 5903c95afc2485645388a9477cfa45cf0bbdac4e /src/HttpConnection.cc | |
| parent | a9a60cef1bac42512940d77fd031c3b301629498 (diff) | |
Support 1xx non-final response
Diffstat (limited to 'src/HttpConnection.cc')
| -rw-r--r-- | src/HttpConnection.cc | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/HttpConnection.cc b/src/HttpConnection.cc index d29f4a30..77cb9d27 100644 --- a/src/HttpConnection.cc +++ b/src/HttpConnection.cc @@ -68,6 +68,11 @@ HttpRequestEntry::HttpRequestEntry(std::unique_ptr<HttpRequest> httpRequest) { } +void HttpRequestEntry::resetHttpHeaderProcessor() +{ + proc_ = make_unique<HttpHeaderProcessor>(HttpHeaderProcessor::CLIENT_PARSER); +} + std::unique_ptr<HttpRequest> HttpRequestEntry::popHttpRequest() { return std::move(httpRequest_); @@ -151,9 +156,16 @@ std::unique_ptr<HttpResponse> HttpConnection::receiveResponse() socketRecvBuffer_->getBufferLength())) { A2_LOG_INFO( fmt(MSG_RECEIVE_RESPONSE, cuid_, proc->getHeaderString().c_str())); + auto result = proc->getResult(); + if (result->getStatusCode() / 100 == 1) { + socketRecvBuffer_->drain(proc->getLastBytesProcessed()); + outstandingHttpRequests_.front()->resetHttpHeaderProcessor(); + return nullptr; + } + auto httpResponse = make_unique<HttpResponse>(); httpResponse->setCuid(cuid_); - httpResponse->setHttpHeader(proc->getResult()); + httpResponse->setHttpHeader(std::move(result)); httpResponse->setHttpRequest( outstandingHttpRequests_.front()->popHttpRequest()); socketRecvBuffer_->drain(proc->getLastBytesProcessed()); |
