udp_transport_impl.h revision 2d566686a23fe93ada58f1c38a0d4b9a0d68556e
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 1192d566686a23fe93ada58f1c38a0d4b9a0d68556epbos bool SendRtp(const uint8_t* data, size_t length) override; 1202d566686a23fe93ada58f1c38a0d4b9a0d68556epbos bool SendRtcp(const uint8_t* data, size_t length) override; 121999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 122999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // UdpTransport functions continue. 12314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetSendIP(const char* ipaddr) override; 12414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetSendPorts(const uint16_t rtpPort, 12514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint16_t rtcpPort = 0) override; 126999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 12714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org ErrorCode LastError() const override; 128999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 12914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t IPAddressCached(const SocketAddress& address, 13014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org char* ip, 13114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32_t& ipSize, 13214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t& sourcePort) override; 133999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 134a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t Id() const {return _id;} 135999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgprotected: 136999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // IncomingSocketCallback signature functions for receiving callbacks from 137999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // UdpSocketWrapper. 138999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org static void IncomingRTPCallback(CallbackObj obj, 139a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org const int8_t* rtpPacket, 1404591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t rtpPacketLength, 141999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress* from); 142999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org static void IncomingRTCPCallback(CallbackObj obj, 143a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org const int8_t* rtcpPacket, 1444591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t rtcpPacketLength, 145999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress* from); 146999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 147999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org void CloseSendSockets(); 148999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org void CloseReceiveSockets(); 149999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 150999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Update _remoteRTPAddr according to _destPort and _destIP 151999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org void BuildRemoteRTPAddr(); 152999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Update _remoteRTCPAddr according to _destPortRTCP and _destIP 153999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org void BuildRemoteRTCPAddr(); 154999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 155a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org void BuildSockaddrIn(uint16_t portnr, const char* ip, 156999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress& remoteAddr) const; 157999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 158999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode BindLocalRTPSocket(); 159999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode BindLocalRTCPSocket(); 160999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 161999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode BindRTPSendSocket(); 162999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode BindRTCPSendSocket(); 163999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 164a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org void IncomingRTPFunction(const int8_t* rtpPacket, 1654591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t rtpPacketLength, 166999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress* from); 167a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org void IncomingRTCPFunction(const int8_t* rtcpPacket, 1684591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t rtcpPacketLength, 169999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress* from); 170999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 171999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool FilterIPAddress(const SocketAddress* fromAddress); 172999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 173999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool SetSockOptUsed(); 174999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 175a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t EnableQoS(int32_t serviceType, bool audio, 176a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint32_t maxBitrate, int32_t overrideDSCP); 177999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 178a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t DisableQoS(); 179999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 180999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgprivate: 181a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org void GetCachedAddress(char* ip, uint32_t& ipSize, 182a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t& sourcePort); 183999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 184a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _id; 185999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketFactoryInterface* _socket_creator; 186999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Protects the sockets from being re-configured while receiving packets. 187999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org CriticalSectionWrapper* _crit; 188999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org CriticalSectionWrapper* _critFilter; 189999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // _packetCallback's critical section. 190999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org CriticalSectionWrapper* _critPacketCallback; 191999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketManager* _mgr; 192999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org ErrorCode _lastError; 193999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 194999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Remote RTP and RTCP ports. 195a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _destPort; 196a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _destPortRTCP; 197999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 198999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Local RTP and RTCP ports. 199a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _localPort; 200a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _localPortRTCP; 201999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 202999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Local port number when the local port for receiving and local port number 203999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // for sending are not the same. 204a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _srcPort; 205a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _srcPortRTCP; 206999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 207999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Remote port from which last received packet was sent. 208a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _fromPort; 209a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _fromPortRTCP; 210999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 211999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _fromIP[kIpAddressVersion6Length]; 212999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _destIP[kIpAddressVersion6Length]; 213999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _localIP[kIpAddressVersion6Length]; 214999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _localMulticastIP[kIpAddressVersion6Length]; 215999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 216999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper* _ptrRtpSocket; 217999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper* _ptrRtcpSocket; 218999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 219999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Local port when the local port for receiving and local port for sending 220999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // are not the same. 221999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper* _ptrSendRtpSocket; 222999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper* _ptrSendRtcpSocket; 223999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 224999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _remoteRTPAddr; 225999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _remoteRTCPAddr; 226999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 227999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _localRTPAddr; 228999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _localRTCPAddr; 229999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 230a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _tos; 231999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _receiving; 232999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _useSetSockOpt; 233999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _qos; 234a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _pcp; 235999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _ipV6Enabled; 236a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _serviceType; 237a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t _overrideDSCP; 238a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint32_t _maxBitrate; 239999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 240999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Cache used by GetCachedAddress(..). 241999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org RWLockWrapper* _cachLock; 242999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _previousAddress; 243999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org char _previousIP[kIpAddressVersion6Length]; 244a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint32_t _previousIPSize; 245a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _previousSourcePort; 246999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 247999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org SocketAddress _filterIPAddress; 248a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _rtpFilterPort; 249a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org uint16_t _rtcpFilterPort; 250999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 251999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpTransportData* _packetCallback; 252999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org}; 253999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 254999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org} // namespace test 255999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org} // namespace webrtc 256999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 257999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#endif // WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_TRANSPORT_IMPL_H_ 258