40 #ifndef OPAL_H460_STD19_H
41 #define OPAL_H460_STD19_H
75 bool IsRemoteServer()
const {
return m_remoteIsServer; }
78 PNatMethod * m_natMethod;
79 bool m_disabledByH46024;
80 bool m_remoteSupportsMux;
81 bool m_remoteIsServer;
87 class H46019Server :
public PObject
89 PCLASSINFO(H46019Server, PObject)
94 const PIPSocket::Address & localInterface
98 unsigned GetKeepAliveTTL()
const {
return m_keepAliveTTL; }
99 void SetKeepAliveTTL(
unsigned val) { m_keepAliveTTL = val; }
105 unsigned CreateMultiplexID(
106 const PIPSocketAddressAndPort & rtp,
107 const PIPSocketAddressAndPort & rtcp
112 unsigned m_keepAliveTTL;
114 PUDPSocket * m_keepAliveSocket;
115 PUDPSocket * m_rtpSocket;
116 PUDPSocket * m_rtcpSocket;
119 SocketPair(
const PIPSocketAddressAndPort & rtp,
const PIPSocketAddressAndPort & rtcp) : m_rtp(rtp), m_rtcp(rtcp) { }
120 PIPSocketAddressAndPort m_rtp;
121 PIPSocketAddressAndPort m_rtcp;
123 typedef map<uint32_t, SocketPair> MuxMap;
124 MuxMap m_multiplexedSockets;
126 PThread * m_multiplexThread;
127 void MultiplexThread();
128 bool Multiplex(
bool rtcp);
134 class PNatMethod_H46019 :
public PNatMethod
136 PCLASSINFO(PNatMethod_H46019, PNatMethod);
138 enum { DefaultPriority = 20 };
139 PNatMethod_H46019(
unsigned priority = DefaultPriority);
146 virtual PCaselessString GetMethodName()
const;
147 static const char * MethodName();
151 virtual PString GetServer()
const;
161 virtual bool IsAvailable(
const PIPSocket::Address & address, PObject * userData);
165 virtual PNATUDPSocket * InternalCreateSocket(Component component, PObject * context);
166 virtual void InternalUpdate();
172 class H46019UDPSocket :
public PNATUDPSocket
174 PCLASSINFO(H46019UDPSocket, PNATUDPSocket);
182 PNatMethod::Component component,
191 virtual const char * GetNatName()
const;
195 void ActivateKeepAliveRTP(
200 void ActivateKeepAliveRTCP(
unsigned ttl);
202 void SetMultiplexID(
unsigned multiplexID) { m_multiplexedTransmit =
true; m_multiplexID = multiplexID; }
207 bool InternalWriteTo(
const Slice * slices,
size_t sliceCount,
const PIPSocketAddressAndPort & ipAndPort);
213 PIPSocketAddressAndPort m_keepAliveAddress;
215 PTimeInterval m_keepAliveTTL;
216 WORD m_keepAliveSequence;
218 PDECLARE_NOTIFIER(PTimer, H46019UDPSocket, KeepAliveTimeout);
219 PTimer m_keepAliveTimer;
220 void SendKeepAliveRTP(
const PIPSocketAddressAndPort & ipAndPort);
223 bool m_multiplexedTransmit;
224 PUInt32b m_multiplexID;
228 #endif // OPAL_H460_NAT
230 #endif // OPAL_H460_STD19_H