diff --git a/http/http-inbound-connection.cpp b/http/http-inbound-connection.cpp index 89c9c123..57064ddd 100644 --- a/http/http-inbound-connection.cpp +++ b/http/http-inbound-connection.cpp @@ -79,10 +79,10 @@ td::Status HttpInboundConnection::receive(td::ChainBufferReader &input) { send_client_error(); return td::Status::OK(); } + cur_request_ = R.move_as_ok(); if (exit_loop) { return td::Status::OK(); } - cur_request_ = R.move_as_ok(); } auto payload = cur_request_->create_empty_payload().move_as_ok(); diff --git a/http/http-outbound-connection.cpp b/http/http-outbound-connection.cpp index a98efbc9..63621df8 100644 --- a/http/http-outbound-connection.cpp +++ b/http/http-outbound-connection.cpp @@ -42,10 +42,10 @@ td::Status HttpOutboundConnection::receive(td::ChainBufferReader &input) { answer_error(HttpStatusCode::status_bad_request, "", std::move(promise_)); return td::Status::OK(); } + cur_response_ = R.move_as_ok(); if (exit_loop) { return td::Status::OK(); } - cur_response_ = R.move_as_ok(); } if (cur_response_->code() == 100) { diff --git a/http/http.cpp b/http/http.cpp index cefe1a47..cc1fd889 100644 --- a/http/http.cpp +++ b/http/http.cpp @@ -587,7 +587,7 @@ tl_object_ptr HttpPayload::store_tl(size_t max_size) max_size -= s.size(); } obj->data_.truncate(obj->data_.size() - S.size()); - if (chunks_.size() != 0) { + if (chunks_.size() != 0 || !parse_completed()) { return obj; } if (!written_zero_chunk_) { diff --git a/rldp-http-proxy/rldp-http-proxy.cpp b/rldp-http-proxy/rldp-http-proxy.cpp index a5faa002..0b679c27 100644 --- a/rldp-http-proxy/rldp-http-proxy.cpp +++ b/rldp-http-proxy/rldp-http-proxy.cpp @@ -117,7 +117,7 @@ class HttpRemote : public td::actor::Actor { } }); td::actor::send_closure(client_, &ton::http::HttpClient::send_request, std::move(request), std::move(payload), - td::Timestamp::in(30.0), std::move(P)); + td::Timestamp::never(), std::move(P)); } else { ton::http::answer_error(ton::http::HttpStatusCode::status_bad_request, "", std::move(promise)); } @@ -801,6 +801,7 @@ class RldpToTcpRequestSender : public td::actor::Actor { , dst_(dst) , request_(std::move(request)) , request_payload_(std::move(request_payload)) + , proto_version_(request_->proto_version()) , promise_(std::move(promise)) , adnl_(adnl) , rldp_(rldp) @@ -836,7 +837,7 @@ class RldpToTcpRequestSender : public td::actor::Actor { void abort_query(td::Status error) { LOG(INFO) << "aborting http over rldp query: " << error; - promise_.set_result(create_error_response(request_->proto_version(), 502, "Bad Gateway")); + promise_.set_result(create_error_response(proto_version_, 502, "Bad Gateway")); stop(); } @@ -848,6 +849,7 @@ class RldpToTcpRequestSender : public td::actor::Actor { std::unique_ptr request_; std::shared_ptr request_payload_; + std::string proto_version_; td::Promise promise_;