Line data Source code
1 : #include "source/common/quic/server_codec_impl.h" 2 : 3 : #include "source/common/quic/envoy_quic_server_stream.h" 4 : 5 : namespace Envoy { 6 : namespace Quic { 7 : 8 : // Converts a QuicStream instance to EnvoyQuicStream instance. The current stream implementation 9 : // inherits from these two interfaces, with the former one providing Quic interface and the latter 10 : // providing Envoy interface. 11 0 : EnvoyQuicStream* quicStreamToEnvoyStream(quic::QuicStream* stream) { 12 0 : return dynamic_cast<EnvoyQuicStream*>(stream); 13 0 : } 14 : 15 : QuicHttpServerConnectionImpl::QuicHttpServerConnectionImpl( 16 : EnvoyQuicServerSession& quic_session, Http::ServerConnectionCallbacks& callbacks, 17 : Http::Http3::CodecStats& stats, 18 : const envoy::config::core::v3::Http3ProtocolOptions& http3_options, 19 : const uint32_t max_request_headers_kb, const uint32_t max_request_headers_count, 20 : envoy::config::core::v3::HttpProtocolOptions::HeadersWithUnderscoresAction 21 : headers_with_underscores_action) 22 0 : : QuicHttpConnectionImplBase(quic_session, stats), quic_server_session_(quic_session) { 23 0 : quic_session.setCodecStats(stats); 24 0 : quic_session.setHttp3Options(http3_options); 25 0 : quic_session.setHeadersWithUnderscoreAction(headers_with_underscores_action); 26 0 : quic_session.setHttpConnectionCallbacks(callbacks); 27 0 : quic_session.setMaxIncomingHeadersCount(max_request_headers_count); 28 0 : quic_session.set_max_inbound_header_list_size(max_request_headers_kb * 1024u); 29 0 : } 30 : 31 0 : void QuicHttpServerConnectionImpl::onUnderlyingConnectionAboveWriteBufferHighWatermark() { 32 0 : quic_server_session_.PerformActionOnActiveStreams([](quic::QuicStream* quic_stream) { 33 0 : ENVOY_LOG(debug, "runHighWatermarkCallbacks on stream {}", quic_stream->id()); 34 0 : quicStreamToEnvoyStream(quic_stream)->runHighWatermarkCallbacks(); 35 0 : return true; 36 0 : }); 37 0 : } 38 : 39 0 : void QuicHttpServerConnectionImpl::onUnderlyingConnectionBelowWriteBufferLowWatermark() { 40 0 : quic_server_session_.PerformActionOnActiveStreams([](quic::QuicStream* quic_stream) { 41 0 : ENVOY_LOG(debug, "runLowWatermarkCallbacks on stream {}", quic_stream->id()); 42 0 : quicStreamToEnvoyStream(quic_stream)->runLowWatermarkCallbacks(); 43 0 : return true; 44 0 : }); 45 0 : } 46 : 47 0 : void QuicHttpServerConnectionImpl::shutdownNotice() { 48 0 : quic_server_session_.SendHttp3GoAway(quic::QUIC_PEER_GOING_AWAY, "Server shutdown"); 49 0 : } 50 : 51 0 : void QuicHttpServerConnectionImpl::goAway() { 52 0 : quic_server_session_.SendHttp3GoAway(quic::QUIC_PEER_GOING_AWAY, "server shutdown imminent"); 53 0 : } 54 : 55 : REGISTER_FACTORY(QuicHttpServerConnectionFactoryImpl, QuicHttpServerConnectionFactory); 56 : 57 : } // namespace Quic 58 : } // namespace Envoy