| 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 // Handles packets for connection_ids in time wait state by discarding the | 5 // Handles packets for connection_ids in time wait state by discarding the |
| 6 // packet and sending the clients a public reset packet with exponential | 6 // packet and sending the clients a public reset packet with exponential |
| 7 // backoff. | 7 // backoff. |
| 8 | 8 |
| 9 #ifndef NET_TOOLS_QUIC_QUIC_TIME_WAIT_LIST_MANAGER_H_ | 9 #ifndef NET_TOOLS_QUIC_QUIC_TIME_WAIT_LIST_MANAGER_H_ |
| 10 #define NET_TOOLS_QUIC_QUIC_TIME_WAIT_LIST_MANAGER_H_ | 10 #define NET_TOOLS_QUIC_QUIC_TIME_WAIT_LIST_MANAGER_H_ |
| 11 | 11 |
| 12 #include <stddef.h> | 12 #include <stddef.h> |
| 13 | 13 |
| 14 #include <deque> | 14 #include <deque> |
| 15 #include <memory> | 15 #include <memory> |
| 16 | 16 |
| 17 #include "base/macros.h" | 17 #include "base/macros.h" |
| 18 #include "net/base/linked_hash_map.h" | 18 #include "net/base/linked_hash_map.h" |
| 19 #include "net/quic/core/quic_blocked_writer_interface.h" | 19 #include "net/quic/core/quic_blocked_writer_interface.h" |
| 20 #include "net/quic/core/quic_connection.h" | 20 #include "net/quic/core/quic_connection.h" |
| 21 #include "net/quic/core/quic_framer.h" | 21 #include "net/quic/core/quic_framer.h" |
| 22 #include "net/quic/core/quic_packet_writer.h" | 22 #include "net/quic/core/quic_packet_writer.h" |
| 23 #include "net/quic/core/quic_protocol.h" | 23 #include "net/quic/core/quic_protocol.h" |
| 24 #include "net/quic/core/quic_server_session_base.h" | 24 #include "net/quic/core/quic_server_session_base.h" |
| 25 | 25 |
| 26 namespace net { | 26 namespace net { |
| 27 | 27 |
| 28 namespace test { | 28 namespace test { |
| 29 class QuicDispatcherPeer; |
| 29 class QuicTimeWaitListManagerPeer; | 30 class QuicTimeWaitListManagerPeer; |
| 30 } // namespace test | 31 } // namespace test |
| 31 | 32 |
| 32 // Maintains a list of all connection_ids that have been recently closed. A | 33 // Maintains a list of all connection_ids that have been recently closed. A |
| 33 // connection_id lives in this state for time_wait_period_. All packets received | 34 // connection_id lives in this state for time_wait_period_. All packets received |
| 34 // for connection_ids in this state are handed over to the | 35 // for connection_ids in this state are handed over to the |
| 35 // QuicTimeWaitListManager by the QuicDispatcher. Decides whether to send a | 36 // QuicTimeWaitListManager by the QuicDispatcher. Decides whether to send a |
| 36 // public reset packet, a copy of the previously sent connection close packet, | 37 // public reset packet, a copy of the previously sent connection close packet, |
| 37 // or nothing to the client which sent a packet with the connection_id in time | 38 // or nothing to the client which sent a packet with the connection_id in time |
| 38 // wait state. After the connection_id expires its time wait period, a new | 39 // wait state. After the connection_id expires its time wait period, a new |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 QuicConnectionId connection_id, | 107 QuicConnectionId connection_id, |
| 107 const QuicVersionVector& supported_versions, | 108 const QuicVersionVector& supported_versions, |
| 108 const IPEndPoint& server_address, | 109 const IPEndPoint& server_address, |
| 109 const IPEndPoint& client_address); | 110 const IPEndPoint& client_address); |
| 110 | 111 |
| 111 protected: | 112 protected: |
| 112 virtual QuicEncryptedPacket* BuildPublicReset( | 113 virtual QuicEncryptedPacket* BuildPublicReset( |
| 113 const QuicPublicResetPacket& packet); | 114 const QuicPublicResetPacket& packet); |
| 114 | 115 |
| 115 private: | 116 private: |
| 117 friend class test::QuicDispatcherPeer; |
| 116 friend class test::QuicTimeWaitListManagerPeer; | 118 friend class test::QuicTimeWaitListManagerPeer; |
| 117 | 119 |
| 118 // Internal structure to store pending public reset packets. | 120 // Internal structure to store pending public reset packets. |
| 119 class QueuedPacket; | 121 class QueuedPacket; |
| 120 | 122 |
| 121 // Decides if a packet should be sent for this connection_id based on the | 123 // Decides if a packet should be sent for this connection_id based on the |
| 122 // number of received packets. | 124 // number of received packets. |
| 123 bool ShouldSendResponse(int received_packet_count); | 125 bool ShouldSendResponse(int received_packet_count); |
| 124 | 126 |
| 125 // Creates a public reset packet and sends it or queues it to be sent later. | 127 // Creates a public reset packet and sends it or queues it to be sent later. |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 | 197 |
| 196 // Interface that manages blocked writers. | 198 // Interface that manages blocked writers. |
| 197 QuicServerSessionBase::Visitor* visitor_; | 199 QuicServerSessionBase::Visitor* visitor_; |
| 198 | 200 |
| 199 DISALLOW_COPY_AND_ASSIGN(QuicTimeWaitListManager); | 201 DISALLOW_COPY_AND_ASSIGN(QuicTimeWaitListManager); |
| 200 }; | 202 }; |
| 201 | 203 |
| 202 } // namespace net | 204 } // namespace net |
| 203 | 205 |
| 204 #endif // NET_TOOLS_QUIC_QUIC_TIME_WAIT_LIST_MANAGER_H_ | 206 #endif // NET_TOOLS_QUIC_QUIC_TIME_WAIT_LIST_MANAGER_H_ |
| OLD | NEW |