|  | // 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 NET_TOOLS_QUIC_CHLO_EXTRACTOR_H_ | 
|  | #define NET_TOOLS_QUIC_CHLO_EXTRACTOR_H_ | 
|  |  | 
|  | #include "net/quic/crypto/crypto_handshake_message.h" | 
|  | #include "net/quic/quic_protocol.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | // A utility for extracting QUIC Client Hello messages from packets, | 
|  | // without needs to spin up a full QuicSession. | 
|  | class ChloExtractor { | 
|  | public: | 
|  | class Delegate { | 
|  | public: | 
|  | virtual ~Delegate() {} | 
|  |  | 
|  | // Called when a CHLO message is found in the packets. | 
|  | virtual void OnChlo(QuicVersion 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. | 
|  | static bool Extract(const QuicEncryptedPacket& packet, | 
|  | const QuicVersionVector& versions, | 
|  | Delegate* delegate); | 
|  |  | 
|  | ChloExtractor(ChloExtractor&) = delete; | 
|  | ChloExtractor operator=(const ChloExtractor&) = delete; | 
|  | }; | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // NET_TOOLS_QUIC_CHLO_EXTRACTOR_H_ |