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

Unified Diff: net/quic/core/crypto/quic_crypto_server_config.h

Issue 2397513002: Conversion of a QUIC method to an async signature and resulting fallout. No functional change inten… (Closed)
Patch Set: Add NET_EXPORT_PRIVATE Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/core/crypto/crypto_server_test.cc ('k') | net/quic/core/crypto/quic_crypto_server_config.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/core/crypto/quic_crypto_server_config.h
diff --git a/net/quic/core/crypto/quic_crypto_server_config.h b/net/quic/core/crypto/quic_crypto_server_config.h
index 12316b1b34e7649c97daf98f1504ce5335080a18..e01bb3afc9a39baa7fda26f665726e7781fca424 100644
--- a/net/quic/core/crypto/quic_crypto_server_config.h
+++ b/net/quic/core/crypto/quic_crypto_server_config.h
@@ -116,6 +116,21 @@ class NET_EXPORT_PRIVATE ValidateClientHelloResultCallback {
DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloResultCallback);
};
+// Callback used to accept the result of the ProcessClientHello method.
+class NET_EXPORT_PRIVATE ProcessClientHelloResultCallback {
+ public:
+ ProcessClientHelloResultCallback();
+ virtual ~ProcessClientHelloResultCallback();
+ virtual void Run(
+ QuicErrorCode error,
+ const std::string& error_details,
+ std::unique_ptr<CryptoHandshakeMessage> message,
+ std::unique_ptr<DiversificationNonce> diversification_nonce) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ProcessClientHelloResultCallback);
+};
+
// Callback used to receive the results of a call to
// BuildServerConfigUpdateMessage.
class BuildServerConfigUpdateMessageResultCallback {
@@ -233,10 +248,10 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
// Get the server config ids for all known configs.
void GetConfigIds(std::vector<std::string>* scids) const;
- // Checks |client_hello| for gross errors and determines whether it
- // can be shown to be fresh (i.e. not a replay). The result of the
- // validation step must be interpreted by calling
- // QuicCryptoServerConfig::ProcessClientHello from the done_cb.
+ // Checks |client_hello| for gross errors and determines whether it can be
+ // shown to be fresh (i.e. not a replay). The result of the validation step
+ // must be interpreted by calling QuicCryptoServerConfig::ProcessClientHello
+ // from the done_cb.
//
// ValidateClientHello may invoke the done_cb before unrolling the
// stack if it is able to assess the validity of the client_nonce
@@ -249,8 +264,9 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
// certificate selection.
// version: protocol version used for this connection.
// clock: used to validate client nonces and ephemeral keys.
- // crypto_proof: output structure containing the crypto proof used in reply to
- // a proof demand.
+ // crypto_proof: in/out parameter to which will be written the crypto proof
+ // used in reply to a proof demand. The pointed-to-object must
+ // live until the callback is invoked.
// done_cb: single-use callback that accepts an opaque
// ValidatedClientHelloMsg token that holds information about
// the client hello. The callback will always be called exactly
@@ -266,10 +282,9 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const;
// ProcessClientHello processes |client_hello| and decides whether to accept
- // or reject the connection. If the connection is to be accepted, |out| is
- // set to the contents of the ServerHello, |out_params| is completed and
- // QUIC_NO_ERROR is returned. Otherwise |out| is set to be a REJ or SREJ
- // message and QUIC_NO_ERROR is returned.
+ // or reject the connection. If the connection is to be accepted, |done_cb| is
+ // invoked with the contents of the ServerHello and QUIC_NO_ERROR. Otherwise
+ // |done_cb| is called with a REJ or SREJ message and QUIC_NO_ERROR.
//
// validate_chlo_result: Output from the asynchronous call to
// ValidateClientHello. Contains the client hello message and
@@ -289,19 +304,13 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
// compressed_certs_cache: the cache that caches a set of most recently used
// certs. Owned by QuicDispatcher.
// params: the state of the handshake. This may be updated with a server
- // nonce when we send a rejection. After a successful handshake, this will
- // contain the state of the connection.
+ // nonce when we send a rejection.
// crypto_proof: output structure containing the crypto proof used in reply to
// a proof demand.
// total_framing_overhead: the total per-packet overhead for a stream frame
// chlo_packet_size: the size, in bytes, of the CHLO packet
- // out: the resulting handshake message (either REJ or SHLO)
- // out_diversification_nonce: If the resulting handshake message is SHLO and
- // the version is greater than QUIC_VERSION_32 then this contains a
- // 32-byte value that should be included in the public header of
- // initially encrypted packets.
- // error_details: used to store a std::string describing any error.
- QuicErrorCode ProcessClientHello(
+ // done_cb: the callback invoked on completion
+ void ProcessClientHello(
scoped_refptr<ValidateClientHelloResultCallback::Result>
validate_chlo_result,
bool reject_only,
@@ -319,9 +328,7 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
QuicCryptoProof* crypto_proof,
QuicByteCount total_framing_overhead,
QuicByteCount chlo_packet_size,
- CryptoHandshakeMessage* out,
- DiversificationNonce* out_diversification_nonce,
- std::string* error_details) const;
+ std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const;
// BuildServerConfigUpdateMessage sets |out| to be a SCUP message containing
// the current primary config, an up to date source-address token, and cert
@@ -570,6 +577,27 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
client_hello_state,
std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const;
+ // Portion of ProcessClientHello which executes after GetProof.
+ void ProcessClientHelloAfterGetProof(
+ const ValidateClientHelloResultCallback::Result& validate_chlo_result,
+ bool reject_only,
+ QuicConnectionId connection_id,
+ const IPEndPoint& client_address,
+ QuicVersion version,
+ const QuicVersionVector& supported_versions,
+ bool use_stateless_rejects,
+ QuicConnectionId server_designated_connection_id,
+ const QuicClock* clock,
+ QuicRandom* rand,
+ QuicCompressedCertsCache* compressed_certs_cache,
+ QuicCryptoNegotiatedParameters* params,
+ QuicCryptoProof* crypto_proof,
+ QuicByteCount total_framing_overhead,
+ QuicByteCount chlo_packet_size,
+ const scoped_refptr<Config>& requested_config,
+ const scoped_refptr<Config>& primary_config,
+ std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const;
+
// BuildRejection sets |out| to be a REJ message in reply to |client_hello|.
void BuildRejection(QuicVersion version,
QuicWallTime now,
« no previous file with comments | « net/quic/core/crypto/crypto_server_test.cc ('k') | net/quic/core/crypto/quic_crypto_server_config.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698