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/quic/quic_crypto_server_stream.h" | 5 #include "net/quic/quic_crypto_server_stream.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "crypto/secure_hash.h" | 8 #include "crypto/secure_hash.h" |
9 #include "net/quic/crypto/crypto_protocol.h" | 9 #include "net/quic/crypto/crypto_protocol.h" |
10 #include "net/quic/crypto/crypto_utils.h" | 10 #include "net/quic/crypto/crypto_utils.h" |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 string error_details; | 101 string error_details; |
102 QuicErrorCode error = | 102 QuicErrorCode error = |
103 ProcessClientHello(message, result, &reply, &error_details); | 103 ProcessClientHello(message, result, &reply, &error_details); |
104 | 104 |
105 if (error != QUIC_NO_ERROR) { | 105 if (error != QUIC_NO_ERROR) { |
106 CloseConnectionWithDetails(error, error_details); | 106 CloseConnectionWithDetails(error, error_details); |
107 return; | 107 return; |
108 } | 108 } |
109 | 109 |
110 if (reply.tag() != kSHLO) { | 110 if (reply.tag() != kSHLO) { |
| 111 if (FLAGS_enable_quic_stateless_reject_support && |
| 112 reply.tag() == kSREJ) { |
| 113 // Before sending the SREJ, cause the connection to save crypto packets |
| 114 // so that they can be added to the time wait list manager and |
| 115 // retransmitted. |
| 116 session()->connection()->EnableSavingCryptoPackets(); |
| 117 } |
111 SendHandshakeMessage(reply); | 118 SendHandshakeMessage(reply); |
112 | 119 |
113 if (FLAGS_enable_quic_stateless_reject_support && reply.tag() == kSREJ) { | 120 if (FLAGS_enable_quic_stateless_reject_support && reply.tag() == kSREJ) { |
114 DCHECK(use_stateless_rejects_if_peer_supported()); | 121 DCHECK(use_stateless_rejects_if_peer_supported()); |
115 DCHECK(peer_supports_stateless_rejects()); | 122 DCHECK(peer_supports_stateless_rejects()); |
116 DCHECK(!handshake_confirmed()); | 123 DCHECK(!handshake_confirmed()); |
117 DVLOG(1) << "Closing connection " | 124 DVLOG(1) << "Closing connection " |
118 << session()->connection()->connection_id() | 125 << session()->connection()->connection_id() |
119 << " because of a stateless reject."; | 126 << " because of a stateless reject."; |
120 session()->connection()->CloseConnection( | 127 session()->connection()->CloseConnection( |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 } | 319 } |
313 for (size_t i = 0; i < received_tags_length; ++i) { | 320 for (size_t i = 0; i < received_tags_length; ++i) { |
314 if (received_tags[i] == kSREJ) { | 321 if (received_tags[i] == kSREJ) { |
315 return true; | 322 return true; |
316 } | 323 } |
317 } | 324 } |
318 return false; | 325 return false; |
319 } | 326 } |
320 | 327 |
321 } // namespace net | 328 } // namespace net |
OLD | NEW |