OPAL  Version 3.18.8
rtpconn.h
Go to the documentation of this file.
1 /*
2  * rtpconn.h
3  *
4  * Connection abstraction
5  *
6  * Open Phone Abstraction Library (OPAL)
7  *
8  * Copyright (C) 2007 Post Increment
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Open Phone Abstraction Library.
21  *
22  * The Initial Developer of the Original Code is Post Increment
23  *
24  * Contributor(s): ______________________________________.
25  */
26 
27 #ifndef OPAL_OPAL_RTPCONN_H
28 #define OPAL_OPAL_RTPCONN_H
29 
30 #ifdef P_USE_PRAGMA
31 #pragma interface
32 #endif
33 
34 #include <opal_config.h>
35 
36 #include <opal/connection.h>
37 #include <opal/mediatype.h>
38 #include <opal/mediasession.h>
39 #include <rtp/rtp_session.h>
40 #include <codec/rfc2833.h>
41 #include <ptlib/bitwise_enum.h>
42 
43 
44 class OpalRTPEndPoint;
45 
46 
51 #define OPAL_OPT_DISABLE_NAT "Disable-NAT"
52 
53 
58 {
59  PCLASSINFO(OpalRTPConnection, OpalConnection);
60  public:
66  OpalCall & call,
67  OpalRTPEndPoint & endpoint,
68  const PString & token,
69  unsigned options = 0,
70  OpalConnection::StringOptions * stringOptions = NULL
71  );
72 
76 
94  virtual void OnReleased();
96 
97 
113  const OpalMediaFormat & mediaFormat,
114  unsigned sessionID,
115  PBoolean isSource
116  );
117 
127  virtual bool GetMediaTransportAddresses(
128  OpalConnection & otherConnection,
129  unsigned sessionId,
130  const OpalMediaType & mediaType,
131  OpalTransportAddressArray & transports
132  ) const;
133 
147  virtual void AdjustMediaFormats(
148  bool local,
149  const OpalConnection * otherConnection,
150  OpalMediaFormatList & mediaFormats
151  ) const;
152 
161  virtual void OnPatchMediaStream(
162  PBoolean isSource,
163  OpalMediaPatch & patch
164  );
165 
171  virtual bool OnMediaCommand(
172  OpalMediaStream & stream,
173  const OpalMediaCommand & command
174  );
175 
176  virtual PBoolean SendUserInputTone(
177  char tone,
178  unsigned duration = 0
179  );
181 
182 
187  virtual unsigned GetNextSessionID(
188  const OpalMediaType & mediaType,
189  bool isSource
190  );
191 
195  virtual OpalMediaCryptoSuite::KeyExchangeModes GetMediaCryptoKeyExchangeModes() const;
196 
206  vector<bool> CreateAllMediaSessions();
207 
213  unsigned sessionId,
214  const OpalMediaType & mediaType,
215  const PString & sessionType = PString::Empty()
216  );
217 
222  unsigned sessionID
223  ) const;
224 
229  const OpalMediaType & mediaType
230  ) const;
231 
236  WORD port
237  ) const;
238 
248  unsigned sessionId,
249  const OpalMediaType & mediaType,
250  const PString & sessionType = PString::Empty()
251  );
252 
255  virtual void ReleaseMediaSession(
256  unsigned sessionID
257  );
258 
264  virtual bool ChangeSessionID(
265  unsigned fromSessionID,
266  unsigned toSessionID
267  );
268 
271  virtual void ReplaceMediaSession(
272  unsigned sessionId,
273  OpalMediaSession * mediaSession
274  );
275 
276 #if OPAL_VIDEO
277 
279  virtual void AddAudioVideoGroup(
280  const PString & id = OpalMediaSession::GetBundleGroupId()
281  );
282 
286 #endif
287 
290  virtual bool SetSessionQoS(
291  OpalRTPSession * session
292  );
294 
314  virtual void DetermineRTPNAT(
315  const OpalTransport & transport,
316  const OpalTransportAddress & signalAddr
317  );
319 
320  typedef PSafeDictionary<PKey<unsigned>, OpalMediaSession> SessionMap;
321 
322  protected:
323  virtual bool GarbageCollection();
325 
326 #if OPAL_RTP_FEC
327  OpalMediaFormatList NegotiateFECMediaFormats(OpalMediaSession & session);
328 #endif
329 
330 
333 
335 #if OPAL_T38_CAPABILITY
336  OpalRFC2833Proto * m_ciscoNSEHandler;
337 #endif
338 
339  P_REMOVE_VIRTUAL(PBoolean,IsRTPNATEnabled(const PIPSocket::Address&,const PIPSocket::Address&,const PIPSocket::Address&,PBoolean),false);
340 };
341 
342 
343 #endif // OPAL_OPAL_RTPCONN_H
virtual unsigned GetNextSessionID(const OpalMediaType &mediaType, bool isSource)
Definition: rtpconn.h:57
virtual void AdjustMediaFormats(bool local, const OpalConnection *otherConnection, OpalMediaFormatList &mediaFormats) const
virtual void SetAudioVideoMediaStreamIDs(OpalRTPSession::Direction direction)
virtual bool GetMediaTransportAddresses(OpalConnection &otherConnection, unsigned sessionId, const OpalMediaType &mediaType, OpalTransportAddressArray &transports) const
bool m_remoteBehindNAT
Definition: rtpconn.h:332
Definition: mediacmd.h:43
vector< bool > CreateAllMediaSessions()
Definition: mediasession.h:647
virtual OpalMediaSession * FindSessionByMediaType(const OpalMediaType &mediaType) const
NotifyState
Definition: rfc2833.h:112
Definition: transports.h:788
virtual OpalMediaSession * CreateMediaSession(unsigned sessionId, const OpalMediaType &mediaType, const PString &sessionType=PString::Empty())
OpalRTPConnection(OpalCall &call, OpalRTPEndPoint &endpoint, const PString &token, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
Definition: mediatype.h:66
virtual void OnReleased()
virtual PBoolean SendUserInputTone(char tone, unsigned duration=0)
PDECLARE_NOTIFIER2(OpalRFC2833Info, OpalRTPConnection, OnUserInputInlineRFC2833, OpalRFC2833Proto::NotifyState)
Direction
Definition: rtp_session.h:132
virtual bool ChangeSessionID(unsigned fromSessionID, unsigned toSessionID)
PSafeDictionary< PKey< unsigned >, OpalMediaSession > SessionMap
Definition: rtpconn.h:320
virtual void ReplaceMediaSession(unsigned sessionId, OpalMediaSession *mediaSession)
Definition: rfc2833.h:61
Definition: mediafmt.h:112
virtual bool OnMediaCommand(OpalMediaStream &stream, const OpalMediaCommand &command)
Definition: connection.h:530
Definition: patch.h:56
Definition: mediafmt.h:806
Definition: call.h:62
virtual void ReleaseMediaSession(unsigned sessionID)
virtual void AddAudioVideoGroup(const PString &id=OpalMediaSession::GetBundleGroupId())
Definition: rtp_session.h:90
SessionMap m_sessions
Definition: rtpconn.h:331
static const PString & GetBundleGroupId()
Definition: rfc2833.h:108
virtual void DetermineRTPNAT(const OpalTransport &transport, const OpalTransportAddress &signalAddr)
virtual OpalMediaStream * CreateMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, PBoolean isSource)
Definition: mediastrm.h:110
virtual OpalMediaSession * FindSessionByLocalPort(WORD port) const
P_REMOVE_VIRTUAL(PBoolean, IsRTPNATEnabled(const PIPSocket::Address &, const PIPSocket::Address &, const PIPSocket::Address &, PBoolean), false)
Definition: connection.h:415
virtual OpalMediaSession * GetMediaSession(unsigned sessionID) const
virtual void OnPatchMediaStream(PBoolean isSource, OpalMediaPatch &patch)
virtual OpalMediaSession * UseMediaSession(unsigned sessionId, const OpalMediaType &mediaType, const PString &sessionType=PString::Empty())
virtual bool GarbageCollection()
Definition: transports.h:151
Definition: transports.h:326
OpalRFC2833Proto * m_rfc2833Handler
Definition: rtpconn.h:334
Definition: rtpep.h:77
virtual OpalMediaCryptoSuite::KeyExchangeModes GetMediaCryptoKeyExchangeModes() const
virtual bool SetSessionQoS(OpalRTPSession *session)