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. 30IPC_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. 39IPC_MESSAGE_CONTROL1(ChromotingDaemonNetworkMsg_Configuration, std::string) 40 41// Notifies the network process that the terminal |terminal_id| has been 42// disconnected from the desktop session. 43IPC_MESSAGE_CONTROL1(ChromotingDaemonNetworkMsg_TerminalDisconnected, 44 int /* terminal_id */) 45 46// Notifies the network process that |terminal_id| is now attached to 47// a desktop integration process. |desktop_process| is the handle of the desktop 48// process. |desktop_pipe| is the client end of the desktop-to-network pipe 49// opened. 50// 51// Windows only: |desktop_pipe| has to be duplicated from the desktop process 52// by the receiver of the message. |desktop_process| is already duplicated by 53// the sender. 54IPC_MESSAGE_CONTROL3(ChromotingDaemonNetworkMsg_DesktopAttached, 55 int /* terminal_id */, 56 base::ProcessHandle /* desktop_process */, 57 IPC::PlatformFileForTransit /* desktop_pipe */) 58 59//----------------------------------------------------------------------------- 60// Chromoting messages sent from the network to the daemon process. 61 62// Connects the terminal |terminal_id| (i.e. a remote client) to a desktop 63// session. 64IPC_MESSAGE_CONTROL3(ChromotingNetworkHostMsg_ConnectTerminal, 65 int /* terminal_id */, 66 remoting::ScreenResolution /* resolution */, 67 bool /* virtual_terminal */) 68 69// Disconnects the terminal |terminal_id| from the desktop session it was 70// connected to. 71IPC_MESSAGE_CONTROL1(ChromotingNetworkHostMsg_DisconnectTerminal, 72 int /* terminal_id */) 73 74// Changes the screen resolution in the given desktop session. 75IPC_MESSAGE_CONTROL2(ChromotingNetworkDaemonMsg_SetScreenResolution, 76 int /* terminal_id */, 77 remoting::ScreenResolution /* resolution */) 78 79// Serialized remoting::protocol::TransportRoute structure. 80IPC_STRUCT_BEGIN(SerializedTransportRoute) 81 IPC_STRUCT_MEMBER(int, type) 82 IPC_STRUCT_MEMBER(net::IPAddressNumber, remote_address) 83 IPC_STRUCT_MEMBER(int, remote_port) 84 IPC_STRUCT_MEMBER(net::IPAddressNumber, local_address) 85 IPC_STRUCT_MEMBER(int, local_port) 86IPC_STRUCT_END() 87 88// Hosts status notifications (see HostStatusObserver interface) sent by 89// IpcHostEventLogger. 90IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_AccessDenied, 91 std::string /* jid */) 92 93IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientAuthenticated, 94 std::string /* jid */) 95 96IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientConnected, 97 std::string /* jid */) 98 99IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientDisconnected, 100 std::string /* jid */) 101 102IPC_MESSAGE_CONTROL3(ChromotingNetworkDaemonMsg_ClientRouteChange, 103 std::string /* jid */, 104 std::string /* channel_name */, 105 SerializedTransportRoute /* route */) 106 107IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_HostStarted, 108 std::string /* xmpp_login */) 109 110IPC_MESSAGE_CONTROL0(ChromotingNetworkDaemonMsg_HostShutdown) 111 112//----------------------------------------------------------------------------- 113// Chromoting messages sent from the desktop to the daemon process. 114 115// Notifies the daemon that a desktop integration process has been initialized. 116// |desktop_pipe| specifies the client end of the desktop pipe. It is to be 117// forwarded to the desktop environment stub. 118// 119// Windows only: |desktop_pipe| has to be duplicated from the desktop process by 120// the receiver of the message. 121IPC_MESSAGE_CONTROL1(ChromotingDesktopDaemonMsg_DesktopAttached, 122 IPC::PlatformFileForTransit /* desktop_pipe */) 123 124// Asks the daemon to inject Secure Attention Sequence (SAS) in the session 125// where the desktop process is running. 126IPC_MESSAGE_CONTROL0(ChromotingDesktopDaemonMsg_InjectSas) 127 128//----------------------------------------------------------------------------- 129// Chromoting messages sent from the desktop to the network process. 130 131// Notifies the network process that a shared buffer has been created. 132IPC_MESSAGE_CONTROL3(ChromotingDesktopNetworkMsg_CreateSharedBuffer, 133 int /* id */, 134 IPC::PlatformFileForTransit /* handle */, 135 uint32 /* size */) 136 137// Request the network process to stop using a shared buffer. 138IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_ReleaseSharedBuffer, 139 int /* id */) 140 141IPC_STRUCT_TRAITS_BEGIN(webrtc::MouseCursorShape) 142 IPC_STRUCT_TRAITS_MEMBER(size) 143 IPC_STRUCT_TRAITS_MEMBER(hotspot) 144 IPC_STRUCT_TRAITS_MEMBER(data) 145IPC_STRUCT_TRAITS_END() 146 147// Serialized webrtc::DesktopFrame. 148IPC_STRUCT_BEGIN(SerializedDesktopFrame) 149 // ID of the shared memory buffer containing the pixels. 150 IPC_STRUCT_MEMBER(int, shared_buffer_id) 151 152 // Width of a single row of pixels in bytes. 153 IPC_STRUCT_MEMBER(int, bytes_per_row) 154 155 // Captured region. 156 IPC_STRUCT_MEMBER(std::vector<webrtc::DesktopRect>, dirty_region) 157 158 // Dimensions of the buffer in pixels. 159 IPC_STRUCT_MEMBER(webrtc::DesktopSize, dimensions) 160 161 // Time spent in capture. Unit is in milliseconds. 162 IPC_STRUCT_MEMBER(int, capture_time_ms) 163 164 // Sequence number supplied by client for performance tracking. 165 IPC_STRUCT_MEMBER(int64, client_sequence_number) 166 167 // DPI for this frame. 168 IPC_STRUCT_MEMBER(webrtc::DesktopVector, dpi) 169IPC_STRUCT_END() 170 171// Notifies the network process that a shared buffer has been created. 172IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_CaptureCompleted, 173 SerializedDesktopFrame /* frame */ ) 174 175// Carries a cursor share update from the desktop session agent to the client. 176IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_CursorShapeChanged, 177 webrtc::MouseCursorShape /* cursor_shape */ ) 178 179// Carries a clipboard event from the desktop session agent to the client. 180// |serialized_event| is a serialized protocol::ClipboardEvent. 181IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_InjectClipboardEvent, 182 std::string /* serialized_event */ ) 183 184// Requests the network process to terminate the client session. 185IPC_MESSAGE_CONTROL0(ChromotingDesktopNetworkMsg_DisconnectSession) 186 187// Carries an audio packet from the desktop session agent to the client. 188// |serialized_packet| is a serialized AudioPacket. 189IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_AudioPacket, 190 std::string /* serialized_packet */ ) 191 192//----------------------------------------------------------------------------- 193// Chromoting messages sent from the network to the desktop process. 194 195// Passes the client session data to the desktop session agent and starts it. 196// This must be the first message received from the host. 197IPC_MESSAGE_CONTROL3(ChromotingNetworkDesktopMsg_StartSessionAgent, 198 std::string /* authenticated_jid */, 199 remoting::ScreenResolution /* resolution */, 200 bool /* virtual_terminal */) 201 202IPC_MESSAGE_CONTROL0(ChromotingNetworkDesktopMsg_CaptureFrame) 203 204// Carries a clipboard event from the client to the desktop session agent. 205// |serialized_event| is a serialized protocol::ClipboardEvent. 206IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectClipboardEvent, 207 std::string /* serialized_event */ ) 208 209// Carries a keyboard event from the client to the desktop session agent. 210// |serialized_event| is a serialized protocol::KeyEvent. 211IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectKeyEvent, 212 std::string /* serialized_event */ ) 213 214// Carries a mouse event from the client to the desktop session agent. 215// |serialized_event| is a serialized protocol::MouseEvent. 216IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectMouseEvent, 217 std::string /* serialized_event */ ) 218 219// Changes the screen resolution in the desktop session. 220IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_SetScreenResolution, 221 remoting::ScreenResolution /* resolution */) 222