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_;