1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef NET_QUIC_QUIC_CRYPTO_STREAM_H_ 6 #define NET_QUIC_QUIC_CRYPTO_STREAM_H_ 7 8 #include "net/quic/crypto/crypto_framer.h" 9 #include "net/quic/crypto/crypto_utils.h" 10 #include "net/quic/quic_config.h" 11 #include "net/quic/quic_protocol.h" 12 #include "net/quic/reliable_quic_stream.h" 13 14 namespace net { 15 16 class CryptoHandshakeMessage; 17 class QuicSession; 18 19 // Crypto handshake messages in QUIC take place over a reserved 20 // reliable stream with the id 1. Each endpoint (client and server) 21 // will allocate an instance of a subclass of QuicCryptoStream 22 // to send and receive handshake messages. (In the normal 1-RTT 23 // handshake, the client will send a client hello, CHLO, message. 24 // The server will receive this message and respond with a server 25 // hello message, SHLO. At this point both sides will have established 26 // a crypto context they can use to send encrypted messages. 27 // 28 // For more details: http://goto.google.com/quic-crypto 29 class NET_EXPORT_PRIVATE QuicCryptoStream 30 : public ReliableQuicStream, 31 public CryptoFramerVisitorInterface { 32 public: 33 explicit QuicCryptoStream(QuicSession* session); 34 35 // CryptoFramerVisitorInterface implementation 36 virtual void OnError(CryptoFramer* framer) OVERRIDE; 37 virtual void OnHandshakeMessage( 38 const CryptoHandshakeMessage& message) OVERRIDE; 39 40 // ReliableQuicStream implementation 41 virtual uint32 ProcessRawData(const char* data, uint32 data_len) OVERRIDE; 42 virtual QuicPriority EffectivePriority() const OVERRIDE; 43 44 // Sends |message| to the peer. 45 // TODO(wtc): return a success/failure status. 46 void SendHandshakeMessage(const CryptoHandshakeMessage& message); 47 48 bool encryption_established() { return encryption_established_; } 49 bool handshake_confirmed() { return handshake_confirmed_; } 50 51 const QuicCryptoNegotiatedParameters& crypto_negotiated_params() const; 52 53 protected: 54 bool encryption_established_; 55 bool handshake_confirmed_; 56 57 QuicCryptoNegotiatedParameters crypto_negotiated_params_; 58 59 private: 60 CryptoFramer crypto_framer_; 61 62 DISALLOW_COPY_AND_ASSIGN(QuicCryptoStream); 63 }; 64 65 } // namespace net 66 67 #endif // NET_QUIC_QUIC_CRYPTO_STREAM_H_ 68