15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IPC messages for the P2P Transport API.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Multiply-included message file, hence no include guard.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/time/time.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/p2p_socket_type.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message_macros.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h"
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/libjingle/source/talk/base/asyncpacketsocket.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef IPC_MESSAGE_EXPORT
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPC_MESSAGE_START P2PMsgStart
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IPC_ENUM_TRAITS_MAX_VALUE(content::P2PSocketType,
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          content::P2P_SOCKET_TYPE_LAST)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IPC_ENUM_TRAITS_MAX_VALUE(content::P2PSocketOption,
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          content::P2P_SOCKET_OPT_MAX - 1)
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IPC_ENUM_TRAITS_MIN_MAX_VALUE(talk_base::DiffServCodePoint,
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              talk_base::DSCP_NO_CHANGE,
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              talk_base::DSCP_CS7)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_STRUCT_TRAITS_BEGIN(net::NetworkInterface)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(name)
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(type)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(address)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_STRUCT_TRAITS_END()
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IPC_STRUCT_TRAITS_BEGIN(talk_base::PacketTimeUpdateParams)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(rtp_sendtime_extension_id)
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(srtp_auth_key)
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(srtp_auth_tag_len)
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(srtp_packet_index)
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IPC_STRUCT_TRAITS_END()
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IPC_STRUCT_TRAITS_BEGIN(talk_base::PacketOptions)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(dscp)
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(packet_time_params)
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IPC_STRUCT_TRAITS_END()
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IPC_STRUCT_TRAITS_BEGIN(content::P2PHostAndIPEndPoint)
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(hostname)
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  IPC_STRUCT_TRAITS_MEMBER(ip_address)
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IPC_STRUCT_TRAITS_END()
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// P2P Socket messages sent from the browser to the renderer.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL1(P2PMsg_NetworkListChanged,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     net::NetworkInterfaceList /* networks */)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(P2PMsg_GetHostAddressResult,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int32 /* request_id */,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     net::IPAddressList /* address list*/)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(P2PMsg_OnSocketCreated,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int /* socket_id */,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     net::IPEndPoint /* socket_address */)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IPC_MESSAGE_CONTROL1(P2PMsg_OnSendComplete,
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                     int /* socket_id */)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL1(P2PMsg_OnError,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int /* socket_id */)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(P2PMsg_OnIncomingTcpConnection,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int /* socket_id */,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     net::IPEndPoint /* socket_address */)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IPC_MESSAGE_CONTROL4(P2PMsg_OnDataReceived,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int /* socket_id */,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     net::IPEndPoint /* socket_address */,
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     std::vector<char> /* data */,
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     base::TimeTicks /* timestamp */ )
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// P2P Socket messages sent from the renderer to the browser.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Start/stop sending P2PMsg_NetworkListChanged messages when network
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// configuration changes.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL0(P2PHostMsg_StartNetworkNotifications)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL0(P2PHostMsg_StopNetworkNotifications)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(P2PHostMsg_GetHostAddress,
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    std::string /* host_name */,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    int32 /* request_id */)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL4(P2PHostMsg_CreateSocket,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     content::P2PSocketType /* type */,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int /* socket_id */,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     net::IPEndPoint /* local_address */,
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                     content::P2PHostAndIPEndPoint /* remote_address */)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL3(P2PHostMsg_AcceptIncomingTcpConnection,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    int /* listen_socket_id */,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    net::IPEndPoint /* remote_address */,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    int /* connected_socket_id */)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(sergeyu): Use shared memory to pass the data.
1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)IPC_MESSAGE_CONTROL5(P2PHostMsg_Send,
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int /* socket_id */,
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     net::IPEndPoint /* socket_address */,
1058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                     std::vector<char> /* data */,
106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                     talk_base::PacketOptions /* packet options */,
1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                     uint64 /* packet_id */)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL1(P2PHostMsg_DestroySocket,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int /* socket_id */)
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IPC_MESSAGE_CONTROL3(P2PHostMsg_SetOption,
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     int /* socket_id */,
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     content::P2PSocketOption /* socket option type */,
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     int /* value */)
116