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

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

Issue 2353763002: Use refcounted ownership for ValidateClientHelloResultCallback::Result (Closed)
Patch Set: Created 4 years, 3 months 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
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_crypto_server_stream.h" 8 #include "net/quic/core/quic_crypto_server_stream.h"
8 #include "net/quic/core/quic_flags.h" 9 #include "net/quic/core/quic_flags.h"
9 10
10 namespace net { 11 namespace net {
11 12
12 class StatelessRejector::ValidateCallback 13 class StatelessRejector::ValidateCallback
13 : public ValidateClientHelloResultCallback { 14 : public ValidateClientHelloResultCallback {
14 public: 15 public:
15 explicit ValidateCallback( 16 explicit ValidateCallback(
16 std::unique_ptr<StatelessRejector> rejector, 17 std::unique_ptr<StatelessRejector> rejector,
17 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb) 18 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb)
18 : rejector_(std::move(rejector)), cb_(std::move(cb)) {} 19 : rejector_(std::move(rejector)), cb_(std::move(cb)) {}
19 20
20 ~ValidateCallback() override {} 21 ~ValidateCallback() override {}
21 22
22 void Run(std::unique_ptr<Result> result, 23 void Run(scoped_refptr<Result> result,
23 std::unique_ptr<ProofSource::Details> /* proof_source_details */) 24 std::unique_ptr<ProofSource::Details> /* proof_source_details */)
24 override { 25 override {
25 StatelessRejector* rejector_ptr = rejector_.get(); 26 StatelessRejector* rejector_ptr = rejector_.get();
26 rejector_ptr->ProcessClientHello(*result, std::move(rejector_), 27 rejector_ptr->ProcessClientHello(std::move(result), std::move(rejector_),
27 std::move(cb_)); 28 std::move(cb_));
28 } 29 }
29 30
30 private: 31 private:
31 std::unique_ptr<StatelessRejector> rejector_; 32 std::unique_ptr<StatelessRejector> rejector_;
32 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb_; 33 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb_;
33 }; 34 };
34 35
35 StatelessRejector::StatelessRejector( 36 StatelessRejector::StatelessRejector(
36 QuicVersion version, 37 QuicVersion version,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 state_ = UNSUPPORTED; 73 state_ = UNSUPPORTED;
73 return; 74 return;
74 } 75 }
75 76
76 connection_id_ = connection_id; 77 connection_id_ = connection_id;
77 server_designated_connection_id_ = server_designated_connection_id; 78 server_designated_connection_id_ = server_designated_connection_id;
78 chlo_ = message; // Note: copies the message 79 chlo_ = message; // Note: copies the message
79 } 80 }
80 81
81 void StatelessRejector::Process(std::unique_ptr<StatelessRejector> rejector, 82 void StatelessRejector::Process(std::unique_ptr<StatelessRejector> rejector,
82 std::unique_ptr<ProcessDoneCallback> cb) { 83 std::unique_ptr<ProcessDoneCallback> done_cb) {
83 // If we were able to make a decision about this CHLO based purely on the 84 // If we were able to make a decision about this CHLO based purely on the
84 // information available in OnChlo, just invoke the done callback immediately. 85 // information available in OnChlo, just invoke the done callback immediately.
85 if (rejector->state() != UNKNOWN) { 86 if (rejector->state() != UNKNOWN) {
86 cb->Run(std::move(rejector)); 87 done_cb->Run(std::move(rejector));
87 return; 88 return;
88 } 89 }
89 90
90 StatelessRejector* rejector_ptr = rejector.get(); 91 StatelessRejector* rejector_ptr = rejector.get();
91 rejector_ptr->crypto_config_->ValidateClientHello( 92 rejector_ptr->crypto_config_->ValidateClientHello(
92 rejector_ptr->chlo_, rejector_ptr->client_address_.address(), 93 rejector_ptr->chlo_, rejector_ptr->client_address_.address(),
93 rejector_ptr->server_address_.address(), rejector_ptr->version_, 94 rejector_ptr->server_address_.address(), rejector_ptr->version_,
94 rejector_ptr->clock_, &rejector_ptr->proof_, 95 rejector_ptr->clock_, &rejector_ptr->proof_,
95 std::unique_ptr<ValidateCallback>( 96 std::unique_ptr<ValidateCallback>(
96 new ValidateCallback(std::move(rejector), std::move(cb)))); 97 new ValidateCallback(std::move(rejector), std::move(done_cb))));
97 } 98 }
98 99
99 void StatelessRejector::ProcessClientHello( 100 void StatelessRejector::ProcessClientHello(
100 const ValidateClientHelloResultCallback::Result& result, 101 scoped_refptr<ValidateClientHelloResultCallback::Result> result,
101 std::unique_ptr<StatelessRejector> rejector, 102 std::unique_ptr<StatelessRejector> rejector,
102 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb) { 103 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) {
103 QuicCryptoNegotiatedParameters params; 104 QuicCryptoNegotiatedParameters params;
104 DiversificationNonce diversification_nonce; 105 DiversificationNonce diversification_nonce;
105 QuicErrorCode error = crypto_config_->ProcessClientHello( 106 QuicErrorCode error = crypto_config_->ProcessClientHello(
106 result, 107 result,
107 /*reject_only=*/true, connection_id_, server_address_.address(), 108 /*reject_only=*/true, connection_id_, server_address_.address(),
108 client_address_, version_, versions_, 109 client_address_, version_, versions_,
109 /*use_stateless_rejects=*/true, server_designated_connection_id_, clock_, 110 /*use_stateless_rejects=*/true, server_designated_connection_id_, clock_,
110 random_, compressed_certs_cache_, &params, &proof_, 111 random_, compressed_certs_cache_, &params, &proof_,
111 QuicCryptoStream::CryptoMessageFramingOverhead(version_), 112 QuicCryptoStream::CryptoMessageFramingOverhead(version_),
112 chlo_packet_size_, &reply_, &diversification_nonce, &error_details_); 113 chlo_packet_size_, &reply_, &diversification_nonce, &error_details_);
113 if (error != QUIC_NO_ERROR) { 114 if (error != QUIC_NO_ERROR) {
114 error_ = error; 115 error_ = error;
115 state_ = FAILED; 116 state_ = FAILED;
116 } else if (reply_.tag() == kSREJ) { 117 } else if (reply_.tag() == kSREJ) {
117 state_ = REJECTED; 118 state_ = REJECTED;
118 } else { 119 } else {
119 state_ = ACCEPTED; 120 state_ = ACCEPTED;
120 } 121 }
121 cb->Run(std::move(rejector)); 122 done_cb->Run(std::move(rejector));
122 } 123 }
123 124
124 } // namespace net 125 } // namespace net
OLDNEW
« net/quic/core/crypto/quic_crypto_server_config.cc ('K') | « net/tools/quic/stateless_rejector.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698