| // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef QUICHE_QUIC_CORE_CHLO_EXTRACTOR_H_ | 
 | #define QUICHE_QUIC_CORE_CHLO_EXTRACTOR_H_ | 
 |  | 
 | #include "quic/core/crypto/crypto_handshake_message.h" | 
 | #include "quic/core/quic_packets.h" | 
 |  | 
 | namespace quic { | 
 |  | 
 | // A utility for extracting QUIC Client Hello messages from packets, | 
 | // without needs to spin up a full QuicSession. | 
 | class QUIC_NO_EXPORT ChloExtractor { | 
 |  public: | 
 |   class QUIC_NO_EXPORT Delegate { | 
 |    public: | 
 |     virtual ~Delegate() {} | 
 |  | 
 |     // Called when a CHLO message is found in the packets. | 
 |     virtual void OnChlo(QuicTransportVersion version, | 
 |                         QuicConnectionId connection_id, | 
 |                         const CryptoHandshakeMessage& chlo) = 0; | 
 |   }; | 
 |  | 
 |   // Extracts a CHLO message from |packet| and invokes the OnChlo | 
 |   // method of |delegate|. Return true if a CHLO message was found, | 
 |   // and false otherwise. If non-empty, | 
 |   // |create_session_tag_indicators| contains a list of QUIC tags that | 
 |   // if found will result in the session being created early, to | 
 |   // enable support for multi-packet CHLOs. | 
 |   static bool Extract(const QuicEncryptedPacket& packet, | 
 |                       ParsedQuicVersion version, | 
 |                       const QuicTagVector& create_session_tag_indicators, | 
 |                       Delegate* delegate, | 
 |                       uint8_t connection_id_length); | 
 |  | 
 |   ChloExtractor(const ChloExtractor&) = delete; | 
 |   ChloExtractor operator=(const ChloExtractor&) = delete; | 
 | }; | 
 |  | 
 | }  // namespace quic | 
 |  | 
 | #endif  // QUICHE_QUIC_CORE_CHLO_EXTRACTOR_H_ |