summaryrefslogtreecommitdiff
path: root/chromium/net/third_party/quiche/src/quiche/quic/tools/quic_simple_server_stream.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/third_party/quiche/src/quiche/quic/tools/quic_simple_server_stream.cc')
-rw-r--r--chromium/net/third_party/quiche/src/quiche/quic/tools/quic_simple_server_stream.cc44
1 files changed, 38 insertions, 6 deletions
diff --git a/chromium/net/third_party/quiche/src/quiche/quic/tools/quic_simple_server_stream.cc b/chromium/net/third_party/quiche/src/quiche/quic/tools/quic_simple_server_stream.cc
index 608d7b58289..beea65a993e 100644
--- a/chromium/net/third_party/quiche/src/quiche/quic/tools/quic_simple_server_stream.cc
+++ b/chromium/net/third_party/quiche/src/quiche/quic/tools/quic_simple_server_stream.cc
@@ -96,12 +96,6 @@ void QuicSimpleServerStream::OnInitialHeadersComplete(
}
}
-void QuicSimpleServerStream::OnTrailingHeadersComplete(
- bool /*fin*/, size_t /*frame_len*/, const QuicHeaderList& /*header_list*/) {
- QUIC_BUG(quic_bug_10962_1) << "Server does not support receiving Trailers.";
- SendErrorResponse();
-}
-
void QuicSimpleServerStream::OnBodyAvailable() {
while (HasBytesToRead()) {
struct iovec iov;
@@ -251,6 +245,31 @@ std::string QuicSimpleServerStream::peer_host() const {
return spdy_session()->peer_address().host().ToString();
}
+namespace {
+
+class DelayedResponseAlarm : public QuicAlarm::DelegateWithContext {
+ public:
+ DelayedResponseAlarm(QuicSimpleServerStream* stream,
+ const QuicBackendResponse* response)
+ : QuicAlarm::DelegateWithContext(
+ stream->spdy_session()->connection()->context()),
+ stream_(stream),
+ response_(response) {
+ stream_ = stream;
+ response_ = response;
+ }
+
+ ~DelayedResponseAlarm() override = default;
+
+ void OnAlarm() override { stream_->Respond(response_); }
+
+ private:
+ QuicSimpleServerStream* stream_;
+ const QuicBackendResponse* response_;
+};
+
+} // namespace
+
void QuicSimpleServerStream::OnResponseBackendComplete(
const QuicBackendResponse* response) {
if (response == nullptr) {
@@ -259,6 +278,19 @@ void QuicSimpleServerStream::OnResponseBackendComplete(
return;
}
+ auto delay = response->delay();
+ if (delay.IsZero()) {
+ Respond(response);
+ return;
+ }
+
+ auto* connection = session()->connection();
+ delayed_response_alarm_.reset(connection->alarm_factory()->CreateAlarm(
+ new DelayedResponseAlarm(this, response)));
+ delayed_response_alarm_->Set(connection->clock()->Now() + delay);
+}
+
+void QuicSimpleServerStream::Respond(const QuicBackendResponse* response) {
// Send Early Hints first.
for (const auto& headers : response->early_hints()) {
QUIC_DVLOG(1) << "Stream " << id() << " sending an Early Hints response: "