1999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org/* 2999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * 4999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * Use of this source code is governed by a BSD-style license 5999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * that can be found in the LICENSE file in the root of the source 6999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * tree. An additional intellectual property rights grant can be found 7999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * in the file PATENTS. All contributing project authors may 8999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org */ 10999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 11999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#ifndef WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_TRANSPORT_IMPL_H_ 12999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#define WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_TRANSPORT_IMPL_H_ 13999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 14999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#include "webrtc/test/channel_transport/udp_socket_wrapper.h" 151e50231ff88801cf87143e8a94612d39ff4c2072pbos@webrtc.org#include "webrtc/test/channel_transport/udp_transport.h" 16999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 17999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgnamespace webrtc { 18999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 19999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgclass CriticalSectionWrapper; 20999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgclass RWLockWrapper; 21999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 22999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgnamespace test { 23999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 24999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgclass UdpSocketManager; 25999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 26999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgclass UdpTransportImpl : public UdpTransport 27999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org{ 28999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgpublic: 29999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // A factory that returns a wrapped UDP socket or equivalent. 30999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org class SocketFactoryInterface { 31999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org public: 32999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual ~SocketFactoryInterface() {} 33a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org virtual UdpSocketWrapper* CreateSocket(const int32_t id, 34999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketManager* mgr, 35999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org CallbackObj obj, 36999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org IncomingSocketCallback cb, 37999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool ipV6Enable, 38999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool disableGQOS) = 0; 39999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org }; 40999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 41999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Constructor, only called by UdpTransport::Create and tests. 42999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // The constructor takes ownership of the "maker". 43999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // The constructor does not take ownership of socket_manager. 44a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org UdpTransportImpl(const int32_t id, 45999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketFactoryInterface* maker, 46999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketManager* socket_manager); 47999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual ~UdpTransportImpl(); 48999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 49999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // UdpTransport functions 5014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t InitializeSendSockets(const char* ipAddr, 5114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint16_t rtpPort, 5214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint16_t rtcpPort = 0) override; 5314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t InitializeReceiveSockets(UdpTransportData* const packetCallback, 5414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint16_t rtpPort, 5514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const char* ipAddr = NULL, 5614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const char* multicastIpAddr = NULL, 5714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint16_t rtcpPort = 0) override; 5814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t InitializeSourcePorts(const uint16_t rtpPort, 5914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint16_t rtcpPort = 0) override; 6014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SourcePorts(uint16_t& rtpPort, uint16_t& rtcpPort) const override; 6114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t ReceiveSocketInformation( 62999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char ipAddr[kIpAddressVersion6Length], 63a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t& rtpPort, 64a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t& rtcpPort, 6514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org char multicastIpAddr[kIpAddressVersion6Length]) const override; 6614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SendSocketInformation(char ipAddr[kIpAddressVersion6Length], 6714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t& rtpPort, 6814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t& rtcpPort) const override; 6914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RemoteSocketInformation(char ipAddr[kIpAddressVersion6Length], 7014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t& rtpPort, 7114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t& rtcpPort) const override; 7214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetQoS(const bool QoS, 7314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const int32_t serviceType, 7414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint32_t maxBitrate = 0, 7514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const int32_t overrideDSCP = 0, 7614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const bool audio = false) override; 7714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t QoS(bool& QoS, 7814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t& serviceType, 7914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t& overrideDSCP) const override; 8014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetToS(const int32_t DSCP, 8114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const bool useSetSockOpt = false) override; 8214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t ToS(int32_t& DSCP, bool& useSetSockOpt) const override; 8314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetPCP(const int32_t PCP) override; 8414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t PCP(int32_t& PCP) const override; 8514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t EnableIpV6() override; 8614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool IpV6Enabled() const override; 8714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetFilterIP( 8814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const char filterIPAddress[kIpAddressVersion6Length]) override; 8914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t FilterIP( 9014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org char filterIPAddress[kIpAddressVersion6Length]) const override; 9114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetFilterPorts(const uint16_t rtpFilterPort, 9214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint16_t rtcpFilterPort) override; 9314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t FilterPorts(uint16_t& rtpFilterPort, 9414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t& rtcpFilterPort) const override; 9514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StartReceiving(const uint32_t numberOfSocketBuffers) override; 9614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StopReceiving() override; 9714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool Receiving() const override; 9814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool SendSocketsInitialized() const override; 9914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool SourcePortsInitialized() const override; 10014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool ReceiveSocketsInitialized() const override; 10114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SendRaw(const int8_t* data, 10214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org size_t length, 10314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t isRTCP, 10414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t portnr = 0, 10514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const char* ip = NULL) override; 10614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SendRTPPacketTo(const int8_t* data, 10714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org size_t length, 10814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const SocketAddress& to) override; 10914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SendRTCPPacketTo(const int8_t* data, 11014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org size_t length, 11114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const SocketAddress& to) override; 11214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SendRTPPacketTo(const int8_t* data, 11314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org size_t length, 11414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t rtpPort) override; 11514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SendRTCPPacketTo(const int8_t* data, 11614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org size_t length, 11714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t rtcpPort) override; 118999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Transport functions 1191d8a506405734d0cef9653704b036ca4f1388960stefan bool SendRtp(const uint8_t* data, 1201d8a506405734d0cef9653704b036ca4f1388960stefan size_t length, 1211d8a506405734d0cef9653704b036ca4f1388960stefan const PacketOptions& packet_options) override; 1222d566686a23fe93ada58f1c38a0d4b9a0d68556epbos bool SendRtcp(const uint8_t* data, size_t length) override; 123999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 124999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // UdpTransport functions continue. 12514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetSendIP(const char* ipaddr) override; 12614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetSendPorts(const uint16_t rtpPort, 12714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint16_t rtcpPort = 0) override; 128999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 12914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org ErrorCode LastError() const override; 130999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 13114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t IPAddressCached(const SocketAddress& address, 13214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org char* ip, 13314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32_t& ipSize, 13414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t& sourcePort) override; 135999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 136a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t Id() const {return _id;} 137999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgprotected: 138999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // IncomingSocketCallback signature functions for receiving callbacks from 139999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // UdpSocketWrapper. 140999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org static void IncomingRTPCallback(CallbackObj obj, 141a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org const int8_t* rtpPacket, 1424591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t rtpPacketLength, 143999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress* from); 144999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org static void IncomingRTCPCallback(CallbackObj obj, 145a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org const int8_t* rtcpPacket, 1464591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t rtcpPacketLength, 147999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress* from); 148999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 149999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org void CloseSendSockets(); 150999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org void CloseReceiveSockets(); 151999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 152999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Update _remoteRTPAddr according to _destPort and _destIP 153999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org void BuildRemoteRTPAddr(); 154999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Update _remoteRTCPAddr according to _destPortRTCP and _destIP 155999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org void BuildRemoteRTCPAddr(); 156999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 157a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org void BuildSockaddrIn(uint16_t portnr, const char* ip, 158999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress& remoteAddr) const; 159999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 160999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode BindLocalRTPSocket(); 161999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode BindLocalRTCPSocket(); 162999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 163999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode BindRTPSendSocket(); 164999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode BindRTCPSendSocket(); 165999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 166a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org void IncomingRTPFunction(const int8_t* rtpPacket, 1674591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t rtpPacketLength, 168999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress* from); 169a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org void IncomingRTCPFunction(const int8_t* rtcpPacket, 1704591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t rtcpPacketLength, 171999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress* from); 172999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 173999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool FilterIPAddress(const SocketAddress* fromAddress); 174999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 175999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool SetSockOptUsed(); 176999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 177a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t EnableQoS(int32_t serviceType, bool audio, 178a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint32_t maxBitrate, int32_t overrideDSCP); 179999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 180a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t DisableQoS(); 181999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 182999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgprivate: 183a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org void GetCachedAddress(char* ip, uint32_t& ipSize, 184a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t& sourcePort); 185999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 186a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _id; 187999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketFactoryInterface* _socket_creator; 188999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Protects the sockets from being re-configured while receiving packets. 189999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org CriticalSectionWrapper* _crit; 190999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org CriticalSectionWrapper* _critFilter; 191999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // _packetCallback's critical section. 192999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org CriticalSectionWrapper* _critPacketCallback; 193999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketManager* _mgr; 194999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode _lastError; 195999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 196999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Remote RTP and RTCP ports. 197a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _destPort; 198a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _destPortRTCP; 199999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 200999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Local RTP and RTCP ports. 201a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _localPort; 202a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _localPortRTCP; 203999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 204999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Local port number when the local port for receiving and local port number 205999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // for sending are not the same. 206a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _srcPort; 207a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _srcPortRTCP; 208999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 209999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Remote port from which last received packet was sent. 210a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _fromPort; 211a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _fromPortRTCP; 212999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 213999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _fromIP[kIpAddressVersion6Length]; 214999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _destIP[kIpAddressVersion6Length]; 215999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _localIP[kIpAddressVersion6Length]; 216999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _localMulticastIP[kIpAddressVersion6Length]; 217999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 218999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper* _ptrRtpSocket; 219999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper* _ptrRtcpSocket; 220999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 221999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Local port when the local port for receiving and local port for sending 222999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // are not the same. 223999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper* _ptrSendRtpSocket; 224999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper* _ptrSendRtcpSocket; 225999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 226999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _remoteRTPAddr; 227999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _remoteRTCPAddr; 228999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 229999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _localRTPAddr; 230999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _localRTCPAddr; 231999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 232a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _tos; 233999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _receiving; 234999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _useSetSockOpt; 235999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _qos; 236a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _pcp; 237999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _ipV6Enabled; 238a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _serviceType; 239a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _overrideDSCP; 240a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint32_t _maxBitrate; 241999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 242999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Cache used by GetCachedAddress(..). 243999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org RWLockWrapper* _cachLock; 244999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _previousAddress; 245999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _previousIP[kIpAddressVersion6Length]; 246a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint32_t _previousIPSize; 247a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _previousSourcePort; 248999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 249999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _filterIPAddress; 250a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _rtpFilterPort; 251a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _rtcpFilterPort; 252999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 253999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpTransportData* _packetCallback; 254999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org}; 255999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 256999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org} // namespace test 257999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org} // namespace webrtc 258999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 259999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#endif // WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_TRANSPORT_IMPL_H_ 260