Skip to content

Commit 753e4d9

Browse files
authored
Fix: allow sending multiple HTTP 1xx informational responses (#56)
1 parent 50f7742 commit 753e4d9

2 files changed

Lines changed: 5 additions & 9 deletions

File tree

trpc/stream/http/http_stream.cc

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,11 @@ Status HttpReadStream::AppendToRequest(size_t max_body_size) {
8282
Status HttpWriteStream::WriteHeader() {
8383
if (!(state_ & kHeaderWritten)) {
8484
NoncontiguousBufferBuilder builder;
85-
if (response_->GetStatus() == http::Response::StatusCode::kContinue &&
86-
!(state_ & kContinueWritten)) { // response 100 Continue
85+
if (response_->GetStatus() < http::Response::StatusCode::kOk) { // 1xx informational response
8786
response_->ResponseFirstLine(builder);
8887
builder.Append(http::kEmptyLine);
89-
return ContextStatusToStreamStatus(context_->SendResponse(builder.DestructiveGet()), [&] {
90-
state_ |= kContinueWritten;
91-
response_->SetStatus(http::HttpResponse::StatusCode::kOk);
92-
});
88+
return ContextStatusToStreamStatus(context_->SendResponse(builder.DestructiveGet()),
89+
[&] { response_->SetStatus(http::HttpResponse::StatusCode::kOk); });
9390
} else {
9491
const std::string& content_length = response_->GetHeader(http::kHeaderContentLength);
9592
content_length_ = content_length.empty() ? kChunked : http::ParseContentLength(content_length).value_or(0);

trpc/stream/http/http_stream.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,8 @@ class HttpWriteStream {
197197

198198
enum HttpWriterState {
199199
kInitial = 0,
200-
kContinueWritten = 1 << 0,
201-
kHeaderWritten = 1 << 1,
202-
kWriteDone = 1 << 2,
200+
kHeaderWritten = 1 << 0,
201+
kWriteDone = 1 << 1,
203202
};
204203

205204
uint32_t state_{kInitial};

0 commit comments

Comments
 (0)