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 // IPC messages for the P2P Transport API.
6 // Multiply-included message file, hence no include guard.
8 #include "base/time/time.h"
9 #include "content/common/content_export.h"
10 #include "content/common/p2p_socket_type.h"
11 #include "ipc/ipc_message_macros.h"
12 #include "net/base/net_util.h"
13 #include "third_party/webrtc/base/asyncpacketsocket.h"
15 #undef IPC_MESSAGE_EXPORT
16 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
17 #define IPC_MESSAGE_START P2PMsgStart
19 IPC_ENUM_TRAITS_MAX_VALUE(content::P2PSocketType
,
20 content::P2P_SOCKET_TYPE_LAST
)
21 IPC_ENUM_TRAITS_MAX_VALUE(content::P2PSocketOption
,
22 content::P2P_SOCKET_OPT_MAX
- 1)
23 IPC_ENUM_TRAITS_MIN_MAX_VALUE(rtc::DiffServCodePoint
,
27 IPC_STRUCT_TRAITS_BEGIN(net::NetworkInterface
)
28 IPC_STRUCT_TRAITS_MEMBER(name
)
29 IPC_STRUCT_TRAITS_MEMBER(type
)
30 IPC_STRUCT_TRAITS_MEMBER(address
)
31 IPC_STRUCT_TRAITS_MEMBER(prefix_length
)
32 IPC_STRUCT_TRAITS_MEMBER(ip_address_attributes
)
33 IPC_STRUCT_TRAITS_END()
35 IPC_STRUCT_TRAITS_BEGIN(rtc::PacketTimeUpdateParams
)
36 IPC_STRUCT_TRAITS_MEMBER(rtp_sendtime_extension_id
)
37 IPC_STRUCT_TRAITS_MEMBER(srtp_auth_key
)
38 IPC_STRUCT_TRAITS_MEMBER(srtp_auth_tag_len
)
39 IPC_STRUCT_TRAITS_MEMBER(srtp_packet_index
)
40 IPC_STRUCT_TRAITS_END()
42 IPC_STRUCT_TRAITS_BEGIN(rtc::PacketOptions
)
43 IPC_STRUCT_TRAITS_MEMBER(dscp
)
44 IPC_STRUCT_TRAITS_MEMBER(packet_time_params
)
45 IPC_STRUCT_TRAITS_END()
47 IPC_STRUCT_TRAITS_BEGIN(content::P2PHostAndIPEndPoint
)
48 IPC_STRUCT_TRAITS_MEMBER(hostname
)
49 IPC_STRUCT_TRAITS_MEMBER(ip_address
)
50 IPC_STRUCT_TRAITS_END()
52 IPC_STRUCT_TRAITS_BEGIN(content::P2PSendPacketMetrics
)
53 IPC_STRUCT_TRAITS_MEMBER(packet_id
)
54 IPC_STRUCT_TRAITS_END()
56 // P2P Socket messages sent from the browser to the renderer.
58 IPC_MESSAGE_CONTROL1(P2PMsg_NetworkListChanged
,
59 net::NetworkInterfaceList
/* networks */)
61 IPC_MESSAGE_CONTROL2(P2PMsg_GetHostAddressResult
,
62 int32
/* request_id */,
63 net::IPAddressList
/* address list*/)
65 IPC_MESSAGE_CONTROL3(P2PMsg_OnSocketCreated
,
67 net::IPEndPoint
/* local_address */,
68 net::IPEndPoint
/* remote_address */)
70 // |send_metrics| carries packet_id for this packet.
71 IPC_MESSAGE_CONTROL2(P2PMsg_OnSendComplete
,
73 content::P2PSendPacketMetrics
/* send_metrics */)
75 IPC_MESSAGE_CONTROL1(P2PMsg_OnError
,
78 IPC_MESSAGE_CONTROL2(P2PMsg_OnIncomingTcpConnection
,
80 net::IPEndPoint
/* socket_address */)
82 IPC_MESSAGE_CONTROL4(P2PMsg_OnDataReceived
,
84 net::IPEndPoint
/* socket_address */,
85 std::vector
<char> /* data */,
86 base::TimeTicks
/* timestamp */ )
88 // P2P Socket messages sent from the renderer to the browser.
90 // Start/stop sending P2PMsg_NetworkListChanged messages when network
91 // configuration changes.
92 IPC_MESSAGE_CONTROL0(P2PHostMsg_StartNetworkNotifications
)
93 IPC_MESSAGE_CONTROL0(P2PHostMsg_StopNetworkNotifications
)
95 IPC_MESSAGE_CONTROL2(P2PHostMsg_GetHostAddress
,
96 std::string
/* host_name */,
97 int32
/* request_id */)
99 IPC_MESSAGE_CONTROL4(P2PHostMsg_CreateSocket
,
100 content::P2PSocketType
/* type */,
102 net::IPEndPoint
/* local_address */,
103 content::P2PHostAndIPEndPoint
/* remote_address */)
105 IPC_MESSAGE_CONTROL3(P2PHostMsg_AcceptIncomingTcpConnection
,
106 int /* listen_socket_id */,
107 net::IPEndPoint
/* remote_address */,
108 int /* connected_socket_id */)
110 // TODO(sergeyu): Use shared memory to pass the data.
111 IPC_MESSAGE_CONTROL5(P2PHostMsg_Send
,
113 net::IPEndPoint
/* socket_address */,
114 std::vector
<char> /* data */,
115 rtc::PacketOptions
/* packet options */,
116 uint64
/* packet_id */)
118 IPC_MESSAGE_CONTROL1(P2PHostMsg_DestroySocket
,
121 IPC_MESSAGE_CONTROL3(P2PHostMsg_SetOption
,
123 content::P2PSocketOption
/* socket option type */,