ConnectionIdGenerator that uses QUIC-LB or HASH_QUIC depending on config. PiperOrigin-RevId: 473810279
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.cc b/quiche/quic/load_balancer/load_balancer_encoder.cc index 6cc8e0e..914b890 100644 --- a/quiche/quic/load_balancer/load_balancer_encoder.cc +++ b/quiche/quic/load_balancer/load_balancer_encoder.cc
@@ -178,8 +178,9 @@ const QuicConnectionId &original, const ParsedQuicVersion &version) { // Pre-IETF versions of QUIC can respond poorly to new connection IDs issued // during the handshake. - return (!version.HasIetfQuicFrames() && - original.length() == CurrentConnectionIdLength()) + uint8_t needed_length = config_.has_value() ? config_->total_len() + : unroutable_connection_id_len_; + return (!version.HasIetfQuicFrames() && original.length() == needed_length) ? absl::optional<QuicConnectionId>() : GenerateConnectionId(); }
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.h b/quiche/quic/load_balancer/load_balancer_encoder.h index 589c347..7594262 100644 --- a/quiche/quic/load_balancer/load_balancer_encoder.h +++ b/quiche/quic/load_balancer/load_balancer_encoder.h
@@ -84,12 +84,14 @@ // the current config, or 0 if there is no current config. absl::uint128 num_nonces_left() const { return num_nonces_left_; } + // Functions below are declared virtual to enable mocking. // Returns true if there is an active configuration. - bool IsEncoding() const { return config_.has_value(); } + virtual bool IsEncoding() const { return config_.has_value(); } // Returns true if there is an active configuration that uses encryption. - bool IsEncrypted() const { + virtual bool IsEncrypted() const { return config_.has_value() && config_->IsEncrypted(); } + virtual bool len_self_encoded() const { return len_self_encoded_; } // If there's an active config, generates a connection ID using it. If not, // generates an unroutable connection_id. If there's an error, returns a zero- @@ -103,9 +105,7 @@ const QuicConnectionId& original, const ParsedQuicVersion& version) override; - private: - friend class test::LoadBalancerEncoderPeer; - + protected: LoadBalancerEncoder(QuicRandom& random, LoadBalancerEncoderVisitorInterface* const visitor, const bool len_self_encoded, @@ -115,11 +115,10 @@ visitor_(visitor), unroutable_connection_id_len_(unroutable_connection_id_len) {} - QuicConnectionId MakeUnroutableConnectionId(uint8_t first_byte); + private: + friend class test::LoadBalancerEncoderPeer; - uint8_t CurrentConnectionIdLength() const { - return IsEncoding() ? config_->total_len() : unroutable_connection_id_len_; - } + QuicConnectionId MakeUnroutableConnectionId(uint8_t first_byte); QuicRandom& random_; const bool len_self_encoded_;