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 REMOTING_PROTOCOL_HOST_CONTROL_DISPATCHER_H_ 6 #define REMOTING_PROTOCOL_HOST_CONTROL_DISPATCHER_H_ 7 8 #include "remoting/protocol/buffered_socket_writer.h" 9 #include "remoting/protocol/channel_dispatcher_base.h" 10 #include "remoting/protocol/client_stub.h" 11 #include "remoting/protocol/clipboard_stub.h" 12 #include "remoting/protocol/cursor_shape_stub.h" 13 #include "remoting/protocol/message_reader.h" 14 15 namespace net { 16 class StreamSocket; 17 } // namespace net 18 19 namespace remoting { 20 namespace protocol { 21 22 class ControlMessage; 23 class HostStub; 24 class PairingResponse; 25 class Session; 26 27 // HostControlDispatcher dispatches incoming messages on the control 28 // channel to HostStub or ClipboardStub, and also implements ClientStub and 29 // CursorShapeStub for outgoing messages. 30 class HostControlDispatcher : public ChannelDispatcherBase, 31 public ClientStub { 32 public: 33 HostControlDispatcher(); 34 virtual ~HostControlDispatcher(); 35 36 // ClientStub implementation. 37 virtual void SetCapabilities(const Capabilities& capabilities) OVERRIDE; 38 virtual void SetPairingResponse( 39 const PairingResponse& pairing_response) OVERRIDE; 40 virtual void DeliverHostMessage( 41 const ExtensionMessage& message) OVERRIDE; 42 43 // ClipboardStub implementation for sending clipboard data to client. 44 virtual void InjectClipboardEvent(const ClipboardEvent& event) OVERRIDE; 45 46 // CursorShapeStub implementation for sending cursor shape to client. 47 virtual void SetCursorShape(const CursorShapeInfo& cursor_shape) OVERRIDE; 48 49 // Sets the ClipboardStub that will be called for each incoming clipboard 50 // message. |clipboard_stub| must outlive this object. 51 void set_clipboard_stub(ClipboardStub* clipboard_stub) { 52 clipboard_stub_ = clipboard_stub; 53 } 54 55 // Sets the HostStub that will be called for each incoming control 56 // message. |host_stub| must outlive this object. 57 void set_host_stub(HostStub* host_stub) { host_stub_ = host_stub; } 58 59 protected: 60 // ChannelDispatcherBase overrides. 61 virtual void OnInitialized() OVERRIDE; 62 63 private: 64 void OnMessageReceived(scoped_ptr<ControlMessage> message, 65 const base::Closure& done_task); 66 67 ClipboardStub* clipboard_stub_; 68 HostStub* host_stub_; 69 70 ProtobufMessageReader<ControlMessage> reader_; 71 BufferedSocketWriter writer_; 72 73 DISALLOW_COPY_AND_ASSIGN(HostControlDispatcher); 74 }; 75 76 } // namespace protocol 77 } // namespace remoting 78 79 #endif // REMOTING_PROTOCOL_HOST_CONTROL_DISPATCHER_H_ 80