Home | History | Annotate | Download | only in host
      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_HOST_CHROMOTING_MESSAGES_H_
      6 #define REMOTING_HOST_CHROMOTING_MESSAGES_H_
      7 
      8 #include "ipc/ipc_platform_file.h"
      9 #include "net/base/ip_endpoint.h"
     10 #include "remoting/host/chromoting_param_traits.h"
     11 #include "remoting/host/screen_resolution.h"
     12 #include "remoting/protocol/transport.h"
     13 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
     14 #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_shape.h"
     15 
     16 #endif  // REMOTING_HOST_CHROMOTING_MESSAGES_H_
     17 
     18 // Multiply-included message file, no traditional include guard.
     19 #include "ipc/ipc_message_macros.h"
     20 
     21 #define IPC_MESSAGE_START ChromotingMsgStart
     22 
     23 //-----------------------------------------------------------------------------
     24 // Chromoting messages sent from the daemon.
     25 
     26 // Requests the receiving process to crash producing a crash dump. The daemon
     27 // sends this message when a fatal error has been detected indicating that
     28 // the receiving process misbehaves. The daemon passes the location of the code
     29 // that detected the error.
     30 IPC_MESSAGE_CONTROL3(ChromotingDaemonMsg_Crash,
     31                      std::string /* function_name */,
     32                      std::string /* file_name */,
     33                      int /* line_number */)
     34 
     35 //-----------------------------------------------------------------------------
     36 // Chromoting messages sent from the daemon to the network process.
     37 
     38 // Delivers the host configuration (and updates) to the network process.
     39 IPC_MESSAGE_CONTROL1(ChromotingDaemonNetworkMsg_Configuration, std::string)
     40 
     41 // Initializes the pairing registry on Windows. The passed key handles are
     42 // already duplicated by the sender.
     43 IPC_MESSAGE_CONTROL2(ChromotingDaemonNetworkMsg_InitializePairingRegistry,
     44                      IPC::PlatformFileForTransit /* privileged_key */,
     45                      IPC::PlatformFileForTransit /* unprivileged_key */)
     46 
     47 // Notifies the network process that the terminal |terminal_id| has been
     48 // disconnected from the desktop session.
     49 IPC_MESSAGE_CONTROL1(ChromotingDaemonNetworkMsg_TerminalDisconnected,
     50                      int /* terminal_id */)
     51 
     52 // Notifies the network process that |terminal_id| is now attached to
     53 // a desktop integration process. |desktop_process| is the handle of the desktop
     54 // process. |desktop_pipe| is the client end of the desktop-to-network pipe
     55 // opened.
     56 //
     57 // Windows only: |desktop_pipe| has to be duplicated from the desktop process
     58 // by the receiver of the message. |desktop_process| is already duplicated by
     59 // the sender.
     60 IPC_MESSAGE_CONTROL3(ChromotingDaemonNetworkMsg_DesktopAttached,
     61                      int /* terminal_id */,
     62                      base::ProcessHandle /* desktop_process */,
     63                      IPC::PlatformFileForTransit /* desktop_pipe */)
     64 
     65 //-----------------------------------------------------------------------------
     66 // Chromoting messages sent from the network to the daemon process.
     67 
     68 // Connects the terminal |terminal_id| (i.e. a remote client) to a desktop
     69 // session.
     70 IPC_MESSAGE_CONTROL3(ChromotingNetworkHostMsg_ConnectTerminal,
     71                      int /* terminal_id */,
     72                      remoting::ScreenResolution /* resolution */,
     73                      bool /* virtual_terminal */)
     74 
     75 // Disconnects the terminal |terminal_id| from the desktop session it was
     76 // connected to.
     77 IPC_MESSAGE_CONTROL1(ChromotingNetworkHostMsg_DisconnectTerminal,
     78                      int /* terminal_id */)
     79 
     80 // Changes the screen resolution in the given desktop session.
     81 IPC_MESSAGE_CONTROL2(ChromotingNetworkDaemonMsg_SetScreenResolution,
     82                      int /* terminal_id */,
     83                      remoting::ScreenResolution /* resolution */)
     84 
     85 // Serialized remoting::protocol::TransportRoute structure.
     86 IPC_STRUCT_BEGIN(SerializedTransportRoute)
     87   IPC_STRUCT_MEMBER(int, type)
     88   IPC_STRUCT_MEMBER(net::IPAddressNumber, remote_address)
     89   IPC_STRUCT_MEMBER(int, remote_port)
     90   IPC_STRUCT_MEMBER(net::IPAddressNumber, local_address)
     91   IPC_STRUCT_MEMBER(int, local_port)
     92 IPC_STRUCT_END()
     93 
     94 // Hosts status notifications (see HostStatusObserver interface) sent by
     95 // IpcHostEventLogger.
     96 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_AccessDenied,
     97                      std::string /* jid */)
     98 
     99 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientAuthenticated,
    100                      std::string /* jid */)
    101 
    102 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientConnected,
    103                      std::string /* jid */)
    104 
    105 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientDisconnected,
    106                      std::string /* jid */)
    107 
    108 IPC_MESSAGE_CONTROL3(ChromotingNetworkDaemonMsg_ClientRouteChange,
    109                      std::string /* jid */,
    110                      std::string /* channel_name */,
    111                      SerializedTransportRoute /* route */)
    112 
    113 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_HostStarted,
    114                      std::string /* xmpp_login */)
    115 
    116 IPC_MESSAGE_CONTROL0(ChromotingNetworkDaemonMsg_HostShutdown)
    117 
    118 //-----------------------------------------------------------------------------
    119 // Chromoting messages sent from the desktop to the daemon process.
    120 
    121 // Notifies the daemon that a desktop integration process has been initialized.
    122 // |desktop_pipe| specifies the client end of the desktop pipe. It is to be
    123 // forwarded to the desktop environment stub.
    124 //
    125 // Windows only: |desktop_pipe| has to be duplicated from the desktop process by
    126 // the receiver of the message.
    127 IPC_MESSAGE_CONTROL1(ChromotingDesktopDaemonMsg_DesktopAttached,
    128                      IPC::PlatformFileForTransit /* desktop_pipe */)
    129 
    130 // Asks the daemon to inject Secure Attention Sequence (SAS) in the session
    131 // where the desktop process is running.
    132 IPC_MESSAGE_CONTROL0(ChromotingDesktopDaemonMsg_InjectSas)
    133 
    134 //-----------------------------------------------------------------------------
    135 // Chromoting messages sent from the desktop to the network process.
    136 
    137 // Notifies the network process that a shared buffer has been created.
    138 IPC_MESSAGE_CONTROL3(ChromotingDesktopNetworkMsg_CreateSharedBuffer,
    139                      int /* id */,
    140                      IPC::PlatformFileForTransit /* handle */,
    141                      uint32 /* size */)
    142 
    143 // Request the network process to stop using a shared buffer.
    144 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_ReleaseSharedBuffer,
    145                      int /* id */)
    146 
    147 IPC_STRUCT_TRAITS_BEGIN(webrtc::MouseCursorShape)
    148   IPC_STRUCT_TRAITS_MEMBER(size)
    149   IPC_STRUCT_TRAITS_MEMBER(hotspot)
    150   IPC_STRUCT_TRAITS_MEMBER(data)
    151 IPC_STRUCT_TRAITS_END()
    152 
    153 // Serialized webrtc::DesktopFrame.
    154 IPC_STRUCT_BEGIN(SerializedDesktopFrame)
    155   // ID of the shared memory buffer containing the pixels.
    156   IPC_STRUCT_MEMBER(int, shared_buffer_id)
    157 
    158   // Width of a single row of pixels in bytes.
    159   IPC_STRUCT_MEMBER(int, bytes_per_row)
    160 
    161   // Captured region.
    162   IPC_STRUCT_MEMBER(std::vector<webrtc::DesktopRect>, dirty_region)
    163 
    164   // Dimensions of the buffer in pixels.
    165   IPC_STRUCT_MEMBER(webrtc::DesktopSize, dimensions)
    166 
    167   // Time spent in capture. Unit is in milliseconds.
    168   IPC_STRUCT_MEMBER(int, capture_time_ms)
    169 
    170   // Sequence number supplied by client for performance tracking.
    171   IPC_STRUCT_MEMBER(int64, client_sequence_number)
    172 
    173   // DPI for this frame.
    174   IPC_STRUCT_MEMBER(webrtc::DesktopVector, dpi)
    175 IPC_STRUCT_END()
    176 
    177 // Notifies the network process that a shared buffer has been created.
    178 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_CaptureCompleted,
    179                      SerializedDesktopFrame /* frame */ )
    180 
    181 // Carries a cursor share update from the desktop session agent to the client.
    182 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_CursorShapeChanged,
    183                      webrtc::MouseCursorShape /* cursor_shape */ )
    184 
    185 // Carries a clipboard event from the desktop session agent to the client.
    186 // |serialized_event| is a serialized protocol::ClipboardEvent.
    187 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_InjectClipboardEvent,
    188                      std::string /* serialized_event */ )
    189 
    190 // Requests the network process to terminate the client session.
    191 IPC_MESSAGE_CONTROL0(ChromotingDesktopNetworkMsg_DisconnectSession)
    192 
    193 // Carries an audio packet from the desktop session agent to the client.
    194 // |serialized_packet| is a serialized AudioPacket.
    195 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_AudioPacket,
    196                      std::string /* serialized_packet */ )
    197 
    198 //-----------------------------------------------------------------------------
    199 // Chromoting messages sent from the network to the desktop process.
    200 
    201 // Passes the client session data to the desktop session agent and starts it.
    202 // This must be the first message received from the host.
    203 IPC_MESSAGE_CONTROL3(ChromotingNetworkDesktopMsg_StartSessionAgent,
    204                      std::string /* authenticated_jid */,
    205                      remoting::ScreenResolution /* resolution */,
    206                      bool /* virtual_terminal */)
    207 
    208 IPC_MESSAGE_CONTROL0(ChromotingNetworkDesktopMsg_CaptureFrame)
    209 
    210 // Carries a clipboard event from the client to the desktop session agent.
    211 // |serialized_event| is a serialized protocol::ClipboardEvent.
    212 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectClipboardEvent,
    213                      std::string /* serialized_event */ )
    214 
    215 // Carries a keyboard event from the client to the desktop session agent.
    216 // |serialized_event| is a serialized protocol::KeyEvent.
    217 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectKeyEvent,
    218                      std::string /* serialized_event */ )
    219 
    220 // Carries a keyboard event from the client to the desktop session agent.
    221 // |serialized_event| is a serialized protocol::TextEvent.
    222 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectTextEvent,
    223                      std::string /* serialized_event */ )
    224 
    225 // Carries a mouse event from the client to the desktop session agent.
    226 // |serialized_event| is a serialized protocol::MouseEvent.
    227 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectMouseEvent,
    228                      std::string /* serialized_event */ )
    229 
    230 // Changes the screen resolution in the desktop session.
    231 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_SetScreenResolution,
    232                      remoting::ScreenResolution /* resolution */)
    233