| 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_ |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 | 82 |
| 83 // Called by the dispatcher when the underlying socket becomes writable again, | 83 // Called by the dispatcher when the underlying socket becomes writable again, |
| 84 // since we might need to send pending public reset packets which we didn't | 84 // since we might need to send pending public reset packets which we didn't |
| 85 // send because the underlying socket was write blocked. | 85 // send because the underlying socket was write blocked. |
| 86 void OnCanWrite() override; | 86 void OnCanWrite() override; |
| 87 | 87 |
| 88 // Used to delete connection_id entries that have outlived their time wait | 88 // Used to delete connection_id entries that have outlived their time wait |
| 89 // period. | 89 // period. |
| 90 void CleanUpOldConnectionIds(); | 90 void CleanUpOldConnectionIds(); |
| 91 | 91 |
| 92 // If necessary, trims the oldest connections from the time-wait list until |
| 93 // the size is under the configured maximum. |
| 94 void TrimTimeWaitListIfNeeded(); |
| 95 |
| 92 // Given a ConnectionId that exists in the time wait list, returns the | 96 // Given a ConnectionId that exists in the time wait list, returns the |
| 93 // QuicVersion associated with it. | 97 // QuicVersion associated with it. |
| 94 QuicVersion GetQuicVersionFromConnectionId(QuicConnectionId connection_id); | 98 QuicVersion GetQuicVersionFromConnectionId(QuicConnectionId connection_id); |
| 95 | 99 |
| 96 // The number of connections on the time-wait list. | 100 // The number of connections on the time-wait list. |
| 97 size_t num_connections() const { return connection_id_map_.size(); } | 101 size_t num_connections() const { return connection_id_map_.size(); } |
| 98 | 102 |
| 99 protected: | 103 protected: |
| 100 virtual QuicEncryptedPacket* BuildPublicReset( | 104 virtual QuicEncryptedPacket* BuildPublicReset( |
| 101 const QuicPublicResetPacket& packet); | 105 const QuicPublicResetPacket& packet); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 122 | 126 |
| 123 // Sends the packet out. Returns true if the packet was successfully consumed. | 127 // Sends the packet out. Returns true if the packet was successfully consumed. |
| 124 // If the writer got blocked and did not buffer the packet, we'll need to keep | 128 // If the writer got blocked and did not buffer the packet, we'll need to keep |
| 125 // the packet and retry sending. In case of all other errors we drop the | 129 // the packet and retry sending. In case of all other errors we drop the |
| 126 // packet. | 130 // packet. |
| 127 bool WriteToWire(QueuedPacket* packet); | 131 bool WriteToWire(QueuedPacket* packet); |
| 128 | 132 |
| 129 // Register the alarm with the epoll server to wake up at appropriate time. | 133 // Register the alarm with the epoll server to wake up at appropriate time. |
| 130 void SetConnectionIdCleanUpAlarm(); | 134 void SetConnectionIdCleanUpAlarm(); |
| 131 | 135 |
| 136 // Removes the oldest connection from the time-wait list if it was added prior |
| 137 // to "expiration_time". To unconditionally remove the oldest connection, use |
| 138 // a QuicTime::Delta:Infinity(). This function modifies the |
| 139 // connection_id_map_. If you plan to call this function in a loop, any |
| 140 // iterators that you hold before the call to this function may be invalid |
| 141 // afterward. Returns true if the oldest connection was expired. Returns |
| 142 // false if the map is empty or the oldest connection has not expired. |
| 143 bool MaybeExpireOldestConnection(QuicTime expiration_time); |
| 144 |
| 132 // A map from a recently closed connection_id to the number of packets | 145 // A map from a recently closed connection_id to the number of packets |
| 133 // received after the termination of the connection bound to the | 146 // received after the termination of the connection bound to the |
| 134 // connection_id. | 147 // connection_id. |
| 135 struct ConnectionIdData { | 148 struct ConnectionIdData { |
| 136 ConnectionIdData(int num_packets_, | 149 ConnectionIdData(int num_packets_, |
| 137 QuicVersion version_, | 150 QuicVersion version_, |
| 138 QuicTime time_added_, | 151 QuicTime time_added_, |
| 139 QuicEncryptedPacket* close_packet) | 152 QuicEncryptedPacket* close_packet) |
| 140 : num_packets(num_packets_), | 153 : num_packets(num_packets_), |
| 141 version(version_), | 154 version(version_), |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 // Interface that manages blocked writers. | 188 // Interface that manages blocked writers. |
| 176 QuicServerSessionVisitor* visitor_; | 189 QuicServerSessionVisitor* visitor_; |
| 177 | 190 |
| 178 DISALLOW_COPY_AND_ASSIGN(QuicTimeWaitListManager); | 191 DISALLOW_COPY_AND_ASSIGN(QuicTimeWaitListManager); |
| 179 }; | 192 }; |
| 180 | 193 |
| 181 } // namespace tools | 194 } // namespace tools |
| 182 } // namespace net | 195 } // namespace net |
| 183 | 196 |
| 184 #endif // NET_TOOLS_QUIC_QUIC_TIME_WAIT_LIST_MANAGER_H_ | 197 #endif // NET_TOOLS_QUIC_QUIC_TIME_WAIT_LIST_MANAGER_H_ |
| OLD | NEW |