Home | History | Annotate | Download | only in quic
      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