Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(755)

Side by Side Diff: net/tools/quic/stateless_rejector.cc

Issue 2516033003: Landing Recent QUIC changes until Mon Nov 14 04:43:50 2016 +0000 (Closed)
Patch Set: Remove unused UpdatePacketGapSentHistogram() function. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/tools/quic/stateless_rejector.h ('k') | net/tools/quic/stateless_rejector_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/stateless_rejector.h" 5 #include "net/tools/quic/stateless_rejector.h"
6 6
7 #include "net/quic/core/quic_bug_tracker.h" 7 #include "net/quic/core/quic_bug_tracker.h"
8 #include "net/quic/core/quic_crypto_server_stream.h" 8 #include "net/quic/core/quic_crypto_server_stream.h"
9 #include "net/quic/core/quic_flags.h" 9 #include "net/quic/core/quic_flags.h"
10 10
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 version_(version), 48 version_(version),
49 versions_(versions), 49 versions_(versions),
50 connection_id_(0), 50 connection_id_(0),
51 chlo_packet_size_(chlo_packet_size), 51 chlo_packet_size_(chlo_packet_size),
52 client_address_(client_address), 52 client_address_(client_address),
53 server_address_(server_address), 53 server_address_(server_address),
54 clock_(clock), 54 clock_(clock),
55 random_(random), 55 random_(random),
56 crypto_config_(crypto_config), 56 crypto_config_(crypto_config),
57 compressed_certs_cache_(compressed_certs_cache), 57 compressed_certs_cache_(compressed_certs_cache),
58 proof_(new QuicCryptoProof), 58 signed_config_(new QuicSignedServerConfig),
59 params_(new QuicCryptoNegotiatedParameters) {} 59 params_(new QuicCryptoNegotiatedParameters) {}
60 60
61 StatelessRejector::~StatelessRejector() {} 61 StatelessRejector::~StatelessRejector() {}
62 62
63 void StatelessRejector::OnChlo(QuicVersion version, 63 void StatelessRejector::OnChlo(QuicVersion version,
64 QuicConnectionId connection_id, 64 QuicConnectionId connection_id,
65 QuicConnectionId server_designated_connection_id, 65 QuicConnectionId server_designated_connection_id,
66 const CryptoHandshakeMessage& message) { 66 const CryptoHandshakeMessage& message) {
67 DCHECK_EQ(kCHLO, message.tag()); 67 DCHECK_EQ(kCHLO, message.tag());
68 DCHECK_NE(connection_id, server_designated_connection_id); 68 DCHECK_NE(connection_id, server_designated_connection_id);
69 DCHECK_EQ(state_, UNKNOWN); 69 DCHECK_EQ(state_, UNKNOWN);
70 70
71 if (!FLAGS_enable_quic_stateless_reject_support || 71 if (!FLAGS_enable_quic_stateless_reject_support ||
72 !FLAGS_quic_use_cheap_stateless_rejects || 72 !FLAGS_quic_use_cheap_stateless_rejects ||
73 !QuicCryptoServerStream::DoesPeerSupportStatelessRejects(message) || 73 !QuicCryptoServerStream::DoesPeerSupportStatelessRejects(message)) {
74 version <= QUIC_VERSION_32) {
75 state_ = UNSUPPORTED; 74 state_ = UNSUPPORTED;
76 return; 75 return;
77 } 76 }
78 77
79 connection_id_ = connection_id; 78 connection_id_ = connection_id;
80 server_designated_connection_id_ = server_designated_connection_id; 79 server_designated_connection_id_ = server_designated_connection_id;
81 chlo_ = message; // Note: copies the message 80 chlo_ = message; // Note: copies the message
82 } 81 }
83 82
84 void StatelessRejector::Process(std::unique_ptr<StatelessRejector> rejector, 83 void StatelessRejector::Process(std::unique_ptr<StatelessRejector> rejector,
85 std::unique_ptr<ProcessDoneCallback> done_cb) { 84 std::unique_ptr<ProcessDoneCallback> done_cb) {
86 QUIC_BUG_IF(rejector->state() != UNKNOWN) << "StatelessRejector::Process " 85 QUIC_BUG_IF(rejector->state() != UNKNOWN) << "StatelessRejector::Process "
87 "called for a rejector which " 86 "called for a rejector which "
88 "has already made a decision"; 87 "has already made a decision";
89 StatelessRejector* rejector_ptr = rejector.get(); 88 StatelessRejector* rejector_ptr = rejector.get();
90 rejector_ptr->crypto_config_->ValidateClientHello( 89 rejector_ptr->crypto_config_->ValidateClientHello(
91 rejector_ptr->chlo_, rejector_ptr->client_address_.address(), 90 rejector_ptr->chlo_, rejector_ptr->client_address_.address(),
92 rejector_ptr->server_address_.address(), rejector_ptr->version_, 91 rejector_ptr->server_address_.address(), rejector_ptr->version_,
93 rejector_ptr->clock_, rejector_ptr->proof_, 92 rejector_ptr->clock_, rejector_ptr->signed_config_,
94 std::unique_ptr<ValidateCallback>( 93 std::unique_ptr<ValidateCallback>(
95 new ValidateCallback(std::move(rejector), std::move(done_cb)))); 94 new ValidateCallback(std::move(rejector), std::move(done_cb))));
96 } 95 }
97 96
98 class StatelessRejector::ProcessClientHelloCallback 97 class StatelessRejector::ProcessClientHelloCallback
99 : public ProcessClientHelloResultCallback { 98 : public ProcessClientHelloResultCallback {
100 public: 99 public:
101 ProcessClientHelloCallback( 100 ProcessClientHelloCallback(
102 std::unique_ptr<StatelessRejector> rejector, 101 std::unique_ptr<StatelessRejector> rejector,
103 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) 102 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb)
(...skipping 20 matching lines...) Expand all
124 scoped_refptr<ValidateClientHelloResultCallback::Result> result, 123 scoped_refptr<ValidateClientHelloResultCallback::Result> result,
125 std::unique_ptr<StatelessRejector> rejector, 124 std::unique_ptr<StatelessRejector> rejector,
126 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) { 125 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) {
127 std::unique_ptr<ProcessClientHelloCallback> cb( 126 std::unique_ptr<ProcessClientHelloCallback> cb(
128 new ProcessClientHelloCallback(std::move(rejector), std::move(done_cb))); 127 new ProcessClientHelloCallback(std::move(rejector), std::move(done_cb)));
129 crypto_config_->ProcessClientHello( 128 crypto_config_->ProcessClientHello(
130 result, 129 result,
131 /*reject_only=*/true, connection_id_, server_address_.address(), 130 /*reject_only=*/true, connection_id_, server_address_.address(),
132 client_address_, version_, versions_, 131 client_address_, version_, versions_,
133 /*use_stateless_rejects=*/true, server_designated_connection_id_, clock_, 132 /*use_stateless_rejects=*/true, server_designated_connection_id_, clock_,
134 random_, compressed_certs_cache_, params_, proof_, 133 random_, compressed_certs_cache_, params_, signed_config_,
135 QuicCryptoStream::CryptoMessageFramingOverhead(version_), 134 QuicCryptoStream::CryptoMessageFramingOverhead(version_),
136 chlo_packet_size_, std::move(cb)); 135 chlo_packet_size_, std::move(cb));
137 } 136 }
138 137
139 void StatelessRejector::ProcessClientHelloDone( 138 void StatelessRejector::ProcessClientHelloDone(
140 QuicErrorCode error, 139 QuicErrorCode error,
141 const std::string& error_details, 140 const std::string& error_details,
142 std::unique_ptr<CryptoHandshakeMessage> message, 141 std::unique_ptr<CryptoHandshakeMessage> message,
143 std::unique_ptr<StatelessRejector> rejector, 142 std::unique_ptr<StatelessRejector> rejector,
144 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) { 143 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) {
145 reply_ = std::move(message); 144 reply_ = std::move(message);
146 145
147 if (error != QUIC_NO_ERROR) { 146 if (error != QUIC_NO_ERROR) {
148 error_ = error; 147 error_ = error;
149 error_details_ = error_details; 148 error_details_ = error_details;
150 state_ = FAILED; 149 state_ = FAILED;
151 } else if (reply_->tag() == kSREJ) { 150 } else if (reply_->tag() == kSREJ) {
152 state_ = REJECTED; 151 state_ = REJECTED;
153 } else { 152 } else {
154 state_ = ACCEPTED; 153 state_ = ACCEPTED;
155 } 154 }
156 done_cb->Run(std::move(rejector)); 155 done_cb->Run(std::move(rejector));
157 } 156 }
158 157
159 } // namespace net 158 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/stateless_rejector.h ('k') | net/tools/quic/stateless_rejector_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698