| // Copyright 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 REMOTING_PROTOCOL_STREAM_MESSAGE_PIPE_ADAPTER_H_ | 
 | #define REMOTING_PROTOCOL_STREAM_MESSAGE_PIPE_ADAPTER_H_ | 
 |  | 
 | #include "base/callback.h" | 
 | #include "remoting/protocol/message_channel_factory.h" | 
 | #include "remoting/protocol/message_pipe.h" | 
 | #include "remoting/protocol/message_reader.h" | 
 |  | 
 | namespace remoting { | 
 | class BufferedSocketWriter; | 
 |  | 
 | namespace protocol { | 
 |  | 
 | class P2PStreamSocket; | 
 | class StreamChannelFactory; | 
 |  | 
 | // MessagePipe implementation that sends and receives messages over a | 
 | // P2PStreamSocket. | 
 | class StreamMessagePipeAdapter : public MessagePipe { | 
 |  public: | 
 |   typedef base::Callback<void(int)> ErrorCallback; | 
 |  | 
 |   StreamMessagePipeAdapter(std::unique_ptr<P2PStreamSocket> socket, | 
 |                            const ErrorCallback& error_callback); | 
 |   ~StreamMessagePipeAdapter() override; | 
 |  | 
 |   // MessagePipe interface. | 
 |   void Start(EventHandler* event_handler) override; | 
 |   void Send(google::protobuf::MessageLite* message, | 
 |             const base::Closure& done) override; | 
 |  | 
 |  private: | 
 |   void CloseOnError(int error); | 
 |  | 
 |   EventHandler* event_handler_ = nullptr; | 
 |  | 
 |   std::unique_ptr<P2PStreamSocket> socket_; | 
 |   ErrorCallback error_callback_; | 
 |  | 
 |   std::unique_ptr<MessageReader> reader_; | 
 |   std::unique_ptr<BufferedSocketWriter> writer_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(StreamMessagePipeAdapter); | 
 | }; | 
 |  | 
 | class StreamMessageChannelFactoryAdapter : public MessageChannelFactory { | 
 |  public: | 
 |   typedef base::Callback<void(int)> ErrorCallback; | 
 |  | 
 |   StreamMessageChannelFactoryAdapter( | 
 |       StreamChannelFactory* stream_channel_factory, | 
 |       const ErrorCallback& error_callback); | 
 |   ~StreamMessageChannelFactoryAdapter() override; | 
 |  | 
 |   // MessageChannelFactory interface. | 
 |   void CreateChannel(const std::string& name, | 
 |                      const ChannelCreatedCallback& callback) override; | 
 |   void CancelChannelCreation(const std::string& name) override; | 
 |  | 
 |  private: | 
 |   void OnChannelCreated(const ChannelCreatedCallback& callback, | 
 |                         std::unique_ptr<P2PStreamSocket> socket); | 
 |  | 
 |   StreamChannelFactory* stream_channel_factory_; | 
 |   ErrorCallback error_callback_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(StreamMessageChannelFactoryAdapter); | 
 | }; | 
 |  | 
 | }  // namespace protocol | 
 | }  // namespace remoting | 
 |  | 
 | #endif  // REMOTING_PROTOCOL_STREAM_MESSAGE_PIPE_ADAPTER_H_ |