| 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 // A server side dispatcher which dispatches a given client's data to their | 5 // A server side dispatcher which dispatches a given client's data to their |
| 6 // stream. | 6 // stream. |
| 7 | 7 |
| 8 #ifndef NET_TOOLS_QUIC_QUIC_DISPATCHER_H_ | 8 #ifndef NET_TOOLS_QUIC_QUIC_DISPATCHER_H_ |
| 9 #define NET_TOOLS_QUIC_QUIC_DISPATCHER_H_ | 9 #define NET_TOOLS_QUIC_QUIC_DISPATCHER_H_ |
| 10 | 10 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 const char* buffer, size_t buf_len, | 69 const char* buffer, size_t buf_len, |
| 70 const IPAddressNumber& self_address, | 70 const IPAddressNumber& self_address, |
| 71 const IPEndPoint& peer_address, | 71 const IPEndPoint& peer_address, |
| 72 QuicBlockedWriterInterface* writer) OVERRIDE; | 72 QuicBlockedWriterInterface* writer) OVERRIDE; |
| 73 virtual bool IsWriteBlockedDataBuffered() const OVERRIDE; | 73 virtual bool IsWriteBlockedDataBuffered() const OVERRIDE; |
| 74 | 74 |
| 75 // Process the incoming packet by creating a new session, passing it to | 75 // Process the incoming packet by creating a new session, passing it to |
| 76 // an existing session, or passing it to the TimeWaitListManager. | 76 // an existing session, or passing it to the TimeWaitListManager. |
| 77 virtual void ProcessPacket(const IPEndPoint& server_address, | 77 virtual void ProcessPacket(const IPEndPoint& server_address, |
| 78 const IPEndPoint& client_address, | 78 const IPEndPoint& client_address, |
| 79 QuicGuid guid, | |
| 80 bool has_version_flag, | |
| 81 const QuicEncryptedPacket& packet); | 79 const QuicEncryptedPacket& packet); |
| 82 | 80 |
| 83 // Called when the underyling connection becomes writable to allow | 81 // Called when the underyling connection becomes writable to allow |
| 84 // queued writes to happen. | 82 // queued writes to happen. |
| 85 // | 83 // |
| 86 // Returns true if more writes are possible, false otherwise. | 84 // Returns true if more writes are possible, false otherwise. |
| 87 virtual bool OnCanWrite(); | 85 virtual bool OnCanWrite(); |
| 88 | 86 |
| 89 // Sends ConnectionClose frames to all connected clients. | 87 // Sends ConnectionClose frames to all connected clients. |
| 90 void Shutdown(); | 88 void Shutdown(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 121 return time_wait_list_manager_.get(); | 119 return time_wait_list_manager_.get(); |
| 122 } | 120 } |
| 123 | 121 |
| 124 QuicEpollConnectionHelper* helper() { return helper_.get(); } | 122 QuicEpollConnectionHelper* helper() { return helper_.get(); } |
| 125 EpollServer* epoll_server() { return epoll_server_; } | 123 EpollServer* epoll_server() { return epoll_server_; } |
| 126 | 124 |
| 127 const QuicVersionVector& supported_versions() const { | 125 const QuicVersionVector& supported_versions() const { |
| 128 return supported_versions_; | 126 return supported_versions_; |
| 129 } | 127 } |
| 130 | 128 |
| 129 protected: |
| 130 // Called by |framer_visitor_| when the public header has been parsed. |
| 131 virtual bool OnUnauthenticatedPublicHeader( |
| 132 const QuicPacketPublicHeader& header); |
| 133 |
| 134 // Information about the packet currently being dispatched. |
| 135 const IPEndPoint& current_client_address() { |
| 136 return current_client_address_; |
| 137 } |
| 138 const IPEndPoint& current_server_address() { |
| 139 return current_server_address_; |
| 140 } |
| 141 const QuicEncryptedPacket& current_packet() { |
| 142 return *current_packet_; |
| 143 } |
| 144 |
| 131 private: | 145 private: |
| 146 class QuicFramerVisitor; |
| 132 friend class net::tools::test::QuicDispatcherPeer; | 147 friend class net::tools::test::QuicDispatcherPeer; |
| 133 | 148 |
| 149 // Called by |framer_visitor_| when the private header has been parsed |
| 150 // of a data packet that is destined for the time wait manager. |
| 151 void OnUnauthenticatedHeader(const QuicPacketHeader& header); |
| 152 |
| 134 // Removes the session from the session map and write blocked list, and | 153 // Removes the session from the session map and write blocked list, and |
| 135 // adds the GUID to the time-wait list. | 154 // adds the GUID to the time-wait list. |
| 136 void CleanUpSession(SessionMap::iterator it); | 155 void CleanUpSession(SessionMap::iterator it); |
| 137 | 156 |
| 157 bool HandlePacketForTimeWait(const QuicPacketPublicHeader& header); |
| 158 |
| 138 // The list of connections waiting to write. | 159 // The list of connections waiting to write. |
| 139 WriteBlockedList write_blocked_list_; | 160 WriteBlockedList write_blocked_list_; |
| 140 | 161 |
| 141 SessionMap session_map_; | 162 SessionMap session_map_; |
| 142 | 163 |
| 143 // Entity that manages guids in time wait state. | 164 // Entity that manages guids in time wait state. |
| 144 scoped_ptr<QuicTimeWaitListManager> time_wait_list_manager_; | 165 scoped_ptr<QuicTimeWaitListManager> time_wait_list_manager_; |
| 145 | 166 |
| 146 // An alarm which deletes closed sessions. | 167 // An alarm which deletes closed sessions. |
| 147 scoped_ptr<DeleteSessionsAlarm> delete_sessions_alarm_; | 168 scoped_ptr<DeleteSessionsAlarm> delete_sessions_alarm_; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 163 | 184 |
| 164 // The writer to write to the socket with. | 185 // The writer to write to the socket with. |
| 165 scoped_ptr<QuicPacketWriter> writer_; | 186 scoped_ptr<QuicPacketWriter> writer_; |
| 166 | 187 |
| 167 // This vector contains QUIC versions which we currently support. | 188 // This vector contains QUIC versions which we currently support. |
| 168 // This should be ordered such that the highest supported version is the first | 189 // This should be ordered such that the highest supported version is the first |
| 169 // element, with subsequent elements in descending order (versions can be | 190 // element, with subsequent elements in descending order (versions can be |
| 170 // skipped as necessary). | 191 // skipped as necessary). |
| 171 const QuicVersionVector supported_versions_; | 192 const QuicVersionVector supported_versions_; |
| 172 | 193 |
| 194 // Information about the packet currently being handled. |
| 195 IPEndPoint current_client_address_; |
| 196 IPEndPoint current_server_address_; |
| 197 const QuicEncryptedPacket* current_packet_; |
| 198 |
| 199 QuicFramer framer_; |
| 200 scoped_ptr<QuicFramerVisitor> framer_visitor_; |
| 201 |
| 173 DISALLOW_COPY_AND_ASSIGN(QuicDispatcher); | 202 DISALLOW_COPY_AND_ASSIGN(QuicDispatcher); |
| 174 }; | 203 }; |
| 175 | 204 |
| 176 } // namespace tools | 205 } // namespace tools |
| 177 } // namespace net | 206 } // namespace net |
| 178 | 207 |
| 179 #endif // NET_TOOLS_QUIC_QUIC_DISPATCHER_H_ | 208 #endif // NET_TOOLS_QUIC_QUIC_DISPATCHER_H_ |
| OLD | NEW |