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
19IPC_ENUM_TRAITS_MAX_VALUE(content::P2PSocketType,
20                          content::P2P_SOCKET_TYPE_LAST)
21IPC_ENUM_TRAITS_MAX_VALUE(content::P2PSocketOption,
22                          content::P2P_SOCKET_OPT_MAX - 1)
23IPC_ENUM_TRAITS_MIN_MAX_VALUE(rtc::DiffServCodePoint,
24                              rtc::DSCP_NO_CHANGE,
25                              rtc::DSCP_CS7)
26
27IPC_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)
33IPC_STRUCT_TRAITS_END()
34
35IPC_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)
40IPC_STRUCT_TRAITS_END()
41
42IPC_STRUCT_TRAITS_BEGIN(rtc::PacketOptions)
43  IPC_STRUCT_TRAITS_MEMBER(dscp)
44  IPC_STRUCT_TRAITS_MEMBER(packet_time_params)
45IPC_STRUCT_TRAITS_END()
46
47IPC_STRUCT_TRAITS_BEGIN(content::P2PHostAndIPEndPoint)
48  IPC_STRUCT_TRAITS_MEMBER(hostname)
49  IPC_STRUCT_TRAITS_MEMBER(ip_address)
50IPC_STRUCT_TRAITS_END()
51
52// P2P Socket messages sent from the browser to the renderer.
53
54IPC_MESSAGE_CONTROL1(P2PMsg_NetworkListChanged,
55                     net::NetworkInterfaceList /* networks */)
56
57IPC_MESSAGE_CONTROL2(P2PMsg_GetHostAddressResult,
58                     int32 /* request_id */,
59                     net::IPAddressList /* address list*/)
60
61IPC_MESSAGE_CONTROL3(P2PMsg_OnSocketCreated,
62                     int /* socket_id */,
63                     net::IPEndPoint /* local_address */,
64                     net::IPEndPoint /* remote_address */)
65
66IPC_MESSAGE_CONTROL1(P2PMsg_OnSendComplete,
67                     int /* socket_id */)
68
69IPC_MESSAGE_CONTROL1(P2PMsg_OnError,
70                     int /* socket_id */)
71
72IPC_MESSAGE_CONTROL2(P2PMsg_OnIncomingTcpConnection,
73                     int /* socket_id */,
74                     net::IPEndPoint /* socket_address */)
75
76IPC_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.
86IPC_MESSAGE_CONTROL0(P2PHostMsg_StartNetworkNotifications)
87IPC_MESSAGE_CONTROL0(P2PHostMsg_StopNetworkNotifications)
88
89IPC_MESSAGE_CONTROL2(P2PHostMsg_GetHostAddress,
90                    std::string /* host_name */,
91                    int32 /* request_id */)
92
93IPC_MESSAGE_CONTROL4(P2PHostMsg_CreateSocket,
94                     content::P2PSocketType /* type */,
95                     int /* socket_id */,
96                     net::IPEndPoint /* local_address */,
97                     content::P2PHostAndIPEndPoint /* remote_address */)
98
99IPC_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.
105IPC_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
112IPC_MESSAGE_CONTROL1(P2PHostMsg_DestroySocket,
113                     int /* socket_id */)
114
115IPC_MESSAGE_CONTROL3(P2PHostMsg_SetOption,
116                     int /* socket_id */,
117                     content::P2PSocketOption /* socket option type */,
118                     int /* value */)
119