diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h
index ece0b29..869409b 100644
--- a/quiche/quic/core/quic_connection.h
+++ b/quiche/quic/core/quic_connection.h
@@ -1636,9 +1636,6 @@
   const char* ValidateStopWaitingFrame(
       const QuicStopWaitingFrame& stop_waiting);
 
-  // Sends a version negotiation packet to the peer.
-  void SendVersionNegotiationPacket(bool ietf_quic, bool has_length_prefix);
-
   // Clears any accumulated frames from the last received packet.
   void ClearLastFrames();
 
diff --git a/quiche/quic/core/quic_dispatcher.cc b/quiche/quic/core/quic_dispatcher.cc
index 208359d..952f512 100644
--- a/quiche/quic/core/quic_dispatcher.cc
+++ b/quiche/quic/core/quic_dispatcher.cc
@@ -458,7 +458,8 @@
     return true;
   }
 
-  QuicConnectionId server_connection_id = packet_info.destination_connection_id;
+  const QuicConnectionId server_connection_id =
+      packet_info.destination_connection_id;
 
   // The IETF spec requires the client to generate an initial server
   // connection ID that is at least 64 bits long. After that initial
@@ -548,19 +549,9 @@
       if (ShouldCreateSessionForUnknownVersion(packet_info.version_label)) {
         return false;
       }
-      if (!crypto_config()->validate_chlo_size() ||
-          packet_info.packet.length() >= kMinPacketSizeForVersionNegotiation) {
-        // Since the version is not supported, send a version negotiation
-        // packet and stop processing the current packet.
-        QuicConnectionId client_connection_id =
-            packet_info.source_connection_id;
-        time_wait_list_manager()->SendVersionNegotiationPacket(
-            server_connection_id, client_connection_id,
-            packet_info.form != GOOGLE_QUIC_PACKET,
-            packet_info.use_length_prefix, GetSupportedVersions(),
-            packet_info.self_address, packet_info.peer_address,
-            GetPerPacketContext());
-      }
+      // Since the version is not supported, send a version negotiation
+      // packet and stop processing the current packet.
+      MaybeSendVersionNegotiationPacket(packet_info);
       return true;
     }
 
@@ -1393,6 +1384,19 @@
       GetPerPacketContext());
 }
 
+void QuicDispatcher::MaybeSendVersionNegotiationPacket(
+    const ReceivedPacketInfo& packet_info) {
+  if (crypto_config()->validate_chlo_size() &&
+      packet_info.packet.length() < kMinPacketSizeForVersionNegotiation) {
+    return;
+  }
+  time_wait_list_manager()->SendVersionNegotiationPacket(
+      packet_info.destination_connection_id, packet_info.source_connection_id,
+      packet_info.form != GOOGLE_QUIC_PACKET, packet_info.use_length_prefix,
+      GetSupportedVersions(), packet_info.self_address,
+      packet_info.peer_address, GetPerPacketContext());
+}
+
 size_t QuicDispatcher::NumSessions() const {
   return num_sessions_in_session_map_;
 }
diff --git a/quiche/quic/core/quic_dispatcher.h b/quiche/quic/core/quic_dispatcher.h
index e74a8a7..4c3e278 100644
--- a/quiche/quic/core/quic_dispatcher.h
+++ b/quiche/quic/core/quic_dispatcher.h
@@ -322,6 +322,10 @@
   virtual void MaybeResetPacketsWithNoVersion(
       const quic::ReceivedPacketInfo& packet_info);
 
+  // Called on packets with unsupported versions.
+  virtual void MaybeSendVersionNegotiationPacket(
+      const ReceivedPacketInfo& packet_info);
+
   ConnectionIdGeneratorInterface& connection_id_generator() {
     return connection_id_generator_;
   }
