Give toy server backends direct access to the QuicSpdyStream

Allows interaction with the datagram/capsule functionality, which will help with implementing CONNECT-UDP support in the toy server.

PiperOrigin-RevId: 476381522
diff --git a/quiche/quic/tools/connect_tunnel_test.cc b/quiche/quic/tools/connect_tunnel_test.cc
index 33753a1..379da7c 100644
--- a/quiche/quic/tools/connect_tunnel_test.cc
+++ b/quiche/quic/tools/connect_tunnel_test.cc
@@ -53,6 +53,7 @@
   QuicStreamId stream_id() const override { return 100; }
   std::string peer_host() const override { return "127.0.0.1"; }
 
+  MOCK_METHOD(QuicSpdyStream*, GetStream, (), (override));
   MOCK_METHOD(void, OnResponseBackendComplete,
               (const QuicBackendResponse* response), (override));
   MOCK_METHOD(void, SendStreamData, (absl::string_view data, bool close_stream),
diff --git a/quiche/quic/tools/quic_simple_server_backend.h b/quiche/quic/tools/quic_simple_server_backend.h
index 1ef3364..a142dd8 100644
--- a/quiche/quic/tools/quic_simple_server_backend.h
+++ b/quiche/quic/tools/quic_simple_server_backend.h
@@ -9,6 +9,7 @@
 #include <memory>
 
 #include "absl/strings/string_view.h"
+#include "quiche/quic/core/http/quic_spdy_stream.h"
 #include "quiche/quic/core/quic_error_codes.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/socket_factory.h"
@@ -33,6 +34,7 @@
     virtual QuicConnectionId connection_id() const = 0;
     virtual QuicStreamId stream_id() const = 0;
     virtual std::string peer_host() const = 0;
+    virtual QuicSpdyStream* GetStream() = 0;
     // Called when the response is ready at the backend and can be send back to
     // the QUIC client.
     virtual void OnResponseBackendComplete(
diff --git a/quiche/quic/tools/quic_simple_server_stream.cc b/quiche/quic/tools/quic_simple_server_stream.cc
index beea65a..f4dec74 100644
--- a/quiche/quic/tools/quic_simple_server_stream.cc
+++ b/quiche/quic/tools/quic_simple_server_stream.cc
@@ -245,6 +245,8 @@
   return spdy_session()->peer_address().host().ToString();
 }
 
+QuicSpdyStream* QuicSimpleServerStream::GetStream() { return this; }
+
 namespace {
 
 class DelayedResponseAlarm : public QuicAlarm::DelegateWithContext {
diff --git a/quiche/quic/tools/quic_simple_server_stream.h b/quiche/quic/tools/quic_simple_server_stream.h
index 3bcd9ed..85ce8b5 100644
--- a/quiche/quic/tools/quic_simple_server_stream.h
+++ b/quiche/quic/tools/quic_simple_server_stream.h
@@ -57,6 +57,7 @@
   QuicConnectionId connection_id() const override;
   QuicStreamId stream_id() const override;
   std::string peer_host() const override;
+  QuicSpdyStream* GetStream() override;
   void OnResponseBackendComplete(const QuicBackendResponse* response) override;
   void SendStreamData(absl::string_view data, bool close_stream) override;
   void TerminateStreamWithError(QuicResetStreamError error) override;