mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Minor bugfixes in http
This commit is contained in:
parent
836184e566
commit
5500acd1ba
1 changed files with 21 additions and 24 deletions
|
@ -279,25 +279,20 @@ td::Status HttpPayload::parse(td::ChainBufferReader &input) {
|
||||||
} break;
|
} break;
|
||||||
case ParseState::reading_chunk_data: {
|
case ParseState::reading_chunk_data: {
|
||||||
if (cur_chunk_size_ == 0) {
|
if (cur_chunk_size_ == 0) {
|
||||||
switch (type_) {
|
if (type_ == PayloadType::pt_eof || type_ == PayloadType::pt_tunnel) {
|
||||||
case PayloadType::pt_empty:
|
|
||||||
UNREACHABLE();
|
|
||||||
case PayloadType::pt_eof:
|
|
||||||
case PayloadType::pt_tunnel:
|
|
||||||
cur_chunk_size_ = 1LL << 60;
|
cur_chunk_size_ = 1LL << 60;
|
||||||
break;
|
} else if (type_ == PayloadType::pt_chunked) {
|
||||||
case PayloadType::pt_chunked:
|
|
||||||
state_ = ParseState::reading_crlf;
|
state_ = ParseState::reading_crlf;
|
||||||
break;
|
break;
|
||||||
case PayloadType::pt_content_length: {
|
} else if (type_ == PayloadType::pt_content_length) {
|
||||||
LOG(INFO) << "payload parse success";
|
LOG(INFO) << "payload parse success";
|
||||||
const std::lock_guard<std::mutex> lock{mutex_};
|
const std::lock_guard<std::mutex> lock{mutex_};
|
||||||
state_ = ParseState::completed;
|
state_ = ParseState::completed;
|
||||||
run_callbacks();
|
run_callbacks();
|
||||||
return td::Status::OK();
|
return td::Status::OK();
|
||||||
} break;
|
} else {
|
||||||
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (input.size() == 0) {
|
if (input.size() == 0) {
|
||||||
return td::Status::OK();
|
return td::Status::OK();
|
||||||
|
@ -502,7 +497,7 @@ bool HttpPayload::store_http(td::ChainBufferWriter &output, size_t max_size, Htt
|
||||||
char buf[64];
|
char buf[64];
|
||||||
::sprintf(buf, "%lx\r\n", s.size());
|
::sprintf(buf, "%lx\r\n", s.size());
|
||||||
auto slice = td::Slice(buf, strlen(buf));
|
auto slice = td::Slice(buf, strlen(buf));
|
||||||
wrote |= !slice.empty();
|
wrote = true;
|
||||||
output.append(slice);
|
output.append(slice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -514,7 +509,8 @@ bool HttpPayload::store_http(td::ChainBufferWriter &output, size_t max_size, Htt
|
||||||
wrote = true;
|
wrote = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chunks_.size() != 0 || !parse_completed()) {
|
auto cur_state = state_.load(std::memory_order_consume);
|
||||||
|
if (chunks_.size() != 0 || (cur_state != ParseState::reading_trailer && cur_state != ParseState::completed)) {
|
||||||
return wrote;
|
return wrote;
|
||||||
}
|
}
|
||||||
if (!written_zero_chunk_) {
|
if (!written_zero_chunk_) {
|
||||||
|
@ -531,7 +527,7 @@ bool HttpPayload::store_http(td::ChainBufferWriter &output, size_t max_size, Htt
|
||||||
}
|
}
|
||||||
|
|
||||||
while (max_size > 0) {
|
while (max_size > 0) {
|
||||||
auto cur_state = state_.load(std::memory_order_consume);
|
cur_state = state_.load(std::memory_order_consume);
|
||||||
HttpHeader h = get_header();
|
HttpHeader h = get_header();
|
||||||
if (h.empty()) {
|
if (h.empty()) {
|
||||||
if (cur_state != ParseState::completed) {
|
if (cur_state != ParseState::completed) {
|
||||||
|
@ -587,7 +583,8 @@ tl_object_ptr<ton_api::http_payloadPart> HttpPayload::store_tl(size_t max_size)
|
||||||
max_size -= s.size();
|
max_size -= s.size();
|
||||||
}
|
}
|
||||||
obj->data_.truncate(obj->data_.size() - S.size());
|
obj->data_.truncate(obj->data_.size() - S.size());
|
||||||
if (chunks_.size() != 0 || !parse_completed()) {
|
auto cur_state = state_.load(std::memory_order_consume);
|
||||||
|
if (chunks_.size() != 0 || (cur_state != ParseState::reading_trailer && cur_state != ParseState::completed)) {
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
if (!written_zero_chunk_) {
|
if (!written_zero_chunk_) {
|
||||||
|
@ -597,7 +594,7 @@ tl_object_ptr<ton_api::http_payloadPart> HttpPayload::store_tl(size_t max_size)
|
||||||
LOG(INFO) << "data completed";
|
LOG(INFO) << "data completed";
|
||||||
|
|
||||||
while (max_size > 0) {
|
while (max_size > 0) {
|
||||||
auto cur_state = state_.load(std::memory_order_consume);
|
cur_state = state_.load(std::memory_order_consume);
|
||||||
HttpHeader h = get_header();
|
HttpHeader h = get_header();
|
||||||
if (h.empty()) {
|
if (h.empty()) {
|
||||||
if (cur_state != ParseState::completed) {
|
if (cur_state != ParseState::completed) {
|
||||||
|
@ -869,7 +866,7 @@ td::Status HttpHeader::basic_check() {
|
||||||
}
|
}
|
||||||
for (auto &c : value) {
|
for (auto &c : value) {
|
||||||
if (c == '\r' || c == '\n') {
|
if (c == '\r' || c == '\n') {
|
||||||
return td::Status::Error("bad character in header name");
|
return td::Status::Error("bad character in header value");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return td::Status::OK();
|
return td::Status::OK();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue