diff options
Diffstat (limited to 'chromium/net/third_party/quiche/src/quic/tools/quic_simple_dispatcher.cc')
-rw-r--r-- | chromium/net/third_party/quiche/src/quic/tools/quic_simple_dispatcher.cc | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/chromium/net/third_party/quiche/src/quic/tools/quic_simple_dispatcher.cc b/chromium/net/third_party/quiche/src/quic/tools/quic_simple_dispatcher.cc new file mode 100644 index 00000000000..4706b606843 --- /dev/null +++ b/chromium/net/third_party/quiche/src/quic/tools/quic_simple_dispatcher.cc @@ -0,0 +1,68 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/third_party/quiche/src/quic/tools/quic_simple_dispatcher.h" + +#include "net/third_party/quiche/src/quic/tools/quic_simple_server_session.h" + +namespace quic { + +QuicSimpleDispatcher::QuicSimpleDispatcher( + const QuicConfig* config, + const QuicCryptoServerConfig* crypto_config, + QuicVersionManager* version_manager, + std::unique_ptr<QuicConnectionHelperInterface> helper, + std::unique_ptr<QuicCryptoServerStream::Helper> session_helper, + std::unique_ptr<QuicAlarmFactory> alarm_factory, + QuicSimpleServerBackend* quic_simple_server_backend, + uint8_t expected_connection_id_length) + : QuicDispatcher(config, + crypto_config, + version_manager, + std::move(helper), + std::move(session_helper), + std::move(alarm_factory), + expected_connection_id_length), + quic_simple_server_backend_(quic_simple_server_backend) {} + +QuicSimpleDispatcher::~QuicSimpleDispatcher() = default; + +int QuicSimpleDispatcher::GetRstErrorCount( + QuicRstStreamErrorCode error_code) const { + auto it = rst_error_map_.find(error_code); + if (it == rst_error_map_.end()) { + return 0; + } + return it->second; +} + +void QuicSimpleDispatcher::OnRstStreamReceived( + const QuicRstStreamFrame& frame) { + auto it = rst_error_map_.find(frame.error_code); + if (it == rst_error_map_.end()) { + rst_error_map_.insert(std::make_pair(frame.error_code, 1)); + } else { + it->second++; + } +} + +QuicServerSessionBase* QuicSimpleDispatcher::CreateQuicSession( + QuicConnectionId connection_id, + const QuicSocketAddress& client_address, + QuicStringPiece /*alpn*/, + const ParsedQuicVersion& version) { + // The QuicServerSessionBase takes ownership of |connection| below. + QuicConnection* connection = new QuicConnection( + connection_id, client_address, helper(), alarm_factory(), writer(), + /* owns_writer= */ false, Perspective::IS_SERVER, + ParsedQuicVersionVector{version}); + + QuicServerSessionBase* session = new QuicSimpleServerSession( + config(), GetSupportedVersions(), connection, this, session_helper(), + crypto_config(), compressed_certs_cache(), quic_simple_server_backend_); + session->Initialize(); + return session; +} + +} // namespace quic |