| 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 <errno.h> | 7 #include <errno.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 dispatcher_->DeleteSessions(); | 30 dispatcher_->DeleteSessions(); |
| 31 return 0; | 31 return 0; |
| 32 } | 32 } |
| 33 | 33 |
| 34 private: | 34 private: |
| 35 QuicDispatcher* dispatcher_; | 35 QuicDispatcher* dispatcher_; |
| 36 }; | 36 }; |
| 37 | 37 |
| 38 QuicDispatcher::QuicDispatcher(const QuicConfig& config, | 38 QuicDispatcher::QuicDispatcher(const QuicConfig& config, |
| 39 const QuicCryptoServerConfig& crypto_config, | 39 const QuicCryptoServerConfig& crypto_config, |
| 40 const QuicVersionVector& supported_versions, |
| 40 int fd, | 41 int fd, |
| 41 EpollServer* epoll_server) | 42 EpollServer* epoll_server) |
| 42 : config_(config), | 43 : config_(config), |
| 43 crypto_config_(crypto_config), | 44 crypto_config_(crypto_config), |
| 44 time_wait_list_manager_( | 45 time_wait_list_manager_( |
| 45 new QuicTimeWaitListManager(this, epoll_server)), | 46 new QuicTimeWaitListManager(this, epoll_server, supported_versions)), |
| 46 delete_sessions_alarm_(new DeleteSessionsAlarm(this)), | 47 delete_sessions_alarm_(new DeleteSessionsAlarm(this)), |
| 47 epoll_server_(epoll_server), | 48 epoll_server_(epoll_server), |
| 48 fd_(fd), | 49 fd_(fd), |
| 49 write_blocked_(false), | 50 write_blocked_(false), |
| 50 helper_(new QuicEpollConnectionHelper(epoll_server_)), | 51 helper_(new QuicEpollConnectionHelper(epoll_server_)), |
| 51 writer_(new QuicDefaultPacketWriter(fd)) { | 52 writer_(new QuicDefaultPacketWriter(fd)), |
| 53 supported_versions_(supported_versions) { |
| 52 } | 54 } |
| 53 | 55 |
| 54 QuicDispatcher::~QuicDispatcher() { | 56 QuicDispatcher::~QuicDispatcher() { |
| 55 STLDeleteValues(&session_map_); | 57 STLDeleteValues(&session_map_); |
| 56 STLDeleteElements(&closed_session_list_); | 58 STLDeleteElements(&closed_session_list_); |
| 57 } | 59 } |
| 58 | 60 |
| 59 void QuicDispatcher::set_fd(int fd) { | 61 void QuicDispatcher::set_fd(int fd) { |
| 60 fd_ = fd; | 62 fd_ = fd; |
| 61 writer_.reset(new QuicDefaultPacketWriter(fd)); | 63 writer_.reset(new QuicDefaultPacketWriter(fd)); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 time_wait_list_manager_->ProcessPacket(server_address, | 97 time_wait_list_manager_->ProcessPacket(server_address, |
| 96 client_address, | 98 client_address, |
| 97 guid, | 99 guid, |
| 98 packet); | 100 packet); |
| 99 return; | 101 return; |
| 100 } | 102 } |
| 101 session = CreateQuicSession(guid, client_address); | 103 session = CreateQuicSession(guid, client_address); |
| 102 | 104 |
| 103 if (session == NULL) { | 105 if (session == NULL) { |
| 104 DLOG(INFO) << "Failed to create session for " << guid; | 106 DLOG(INFO) << "Failed to create session for " << guid; |
| 105 // Add this guid fo the time-wait state, to safely nack future packets. | 107 // Add this guid fo the time-wait state, to safely reject future packets. |
| 106 // We don't know the version here, so assume latest. | 108 // We don't know the version here, so assume latest. |
| 107 time_wait_list_manager_->AddGuidToTimeWait(guid, QuicVersionMax()); | 109 time_wait_list_manager_->AddGuidToTimeWait(guid, |
| 110 supported_versions_.front()); |
| 108 time_wait_list_manager_->ProcessPacket(server_address, | 111 time_wait_list_manager_->ProcessPacket(server_address, |
| 109 client_address, | 112 client_address, |
| 110 guid, | 113 guid, |
| 111 packet); | 114 packet); |
| 112 return; | 115 return; |
| 113 } | 116 } |
| 114 DLOG(INFO) << "Created new session for " << guid; | 117 DLOG(INFO) << "Created new session for " << guid; |
| 115 session_map_.insert(make_pair(guid, session)); | 118 session_map_.insert(make_pair(guid, session)); |
| 116 } else { | 119 } else { |
| 117 session = it->second; | 120 session = it->second; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 } | 198 } |
| 196 closed_session_list_.push_back(it->second); | 199 closed_session_list_.push_back(it->second); |
| 197 CleanUpSession(it); | 200 CleanUpSession(it); |
| 198 } | 201 } |
| 199 | 202 |
| 200 QuicSession* QuicDispatcher::CreateQuicSession( | 203 QuicSession* QuicDispatcher::CreateQuicSession( |
| 201 QuicGuid guid, | 204 QuicGuid guid, |
| 202 const IPEndPoint& client_address) { | 205 const IPEndPoint& client_address) { |
| 203 QuicServerSession* session = new QuicServerSession( | 206 QuicServerSession* session = new QuicServerSession( |
| 204 config_, new QuicConnection(guid, client_address, helper_.get(), this, | 207 config_, new QuicConnection(guid, client_address, helper_.get(), this, |
| 205 true, QuicVersionMax()), this); | 208 true, supported_versions_), this); |
| 206 session->InitializeSession(crypto_config_); | 209 session->InitializeSession(crypto_config_); |
| 207 return session; | 210 return session; |
| 208 } | 211 } |
| 209 | 212 |
| 210 } // namespace tools | 213 } // namespace tools |
| 211 } // namespace net | 214 } // namespace net |
| OLD | NEW |