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() std::unique_ptr<HttpRequest> HttpRequestEntry::popHttpRequest()
{ {
return std::move(httpRequest_); return std::move(httpRequest_);
@ -151,9 +156,16 @@ std::unique_ptr<HttpResponse> HttpConnection::receiveResponse()
socketRecvBuffer_->getBufferLength())) { socketRecvBuffer_->getBufferLength())) {
A2_LOG_INFO( A2_LOG_INFO(
fmt(MSG_RECEIVE_RESPONSE, cuid_, proc->getHeaderString().c_str())); 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>(); auto httpResponse = make_unique<HttpResponse>();
httpResponse->setCuid(cuid_); httpResponse->setCuid(cuid_);
httpResponse->setHttpHeader(proc->getResult()); httpResponse->setHttpHeader(std::move(result));
httpResponse->setHttpRequest( httpResponse->setHttpRequest(
outstandingHttpRequests_.front()->popHttpRequest()); outstandingHttpRequests_.front()->popHttpRequest());
socketRecvBuffer_->drain(proc->getLastBytesProcessed()); socketRecvBuffer_->drain(proc->getLastBytesProcessed());

View File

@ -62,6 +62,10 @@ private:
public: public:
HttpRequestEntry(std::unique_ptr<HttpRequest> httpRequest); 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 const std::unique_ptr<HttpRequest>& getHttpRequest() const
{ {
return httpRequest_; return httpRequest_;