Index: net/tools/quic/stateless_rejector.cc |
diff --git a/net/tools/quic/stateless_rejector.cc b/net/tools/quic/stateless_rejector.cc |
index 1e121eb065b6559152cf9a7229d7bbe305e6dfb9..6cf95304d90aa96d4d14cb383a8d7a352fd85b4a 100644 |
--- a/net/tools/quic/stateless_rejector.cc |
+++ b/net/tools/quic/stateless_rejector.cc |
@@ -97,24 +97,59 @@ void StatelessRejector::Process(std::unique_ptr<StatelessRejector> rejector, |
new ValidateCallback(std::move(rejector), std::move(done_cb)))); |
} |
+class StatelessRejector::ProcessClientHelloCallback |
+ : public ProcessClientHelloResultCallback { |
+ public: |
+ ProcessClientHelloCallback( |
+ std::unique_ptr<StatelessRejector> rejector, |
+ std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) |
+ : rejector_(std::move(rejector)), done_cb_(std::move(done_cb)) {} |
+ |
+ void Run( |
+ QuicErrorCode error, |
+ const std::string& error_details, |
+ std::unique_ptr<CryptoHandshakeMessage> message, |
+ std::unique_ptr<DiversificationNonce> diversification_nonce) override { |
+ StatelessRejector* rejector_ptr = rejector_.get(); |
+ rejector_ptr->ProcessClientHelloDone( |
+ error, error_details, std::move(message), std::move(rejector_), |
+ std::move(done_cb_)); |
+ } |
+ |
+ private: |
+ std::unique_ptr<StatelessRejector> rejector_; |
+ std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb_; |
+}; |
+ |
void StatelessRejector::ProcessClientHello( |
scoped_refptr<ValidateClientHelloResultCallback::Result> result, |
std::unique_ptr<StatelessRejector> rejector, |
std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) { |
- QuicCryptoNegotiatedParameters params; |
- DiversificationNonce diversification_nonce; |
- QuicErrorCode error = crypto_config_->ProcessClientHello( |
+ std::unique_ptr<ProcessClientHelloCallback> cb( |
+ new ProcessClientHelloCallback(std::move(rejector), std::move(done_cb))); |
+ crypto_config_->ProcessClientHello( |
result, |
/*reject_only=*/true, connection_id_, server_address_.address(), |
client_address_, version_, versions_, |
/*use_stateless_rejects=*/true, server_designated_connection_id_, clock_, |
- random_, compressed_certs_cache_, ¶ms, &proof_, |
+ random_, compressed_certs_cache_, ¶ms_, &proof_, |
QuicCryptoStream::CryptoMessageFramingOverhead(version_), |
- chlo_packet_size_, &reply_, &diversification_nonce, &error_details_); |
+ chlo_packet_size_, std::move(cb)); |
+} |
+ |
+void StatelessRejector::ProcessClientHelloDone( |
+ QuicErrorCode error, |
+ const std::string& error_details, |
+ std::unique_ptr<CryptoHandshakeMessage> message, |
+ std::unique_ptr<StatelessRejector> rejector, |
+ std::unique_ptr<StatelessRejector::ProcessDoneCallback> done_cb) { |
+ reply_ = std::move(message); |
+ |
if (error != QUIC_NO_ERROR) { |
error_ = error; |
+ error_details_ = error_details; |
state_ = FAILED; |
- } else if (reply_.tag() == kSREJ) { |
+ } else if (reply_->tag() == kSREJ) { |
state_ = REJECTED; |
} else { |
state_ = ACCEPTED; |