Merge pull request #766 from aria2/support-1xx

Support 1xx non-final response
pull/772/head
Tatsuhiro Tsujikawa 2016-11-03 17:28:45 +09:00 committed by GitHub
commit b4010a52c8
2 changed files with 17 additions and 1 deletions

View File

@ -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());

View File

@ -62,6 +62,10 @@ private:
public:
HttpRequestEntry(std::unique_ptr<HttpRequest> httpRequest);
// Resets proc_ by recreating the object. Thus any object obtained
// by getHttpRequest() before this call is invalidated.
void resetHttpHeaderProcessor();
const std::unique_ptr<HttpRequest>& getHttpRequest() const
{
return httpRequest_;