| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright 2015 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 REMOTING_PROTOCOL_QUIC_CHANNEL_H_ |  | 
| 6 #define REMOTING_PROTOCOL_QUIC_CHANNEL_H_ |  | 
| 7 |  | 
| 8 #include "net/quic/p2p/quic_p2p_stream.h" |  | 
| 9 #include "remoting/base/compound_buffer.h" |  | 
| 10 #include "remoting/protocol/p2p_stream_socket.h" |  | 
| 11 |  | 
| 12 namespace net { |  | 
| 13 class DrainableIOBuffer; |  | 
| 14 }  // namespace net |  | 
| 15 |  | 
| 16 namespace remoting { |  | 
| 17 namespace protocol { |  | 
| 18 |  | 
| 19 // QuicChannel implements P2PStreamSocket interface for a QuicP2PStream. |  | 
| 20 class QuicChannel : public net::QuicP2PStream::Delegate, |  | 
| 21                     public P2PStreamSocket { |  | 
| 22  public: |  | 
| 23   QuicChannel(net::QuicP2PStream* stream, |  | 
| 24               const base::Closure& on_destroyed_callback); |  | 
| 25   ~QuicChannel() override; |  | 
| 26 |  | 
| 27   const std::string& name() { return name_; } |  | 
| 28 |  | 
| 29   // P2PStreamSocket interface. |  | 
| 30   int Read(const scoped_refptr<net::IOBuffer>& buffer, |  | 
| 31            int buffer_len, |  | 
| 32            const net::CompletionCallback& callback) override; |  | 
| 33   int Write(const scoped_refptr<net::IOBuffer>& buffer, |  | 
| 34             int buffer_len, |  | 
| 35             const net::CompletionCallback& callback) override; |  | 
| 36 |  | 
| 37  protected: |  | 
| 38   void SetName(const std::string& name); |  | 
| 39 |  | 
| 40   // Owned by QuicSession. |  | 
| 41   net::QuicP2PStream* stream_; |  | 
| 42 |  | 
| 43  private: |  | 
| 44   // net::QuicP2PStream::Delegate interface. |  | 
| 45   void OnDataReceived(const char* data, int length) override; |  | 
| 46   void OnClose(net::QuicErrorCode error) override; |  | 
| 47 |  | 
| 48   base::Closure on_destroyed_callback_; |  | 
| 49 |  | 
| 50   std::string name_; |  | 
| 51 |  | 
| 52   CompoundBuffer data_received_; |  | 
| 53 |  | 
| 54   net::CompletionCallback read_callback_; |  | 
| 55   scoped_refptr<net::IOBuffer> read_buffer_; |  | 
| 56   int read_buffer_size_ = 0; |  | 
| 57 |  | 
| 58   int error_ = 0; |  | 
| 59 |  | 
| 60   DISALLOW_COPY_AND_ASSIGN(QuicChannel); |  | 
| 61 }; |  | 
| 62 |  | 
| 63 // Client side of a channel. Sends the |name| specified in the constructor to |  | 
| 64 // the peer. |  | 
| 65 class QuicClientChannel : public QuicChannel { |  | 
| 66  public: |  | 
| 67   QuicClientChannel(net::QuicP2PStream* stream, |  | 
| 68                     const base::Closure& on_destroyed_callback, |  | 
| 69                     const std::string& name); |  | 
| 70   ~QuicClientChannel() override; |  | 
| 71 |  | 
| 72  private: |  | 
| 73   DISALLOW_COPY_AND_ASSIGN(QuicClientChannel); |  | 
| 74 }; |  | 
| 75 |  | 
| 76 // Host side of a channel. Receives name from the peer after ReceiveName is |  | 
| 77 // called. Read() can be called only after the name is received. |  | 
| 78 class QuicServerChannel : public QuicChannel { |  | 
| 79  public: |  | 
| 80   QuicServerChannel(net::QuicP2PStream* stream, |  | 
| 81                     const base::Closure& on_destroyed_callback); |  | 
| 82   ~QuicServerChannel() override; |  | 
| 83 |  | 
| 84   // Must be called after the constructor to receive channel name. |  | 
| 85   // |name_received_callback| must use QuicChannel::name() to get the name. |  | 
| 86   // Empty name() indicates failure to receive it. |  | 
| 87   void ReceiveName(const base::Closure& name_received_callback); |  | 
| 88 |  | 
| 89  private: |  | 
| 90   void OnNameSizeReadResult(int result); |  | 
| 91   void ReadNameLoop(int result); |  | 
| 92   void OnNameReadResult(int result); |  | 
| 93 |  | 
| 94   base::Closure name_received_callback_; |  | 
| 95   uint8_t name_length_ = 0; |  | 
| 96   scoped_refptr<net::DrainableIOBuffer> name_read_buffer_; |  | 
| 97 |  | 
| 98   DISALLOW_COPY_AND_ASSIGN(QuicServerChannel); |  | 
| 99 }; |  | 
| 100 |  | 
| 101 }  // namespace protocol |  | 
| 102 }  // namespace remoting |  | 
| 103 |  | 
| 104 #endif  // REMOTING_PROTOCOL_QUIC_CHANNEL_H_ |  | 
| OLD | NEW | 
|---|