• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // IPC messages for the P2P Transport API.
6 // Multiply-included message file, hence no include guard.
7 
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"
14 
15 #undef IPC_MESSAGE_EXPORT
16 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
17 #define IPC_MESSAGE_START P2PMsgStart
18 
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,
24                               rtc::DSCP_NO_CHANGE,
25                               rtc::DSCP_CS7)
26 
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(network_prefix)
32   IPC_STRUCT_TRAITS_MEMBER(ip_address_attributes)
33 IPC_STRUCT_TRAITS_END()
34 
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()
41 
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()
46 
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()
51 
52 // P2P Socket messages sent from the browser to the renderer.
53 
54 IPC_MESSAGE_CONTROL1(P2PMsg_NetworkListChanged,
55                      net::NetworkInterfaceList /* networks */)
56 
57 IPC_MESSAGE_CONTROL2(P2PMsg_GetHostAddressResult,
58                      int32 /* request_id */,
59                      net::IPAddressList /* address list*/)
60 
61 IPC_MESSAGE_CONTROL3(P2PMsg_OnSocketCreated,
62                      int /* socket_id */,
63                      net::IPEndPoint /* local_address */,
64                      net::IPEndPoint /* remote_address */)
65 
66 IPC_MESSAGE_CONTROL1(P2PMsg_OnSendComplete,
67                      int /* socket_id */)
68 
69 IPC_MESSAGE_CONTROL1(P2PMsg_OnError,
70                      int /* socket_id */)
71 
72 IPC_MESSAGE_CONTROL2(P2PMsg_OnIncomingTcpConnection,
73                      int /* socket_id */,
74                      net::IPEndPoint /* socket_address */)
75 
76 IPC_MESSAGE_CONTROL4(P2PMsg_OnDataReceived,
77                      int /* socket_id */,
78                      net::IPEndPoint /* socket_address */,
79                      std::vector<char> /* data */,
80                      base::TimeTicks /* timestamp */ )
81 
82 // P2P Socket messages sent from the renderer to the browser.
83 
84 // Start/stop sending P2PMsg_NetworkListChanged messages when network
85 // configuration changes.
86 IPC_MESSAGE_CONTROL0(P2PHostMsg_StartNetworkNotifications)
87 IPC_MESSAGE_CONTROL0(P2PHostMsg_StopNetworkNotifications)
88 
89 IPC_MESSAGE_CONTROL2(P2PHostMsg_GetHostAddress,
90                     std::string /* host_name */,
91                     int32 /* request_id */)
92 
93 IPC_MESSAGE_CONTROL4(P2PHostMsg_CreateSocket,
94                      content::P2PSocketType /* type */,
95                      int /* socket_id */,
96                      net::IPEndPoint /* local_address */,
97                      content::P2PHostAndIPEndPoint /* remote_address */)
98 
99 IPC_MESSAGE_CONTROL3(P2PHostMsg_AcceptIncomingTcpConnection,
100                     int /* listen_socket_id */,
101                     net::IPEndPoint /* remote_address */,
102                     int /* connected_socket_id */)
103 
104 // TODO(sergeyu): Use shared memory to pass the data.
105 IPC_MESSAGE_CONTROL5(P2PHostMsg_Send,
106                      int /* socket_id */,
107                      net::IPEndPoint /* socket_address */,
108                      std::vector<char> /* data */,
109                      rtc::PacketOptions /* packet options */,
110                      uint64 /* packet_id */)
111 
112 IPC_MESSAGE_CONTROL1(P2PHostMsg_DestroySocket,
113                      int /* socket_id */)
114 
115 IPC_MESSAGE_CONTROL3(P2PHostMsg_SetOption,
116                      int /* socket_id */,
117                      content::P2PSocketOption /* socket option type */,
118                      int /* value */)
119