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

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

Issue 2453113002: Fix object-lifetime issues in async GetProof callpaths (Closed)
Patch Set: Updated patchset dependency 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') | no next file » | 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 error_(QUIC_INTERNAL_ERROR), 47 error_(QUIC_INTERNAL_ERROR),
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),
59 params_(new QuicCryptoNegotiatedParameters) {}
58 60
59 StatelessRejector::~StatelessRejector() {} 61 StatelessRejector::~StatelessRejector() {}
60 62
61 void StatelessRejector::OnChlo(QuicVersion version, 63 void StatelessRejector::OnChlo(QuicVersion version,
62 QuicConnectionId connection_id, 64 QuicConnectionId connection_id,
63 QuicConnectionId server_designated_connection_id, 65 QuicConnectionId server_designated_connection_id,
64 const CryptoHandshakeMessage& message) { 66 const CryptoHandshakeMessage& message) {
65 DCHECK_EQ(kCHLO, message.tag()); 67 DCHECK_EQ(kCHLO, message.tag());
66 DCHECK_NE(connection_id, server_designated_connection_id); 68 DCHECK_NE(connection_id, server_designated_connection_id);
67 DCHECK_EQ(state_, UNKNOWN); 69 DCHECK_EQ(state_, UNKNOWN);
(...skipping 13 matching lines...) Expand all
81 83
82 void StatelessRejector::Process(std::unique_ptr<StatelessRejector> rejector, 84 void StatelessRejector::Process(std::unique_ptr<StatelessRejector> rejector,
83 std::unique_ptr<ProcessDoneCallback> done_cb) { 85 std::unique_ptr<ProcessDoneCallback> done_cb) {
84 QUIC_BUG_IF(rejector->state() != UNKNOWN) << "StatelessRejector::Process " 86 QUIC_BUG_IF(rejector->state() != UNKNOWN) << "StatelessRejector::Process "
85 "called for a rejector which " 87 "called for a rejector which "
86 "has already made a decision"; 88 "has already made a decision";
87 StatelessRejector* rejector_ptr = rejector.get(); 89 StatelessRejector* rejector_ptr = rejector.get();
88 rejector_ptr->crypto_config_->ValidateClientHello( 90 rejector_ptr->crypto_config_->ValidateClientHello(
89 rejector_ptr->chlo_, rejector_ptr->client_address_.address(), 91 rejector_ptr->chlo_, rejector_ptr->client_address_.address(),
90 rejector_ptr->server_address_.address(), rejector_ptr->version_, 92 rejector_ptr->server_address_.address(), rejector_ptr->version_,
91 rejector_ptr->clock_, &rejector_ptr->proof_, 93 rejector_ptr->clock_, rejector_ptr->proof_,
92 std::unique_ptr<ValidateCallback>( 94 std::unique_ptr<ValidateCallback>(
93 new ValidateCallback(std::move(rejector), std::move(done_cb)))); 95 new ValidateCallback(std::move(rejector), std::move(done_cb))));
94 } 96 }
95 97
96 class StatelessRejector::ProcessClientHelloCallback 98 class StatelessRejector::ProcessClientHelloCallback
97 : public ProcessClientHelloResultCallback { 99 : public ProcessClientHelloResultCallback {
98 public: 100 public:
99 ProcessClientHelloCallback( 101 ProcessClientHelloCallback(
100 std::unique_ptr<StatelessRejector> rejector, 102 std::unique_ptr<StatelessRejector> rejector,
101 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) 103 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb)
(...skipping 19 matching lines...) Expand all
121 scoped_refptr<ValidateClientHelloResultCallback::Result> result, 123 scoped_refptr<ValidateClientHelloResultCallback::Result> result,
122 std::unique_ptr<StatelessRejector> rejector, 124 std::unique_ptr<StatelessRejector> rejector,
123 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) { 125 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) {
124 std::unique_ptr<ProcessClientHelloCallback> cb( 126 std::unique_ptr<ProcessClientHelloCallback> cb(
125 new ProcessClientHelloCallback(std::move(rejector), std::move(done_cb))); 127 new ProcessClientHelloCallback(std::move(rejector), std::move(done_cb)));
126 crypto_config_->ProcessClientHello( 128 crypto_config_->ProcessClientHello(
127 result, 129 result,
128 /*reject_only=*/true, connection_id_, server_address_.address(), 130 /*reject_only=*/true, connection_id_, server_address_.address(),
129 client_address_, version_, versions_, 131 client_address_, version_, versions_,
130 /*use_stateless_rejects=*/true, server_designated_connection_id_, clock_, 132 /*use_stateless_rejects=*/true, server_designated_connection_id_, clock_,
131 random_, compressed_certs_cache_, &params_, &proof_, 133 random_, compressed_certs_cache_, params_, proof_,
132 QuicCryptoStream::CryptoMessageFramingOverhead(version_), 134 QuicCryptoStream::CryptoMessageFramingOverhead(version_),
133 chlo_packet_size_, std::move(cb)); 135 chlo_packet_size_, std::move(cb));
134 } 136 }
135 137
136 void StatelessRejector::ProcessClientHelloDone( 138 void StatelessRejector::ProcessClientHelloDone(
137 QuicErrorCode error, 139 QuicErrorCode error,
138 const std::string& error_details, 140 const std::string& error_details,
139 std::unique_ptr<CryptoHandshakeMessage> message, 141 std::unique_ptr<CryptoHandshakeMessage> message,
140 std::unique_ptr<StatelessRejector> rejector, 142 std::unique_ptr<StatelessRejector> rejector,
141 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) { 143 std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) {
142 reply_ = std::move(message); 144 reply_ = std::move(message);
143 145
144 if (error != QUIC_NO_ERROR) { 146 if (error != QUIC_NO_ERROR) {
145 error_ = error; 147 error_ = error;
146 error_details_ = error_details; 148 error_details_ = error_details;
147 state_ = FAILED; 149 state_ = FAILED;
148 } else if (reply_->tag() == kSREJ) { 150 } else if (reply_->tag() == kSREJ) {
149 state_ = REJECTED; 151 state_ = REJECTED;
150 } else { 152 } else {
151 state_ = ACCEPTED; 153 state_ = ACCEPTED;
152 } 154 }
153 done_cb->Run(std::move(rejector)); 155 done_cb->Run(std::move(rejector));
154 } 156 }
155 157
156 } // namespace net 158 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/stateless_rejector.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698