mirror of https://github.com/aria2/aria2
				
				
				
			Support 1xx non-final response
							parent
							
								
									a9a60cef1b
								
							
						
					
					
						commit
						2df30b1447
					
				| 
						 | 
					@ -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());
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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_;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue