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