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.
5 #ifndef REMOTING_HOST_CHROMOTING_MESSAGES_H_
6 #define REMOTING_HOST_CHROMOTING_MESSAGES_H_
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"
16 #endif // REMOTING_HOST_CHROMOTING_MESSAGES_H_
18 // Multiply-included message file, no traditional include guard.
19 #include "ipc/ipc_message_macros.h"
21 #define IPC_MESSAGE_START ChromotingMsgStart
23 //-----------------------------------------------------------------------------
24 // Chromoting messages sent from the daemon.
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 */)
35 //-----------------------------------------------------------------------------
36 // Chromoting messages sent from the daemon to the network process.
38 // Delivers the host configuration (and updates) to the network process.
39 IPC_MESSAGE_CONTROL1(ChromotingDaemonNetworkMsg_Configuration
, std::string
)
41 // Notifies the network process that the terminal |terminal_id| has been
42 // disconnected from the desktop session.
43 IPC_MESSAGE_CONTROL1(ChromotingDaemonNetworkMsg_TerminalDisconnected
,
44 int /* terminal_id */)
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
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
54 IPC_MESSAGE_CONTROL3(ChromotingDaemonNetworkMsg_DesktopAttached
,
55 int /* terminal_id */,
56 base::ProcessHandle
/* desktop_process */,
57 IPC::PlatformFileForTransit
/* desktop_pipe */)
59 //-----------------------------------------------------------------------------
60 // Chromoting messages sent from the network to the daemon process.
62 // Connects the terminal |terminal_id| (i.e. a remote client) to a desktop
64 IPC_MESSAGE_CONTROL3(ChromotingNetworkHostMsg_ConnectTerminal
,
65 int /* terminal_id */,
66 remoting::ScreenResolution
/* resolution */,
67 bool /* virtual_terminal */)
69 // Disconnects the terminal |terminal_id| from the desktop session it was
71 IPC_MESSAGE_CONTROL1(ChromotingNetworkHostMsg_DisconnectTerminal
,
72 int /* terminal_id */)
74 // Changes the screen resolution in the given desktop session.
75 IPC_MESSAGE_CONTROL2(ChromotingNetworkDaemonMsg_SetScreenResolution
,
76 int /* terminal_id */,
77 remoting::ScreenResolution
/* resolution */)
79 // Serialized remoting::protocol::TransportRoute structure.
80 IPC_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
)
88 // Hosts status notifications (see HostStatusObserver interface) sent by
89 // IpcHostEventLogger.
90 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_AccessDenied
,
91 std::string
/* jid */)
93 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientAuthenticated
,
94 std::string
/* jid */)
96 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientConnected
,
97 std::string
/* jid */)
99 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_ClientDisconnected
,
100 std::string
/* jid */)
102 IPC_MESSAGE_CONTROL3(ChromotingNetworkDaemonMsg_ClientRouteChange
,
103 std::string
/* jid */,
104 std::string
/* channel_name */,
105 SerializedTransportRoute
/* route */)
107 IPC_MESSAGE_CONTROL1(ChromotingNetworkDaemonMsg_HostStarted
,
108 std::string
/* xmpp_login */)
110 IPC_MESSAGE_CONTROL0(ChromotingNetworkDaemonMsg_HostShutdown
)
112 //-----------------------------------------------------------------------------
113 // Chromoting messages sent from the desktop to the daemon process.
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.
119 // Windows only: |desktop_pipe| has to be duplicated from the desktop process by
120 // the receiver of the message.
121 IPC_MESSAGE_CONTROL1(ChromotingDesktopDaemonMsg_DesktopAttached
,
122 IPC::PlatformFileForTransit
/* desktop_pipe */)
124 // Asks the daemon to inject Secure Attention Sequence (SAS) in the session
125 // where the desktop process is running.
126 IPC_MESSAGE_CONTROL0(ChromotingDesktopDaemonMsg_InjectSas
)
128 //-----------------------------------------------------------------------------
129 // Chromoting messages sent from the desktop to the network process.
131 // Notifies the network process that a shared buffer has been created.
132 IPC_MESSAGE_CONTROL3(ChromotingDesktopNetworkMsg_CreateSharedBuffer
,
134 IPC::PlatformFileForTransit
/* handle */,
137 // Request the network process to stop using a shared buffer.
138 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_ReleaseSharedBuffer
,
141 IPC_STRUCT_TRAITS_BEGIN(webrtc::MouseCursorShape
)
142 IPC_STRUCT_TRAITS_MEMBER(size
)
143 IPC_STRUCT_TRAITS_MEMBER(hotspot
)
144 IPC_STRUCT_TRAITS_MEMBER(data
)
145 IPC_STRUCT_TRAITS_END()
147 // Serialized webrtc::DesktopFrame.
148 IPC_STRUCT_BEGIN(SerializedDesktopFrame
)
149 // ID of the shared memory buffer containing the pixels.
150 IPC_STRUCT_MEMBER(int, shared_buffer_id
)
152 // Width of a single row of pixels in bytes.
153 IPC_STRUCT_MEMBER(int, bytes_per_row
)
156 IPC_STRUCT_MEMBER(std::vector
<webrtc::DesktopRect
>, dirty_region
)
158 // Dimensions of the buffer in pixels.
159 IPC_STRUCT_MEMBER(webrtc::DesktopSize
, dimensions
)
161 // Time spent in capture. Unit is in milliseconds.
162 IPC_STRUCT_MEMBER(int, capture_time_ms
)
164 // Sequence number supplied by client for performance tracking.
165 IPC_STRUCT_MEMBER(int64
, client_sequence_number
)
167 // DPI for this frame.
168 IPC_STRUCT_MEMBER(webrtc::DesktopVector
, dpi
)
171 // Notifies the network process that a shared buffer has been created.
172 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_CaptureCompleted
,
173 SerializedDesktopFrame
/* frame */ )
175 // Carries a cursor share update from the desktop session agent to the client.
176 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_CursorShapeChanged
,
177 webrtc::MouseCursorShape
/* cursor_shape */ )
179 // Carries a clipboard event from the desktop session agent to the client.
180 // |serialized_event| is a serialized protocol::ClipboardEvent.
181 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_InjectClipboardEvent
,
182 std::string
/* serialized_event */ )
184 // Requests the network process to terminate the client session.
185 IPC_MESSAGE_CONTROL0(ChromotingDesktopNetworkMsg_DisconnectSession
)
187 // Carries an audio packet from the desktop session agent to the client.
188 // |serialized_packet| is a serialized AudioPacket.
189 IPC_MESSAGE_CONTROL1(ChromotingDesktopNetworkMsg_AudioPacket
,
190 std::string
/* serialized_packet */ )
192 //-----------------------------------------------------------------------------
193 // Chromoting messages sent from the network to the desktop process.
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.
197 IPC_MESSAGE_CONTROL3(ChromotingNetworkDesktopMsg_StartSessionAgent
,
198 std::string
/* authenticated_jid */,
199 remoting::ScreenResolution
/* resolution */,
200 bool /* virtual_terminal */)
202 IPC_MESSAGE_CONTROL0(ChromotingNetworkDesktopMsg_CaptureFrame
)
204 // Carries a clipboard event from the client to the desktop session agent.
205 // |serialized_event| is a serialized protocol::ClipboardEvent.
206 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectClipboardEvent
,
207 std::string
/* serialized_event */ )
209 // Carries a keyboard event from the client to the desktop session agent.
210 // |serialized_event| is a serialized protocol::KeyEvent.
211 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectKeyEvent
,
212 std::string
/* serialized_event */ )
214 // Carries a mouse event from the client to the desktop session agent.
215 // |serialized_event| is a serialized protocol::MouseEvent.
216 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_InjectMouseEvent
,
217 std::string
/* serialized_event */ )
219 // Changes the screen resolution in the desktop session.
220 IPC_MESSAGE_CONTROL1(ChromotingNetworkDesktopMsg_SetScreenResolution
,
221 remoting::ScreenResolution
/* resolution */)