| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/tools/quic/quic_dispatcher.h" | 5 #include "net/tools/quic/quic_dispatcher.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/debug/stack_trace.h" | 9 #include "base/debug/stack_trace.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
| 13 #include "net/quic/core/crypto/quic_random.h" | 13 #include "net/quic/core/crypto/quic_random.h" |
| 14 #include "net/quic/core/quic_bug_tracker.h" | 14 #include "net/quic/core/quic_bug_tracker.h" |
| 15 #include "net/quic/core/quic_flags.h" | 15 #include "net/quic/core/quic_flags.h" |
| 16 #include "net/quic/core/quic_utils.h" | 16 #include "net/quic/core/quic_utils.h" |
| 17 #include "net/tools/quic/quic_simple_server_session.h" |
| 18 |
| 17 #include "net/tools/quic/chlo_extractor.h" | 19 #include "net/tools/quic/chlo_extractor.h" |
| 18 #include "net/tools/quic/quic_per_connection_packet_writer.h" | 20 #include "net/tools/quic/quic_per_connection_packet_writer.h" |
| 19 #include "net/tools/quic/quic_simple_server_session.h" | 21 #include "net/tools/quic/quic_simple_server_session.h" |
| 20 #include "net/tools/quic/quic_time_wait_list_manager.h" | 22 #include "net/tools/quic/quic_time_wait_list_manager.h" |
| 21 #include "net/tools/quic/stateless_rejector.h" | 23 #include "net/tools/quic/stateless_rejector.h" |
| 22 | 24 |
| 23 using base::StringPiece; | 25 using base::StringPiece; |
| 24 using std::list; | 26 using std::list; |
| 25 using std::string; | 27 using std::string; |
| 26 | 28 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 // Set as the visitor of |creator_| to collect any generated packets. | 150 // Set as the visitor of |creator_| to collect any generated packets. |
| 149 PacketCollector collector_; | 151 PacketCollector collector_; |
| 150 QuicPacketCreator creator_; | 152 QuicPacketCreator creator_; |
| 151 QuicTimeWaitListManager* time_wait_list_manager_; | 153 QuicTimeWaitListManager* time_wait_list_manager_; |
| 152 }; | 154 }; |
| 153 | 155 |
| 154 // Class which sits between the ChloExtractor and the StatelessRejector | 156 // Class which sits between the ChloExtractor and the StatelessRejector |
| 155 // to give the QuicDispatcher a chance to apply policy checks to the CHLO. | 157 // to give the QuicDispatcher a chance to apply policy checks to the CHLO. |
| 156 class ChloValidator : public ChloExtractor::Delegate { | 158 class ChloValidator : public ChloExtractor::Delegate { |
| 157 public: | 159 public: |
| 158 ChloValidator(QuicServerSessionBase::Helper* helper, | 160 ChloValidator(QuicCryptoServerStream::Helper* helper, |
| 159 IPEndPoint self_address, | 161 IPEndPoint self_address, |
| 160 StatelessRejector* rejector) | 162 StatelessRejector* rejector) |
| 161 : helper_(helper), | 163 : helper_(helper), |
| 162 self_address_(self_address), | 164 self_address_(self_address), |
| 163 rejector_(rejector), | 165 rejector_(rejector), |
| 164 can_accept_(false) {} | 166 can_accept_(false) {} |
| 165 | 167 |
| 166 // ChloExtractor::Delegate implementation. | 168 // ChloExtractor::Delegate implementation. |
| 167 void OnChlo(QuicVersion version, | 169 void OnChlo(QuicVersion version, |
| 168 QuicConnectionId connection_id, | 170 QuicConnectionId connection_id, |
| 169 const CryptoHandshakeMessage& chlo) override { | 171 const CryptoHandshakeMessage& chlo) override { |
| 170 if (helper_->CanAcceptClientHello(chlo, self_address_, &error_details_)) { | 172 if (helper_->CanAcceptClientHello(chlo, self_address_, &error_details_)) { |
| 171 can_accept_ = true; | 173 can_accept_ = true; |
| 172 rejector_->OnChlo(version, connection_id, | 174 rejector_->OnChlo(version, connection_id, |
| 173 helper_->GenerateConnectionIdForReject(connection_id), | 175 helper_->GenerateConnectionIdForReject(connection_id), |
| 174 chlo); | 176 chlo); |
| 175 } | 177 } |
| 176 } | 178 } |
| 177 | 179 |
| 178 bool can_accept() const { return can_accept_; } | 180 bool can_accept() const { return can_accept_; } |
| 179 | 181 |
| 180 const string& error_details() const { return error_details_; } | 182 const string& error_details() const { return error_details_; } |
| 181 | 183 |
| 182 private: | 184 private: |
| 183 QuicServerSessionBase::Helper* helper_; // Unowned. | 185 QuicCryptoServerStream::Helper* helper_; // Unowned. |
| 184 IPEndPoint self_address_; | 186 IPEndPoint self_address_; |
| 185 StatelessRejector* rejector_; // Unowned. | 187 StatelessRejector* rejector_; // Unowned. |
| 186 bool can_accept_; | 188 bool can_accept_; |
| 187 string error_details_; | 189 string error_details_; |
| 188 }; | 190 }; |
| 189 | 191 |
| 190 } // namespace | 192 } // namespace |
| 191 | 193 |
| 192 QuicDispatcher::QuicDispatcher( | 194 QuicDispatcher::QuicDispatcher( |
| 193 const QuicConfig& config, | 195 const QuicConfig& config, |
| 194 const QuicCryptoServerConfig* crypto_config, | 196 const QuicCryptoServerConfig* crypto_config, |
| 195 QuicVersionManager* version_manager, | 197 QuicVersionManager* version_manager, |
| 196 std::unique_ptr<QuicConnectionHelperInterface> helper, | 198 std::unique_ptr<QuicConnectionHelperInterface> helper, |
| 197 std::unique_ptr<QuicServerSessionBase::Helper> session_helper, | 199 std::unique_ptr<QuicCryptoServerStream::Helper> session_helper, |
| 198 std::unique_ptr<QuicAlarmFactory> alarm_factory) | 200 std::unique_ptr<QuicAlarmFactory> alarm_factory) |
| 199 : config_(config), | 201 : config_(config), |
| 200 crypto_config_(crypto_config), | 202 crypto_config_(crypto_config), |
| 201 compressed_certs_cache_( | 203 compressed_certs_cache_( |
| 202 QuicCompressedCertsCache::kQuicCompressedCertsCacheSize), | 204 QuicCompressedCertsCache::kQuicCompressedCertsCacheSize), |
| 203 helper_(std::move(helper)), | 205 helper_(std::move(helper)), |
| 204 session_helper_(std::move(session_helper)), | 206 session_helper_(std::move(session_helper)), |
| 205 alarm_factory_(std::move(alarm_factory)), | 207 alarm_factory_(std::move(alarm_factory)), |
| 206 delete_sessions_alarm_( | 208 delete_sessions_alarm_( |
| 207 alarm_factory_->CreateAlarm(new DeleteSessionsAlarm(this))), | 209 alarm_factory_->CreateAlarm(new DeleteSessionsAlarm(this))), |
| (...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 904 void QuicDispatcher::DeliverPacketsToSession( | 906 void QuicDispatcher::DeliverPacketsToSession( |
| 905 const std::list<BufferedPacket>& packets, | 907 const std::list<BufferedPacket>& packets, |
| 906 QuicServerSessionBase* session) { | 908 QuicServerSessionBase* session) { |
| 907 for (const BufferedPacket& packet : packets) { | 909 for (const BufferedPacket& packet : packets) { |
| 908 session->ProcessUdpPacket(packet.server_address, packet.client_address, | 910 session->ProcessUdpPacket(packet.server_address, packet.client_address, |
| 909 *(packet.packet)); | 911 *(packet.packet)); |
| 910 } | 912 } |
| 911 } | 913 } |
| 912 | 914 |
| 913 } // namespace net | 915 } // namespace net |
| OLD | NEW |