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

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

Issue 2339433004: Use unique_ptrs to manage callback lifetimes in some QUIC code (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_crypto_server_stream.h" 7 #include "net/quic/core/quic_crypto_server_stream.h"
8 #include "net/quic/core/quic_flags.h" 8 #include "net/quic/core/quic_flags.h"
9 9
10 namespace net { 10 namespace net {
11 11
12 class StatelessRejector::ValidateCallback 12 class StatelessRejector::ValidateCallback
13 : public ValidateClientHelloResultCallback { 13 : public ValidateClientHelloResultCallback {
14 public: 14 public:
15 explicit ValidateCallback( 15 explicit ValidateCallback(
16 std::unique_ptr<StatelessRejector> rejector, 16 std::unique_ptr<StatelessRejector> rejector,
17 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb) 17 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb)
18 : rejector_(std::move(rejector)), cb_(std::move(cb)) {} 18 : rejector_(std::move(rejector)), cb_(std::move(cb)) {}
19 19
20 ~ValidateCallback() override {} 20 ~ValidateCallback() override {}
21 21
22 void RunImpl(std::unique_ptr<Result> result, 22 void Run(std::unique_ptr<Result> result,
23 std::unique_ptr<ProofSource::Details> /* proof_source_details */) 23 std::unique_ptr<ProofSource::Details> /* proof_source_details */)
24 override { 24 override {
25 StatelessRejector* rejector_ptr = rejector_.get(); 25 StatelessRejector* rejector_ptr = rejector_.get();
26 rejector_ptr->ProcessClientHello(*result, std::move(rejector_), 26 rejector_ptr->ProcessClientHello(*result, std::move(rejector_),
27 std::move(cb_)); 27 std::move(cb_));
28 } 28 }
29 29
30 private: 30 private:
31 std::unique_ptr<StatelessRejector> rejector_; 31 std::unique_ptr<StatelessRejector> rejector_;
32 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb_; 32 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb_;
33 }; 33 };
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 if (rejector->state() != UNKNOWN) { 85 if (rejector->state() != UNKNOWN) {
86 cb->Run(std::move(rejector)); 86 cb->Run(std::move(rejector));
87 return; 87 return;
88 } 88 }
89 89
90 StatelessRejector* rejector_ptr = rejector.get(); 90 StatelessRejector* rejector_ptr = rejector.get();
91 rejector_ptr->crypto_config_->ValidateClientHello( 91 rejector_ptr->crypto_config_->ValidateClientHello(
92 rejector_ptr->chlo_, rejector_ptr->client_address_.address(), 92 rejector_ptr->chlo_, rejector_ptr->client_address_.address(),
93 rejector_ptr->server_address_.address(), rejector_ptr->version_, 93 rejector_ptr->server_address_.address(), rejector_ptr->version_,
94 rejector_ptr->clock_, &rejector_ptr->proof_, 94 rejector_ptr->clock_, &rejector_ptr->proof_,
95 new ValidateCallback(std::move(rejector), std::move(cb))); 95 std::unique_ptr<ValidateCallback>(
96 new ValidateCallback(std::move(rejector), std::move(cb))));
96 } 97 }
97 98
98 void StatelessRejector::ProcessClientHello( 99 void StatelessRejector::ProcessClientHello(
99 const ValidateClientHelloResultCallback::Result& result, 100 const ValidateClientHelloResultCallback::Result& result,
100 std::unique_ptr<StatelessRejector> rejector, 101 std::unique_ptr<StatelessRejector> rejector,
101 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb) { 102 std::unique_ptr<StatelessRejector::ProcessDoneCallback> cb) {
102 QuicCryptoNegotiatedParameters params; 103 QuicCryptoNegotiatedParameters params;
103 DiversificationNonce diversification_nonce; 104 DiversificationNonce diversification_nonce;
104 QuicErrorCode error = crypto_config_->ProcessClientHello( 105 QuicErrorCode error = crypto_config_->ProcessClientHello(
105 result, 106 result,
106 /*reject_only=*/true, connection_id_, server_address_.address(), 107 /*reject_only=*/true, connection_id_, server_address_.address(),
107 client_address_, version_, versions_, 108 client_address_, version_, versions_,
108 /*use_stateless_rejects=*/true, server_designated_connection_id_, clock_, 109 /*use_stateless_rejects=*/true, server_designated_connection_id_, clock_,
109 random_, compressed_certs_cache_, &params, &proof_, 110 random_, compressed_certs_cache_, &params, &proof_,
110 QuicCryptoStream::CryptoMessageFramingOverhead(version_), 111 QuicCryptoStream::CryptoMessageFramingOverhead(version_),
111 chlo_packet_size_, &reply_, &diversification_nonce, &error_details_); 112 chlo_packet_size_, &reply_, &diversification_nonce, &error_details_);
112 if (error != QUIC_NO_ERROR) { 113 if (error != QUIC_NO_ERROR) {
113 error_ = error; 114 error_ = error;
114 state_ = FAILED; 115 state_ = FAILED;
115 } else if (reply_.tag() == kSREJ) { 116 } else if (reply_.tag() == kSREJ) {
116 state_ = REJECTED; 117 state_ = REJECTED;
117 } else { 118 } else {
118 state_ = ACCEPTED; 119 state_ = ACCEPTED;
119 } 120 }
120 cb->Run(std::move(rejector)); 121 cb->Run(std::move(rejector));
121 } 122 }
122 123
123 } // namespace net 124 } // namespace net
OLDNEW
« net/quic/core/crypto/crypto_server_test.cc ('K') | « net/quic/test_tools/crypto_test_utils_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698