OPAL  Version 3.18.8
connection.h
Go to the documentation of this file.
1 /*
2  * connection.h
3  *
4  * Telephony connection abstraction
5  *
6  * Open Phone Abstraction Library (OPAL)
7  * Formally known as the Open H323 project.
8  *
9  * Copyright (c) 2001 Equivalence Pty. Ltd.
10  *
11  * The contents of this file are subject to the Mozilla Public License
12  * Version 1.0 (the "License"); you may not use this file except in
13  * compliance with the License. You may obtain a copy of the License at
14  * http://www.mozilla.org/MPL/
15  *
16  * Software distributed under the License is distributed on an "AS IS"
17  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
18  * the License for the specific language governing rights and limitations
19  * under the License.
20  *
21  * The Original Code is Open Phone Abstraction Library.
22  *
23  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
24  *
25  * Contributor(s): Post Increment
26  * Portions of this code were written with the assistance of funding from
27  * US Joint Forces Command Joint Concept Development & Experimentation (J9)
28  * http://www.jfcom.mil/about/abt_j9.htm
29  */
30 
31 #ifndef OPAL_OPAL_CONNECTION_H
32 #define OPAL_OPAL_CONNECTION_H
33 
34 #ifdef P_USE_PRAGMA
35 #pragma interface
36 #endif
37 
38 #include <opal_config.h>
39 
40 #include <opal/mediafmt.h>
41 #include <opal/mediastrm.h>
42 #include <opal/mediasession.h>
43 #include <opal/guid.h>
44 #include <opal/transports.h>
45 #include <ptclib/dtmf.h>
46 #include <ptclib/mime.h>
47 #include <ptlib/safecoll.h>
48 #include <rtp/rtp.h>
49 
50 #if OPAL_SCRIPT
51 // Inside #if so does not force loading of factories when statically linked.
52 #include <ptclib/script.h>
53 #endif
54 
55 
56 class OpalEndPoint;
57 class OpalCall;
60 class OpalEchoCanceler;
61 class OpalRFC2833Proto;
62 class OpalRFC2833Info;
63 class PURL;
64 
65 
66 #define OPAL_URL_PARAM_PREFIX "OPAL-"
67 #define OPAL_MAKE_URL_PARAM(opt) ";" OPAL_URL_PARAM_PREFIX opt
68 #define OPAL_MAKE_URL_PARAM2(opt, val) OPAL_MAKE_URL_PARAM(opt) "=" val
69 
70 #define OPAL_OPT_AUTO_START "AutoStart"
75 #define OPAL_OPT_CALL_IDENTIFIER "Call-Identifier"
76 #define OPAL_OPT_CALLING_PARTY_URL "Calling-Party-URL"
77 #define OPAL_OPT_CALLING_PARTY_NUMBER "Calling-Party-Number"
78 #define OPAL_OPT_CALLING_PARTY_NAME "Calling-Party-Name"
79 #define OPAL_OPT_CALLING_PARTY_DOMAIN "Calling-Party-Domain"
80 #define OPAL_OPT_CALLING_DISPLAY_NAME "Calling-Display-Name"
81 #define OPAL_OPT_CALLED_PARTY_NAME "Called-Party-Name"
82 #define OPAL_OPT_CALLED_DISPLAY_NAME "Called-Display-Name"
83 #define OPAL_OPT_REDIRECTING_PARTY "Redirecting-Party"
84 #define OPAL_OPT_PRESENTATION_BLOCK "Presentation-Block"
85 #define OPAL_OPT_INTERFACE "Interface"
86 #define OPAL_OPT_USER_INPUT_MODE "User-Input-Mode"
87 #define OPAL_OPT_ENABLE_INBAND_DTMF "EnableInbandDTMF"
89 #define OPAL_OPT_ENABLE_INBAND_DTMF "EnableInbandDTMF"
90 #define OPAL_OPT_DETECT_INBAND_DTMF "DetectInBandDTMF"
91 #define OPAL_OPT_SEND_INBAND_DTMF "SendInBandDTMF"
92 #define OPAL_OPT_DTMF_MULT "dtmfmult"
93 #define OPAL_OPT_DTMF_DIV "dtmfdiv"
94 #define OPAL_OPT_DISABLE_JITTER "Disable-Jitter"
95 #define OPAL_OPT_MAX_JITTER "Max-Jitter"
96 #define OPAL_OPT_MIN_JITTER "Min-Jitter"
97 #define OPAL_OPT_RECORD_AUDIO "Record-Audio"
98 #define OPAL_OPT_ALERTING_TYPE "Alerting-Type"
99 #define OPAL_OPT_REMOVE_CODEC "Remove-Codec"
105 #define OPAL_OPT_SILENCE_DETECT_MODE "Silence-Detect"
106 
111 #define OPAL_OPT_CRYPTO_SUITES "Crypto-Suites"
112 
132 #define OPAL_OPT_VIDUP_METHODS "Video-Update-Picture-Method"
133 #define OPAL_OPT_VIDUP_METHOD_OOB 1
134 #define OPAL_OPT_VIDUP_METHOD_RTCP 2
135 #define OPAL_OPT_VIDUP_METHOD_PLI 4
136 #define OPAL_OPT_VIDUP_METHOD_FIR 8
137 #define OPAL_OPT_VIDUP_METHOD_PREFER_PLI 16
138 #define OPAL_OPT_VIDUP_METHOD_DEFAULT 3
354 class OpalProductInfo
355 {
356  public:
357  OpalProductInfo();
360  const char * vendor,
361  const char * name,
362  const char * version,
363  BYTE t35CountryCode,
364  WORD manufacturerCode,
365  const char * oid
366  );
367 
368  static const OpalProductInfo & Default();
369 
370  void operator=(const OpalProductInfo & other);
371  bool operator==(const OpalProductInfo & other) const;
372  __inline bool operator!=(const OpalProductInfo & other) const { return !operator==(other); }
373 
374  friend ostream & operator<<(ostream & strm, const OpalProductInfo & info);
375 
379  PCaselessString AsString() const;
380 
381  PCaselessString vendor;
382  PCaselessString name;
383  PCaselessString version;
384  PCaselessString comments;
389 
390  PString oid;
391 };
393 
411 class OpalConnection : public PSafeObject
412 {
413  PCLASSINFO(OpalConnection, PSafeObject);
414  public:
419  P_DECLARE_TRACED_ENUM_EX(CallEndReasonCodes,NumCallEndReasons,
420  EndedByLocalUser,0,
421  EndedByNoAccept,
422  EndedByAnswerDenied,
423  EndedByRemoteUser,
424  EndedByRefusal,
425  EndedByNoAnswer,
426  EndedByCallerAbort,
427  EndedByTransportFail,
428  EndedByConnectFail,
429  EndedByGatekeeper,
430  EndedByNoUser,
431  EndedByNoBandwidth,
432  EndedByCapabilityExchange,
433  EndedByCallForwarded,
434  EndedBySecurityDenial,
435  EndedByLocalBusy,
436  EndedByLocalCongestion,
437  EndedByRemoteBusy,
438  EndedByRemoteCongestion,
439  EndedByUnreachable,
440  EndedByNoEndPoint,
441  EndedByHostOffline,
442  EndedByTemporaryFailure,
443  EndedByQ931Cause,
444  EndedByDurationLimit,
445  EndedByInvalidConferenceID,
446  EndedByNoDialTone,
447  EndedByNoRingBackTone,
448  EndedByOutOfService,
449  EndedByAcceptingCallWaiting,
450  EndedByGkAdmissionFailed,
451  EndedByMediaFailed,
452  EndedByCallCompletedElsewhere,
453  EndedByCertificateAuthority,
454  EndedByIllegalAddress,
455  EndedByCustomCode
456  );
457 
458  struct CallEndReason {
460  CallEndReasonCodes reason = NumCallEndReasons,
461  unsigned cause = 0
462  ) : code(reason), q931(cause) { }
463  explicit CallEndReason(
464  long reason
465  ) : code((CallEndReasonCodes)(reason&0xff)), q931((reason>>8)&0xff) { }
466 
467  __inline operator CallEndReasonCodes() const { return code; }
468 
469  __inline int AsInteger() const { return code|(q931<<8); }
470 
471  CallEndReasonCodes code:8; // Normalised OPAL code
472  union
473  {
474  unsigned q931:16; // PSTN Interworking code, actually Q.850
475  unsigned custom:16; // Custom code
476  };
477  };
479 #if PTRACING
480  friend ostream & operator<<(ostream & o, CallEndReason reason);
481 #endif
482 
483  P_DECLARE_TRACED_ENUM(AnswerCallResponse,
484  AnswerCallNow,
485  AnswerCallDenied,
486  AnswerCallPending,
487  AnswerCallDeferred,
488  AnswerCallAlertWithMedia,
489  AnswerCallDeferredWithMedia,
490  AnswerCallProgress,
491  AnswerCallNowAndReleaseCurrent
492  );
493 
496  enum Options {
497  FastStartOptionDisable = 0x0001, // H.323 specific
498  FastStartOptionEnable = 0x0002,
499  FastStartOptionMask = 0x0003,
501  H245TunnelingOptionDisable = 0x0004, // H.323 specific
504 
505  H245inSetupOptionDisable = 0x0010, // H.323 specific
508 
509  DetectInBandDTMFOptionDisable = 0x0040, // SIP and H.323
512 
513  RTPAggregationDisable = 0x0100, // SIP and H.323
516 
517  SendDTMFAsDefault = 0x0000, // SIP and H.323
519  SendDTMFAsTone = 0x0800,
520  SendDTMFAsRFC2833 = 0x0c00,
521  SendDTMFMask = 0x0c00,
524  };
526  class StringOptions : public PStringOptions
527  {
528  public:
529  StringOptions() { }
530  StringOptions(const PString & str) : PStringOptions(str) { }
531 
536  void ExtractFromURL(
537  PURL & url
538  );
539 
545  void ExtractFromString(
546  PString & str
547  );
548  };
549 
555  OpalCall & call,
556  OpalEndPoint & endpoint,
557  const PString & token,
558  unsigned options = 0,
559  OpalConnection::StringOptions * stringOptions = NULL
560  );
561 
564  ~OpalConnection();
566 
573  void PrintOn(
574  ostream & strm
575  ) const;
577 
594  virtual bool IsNetworkConnection() const = 0;
595 
600  UninitialisedPhase,
601  SetUpPhase,
602  ProceedingPhase,
603  AlertingPhase,
604  ConnectedPhase,
605  EstablishedPhase,
606  ForwardingPhase,
607  ReleasingPhase,
608  ReleasedPhase
609  );
610 
615  __inline Phases GetPhase() const { PWaitAndSignal mutex(m_phaseMutex); return m_phase; }
616 
618  __inline bool IsEstablished() const { return GetPhase() == EstablishedPhase; }
621  __inline bool IsReleased() const { return GetPhase() >= ReleasingPhase; }
627  void SetPhase(
628  Phases phaseToSet
629  );
630 
640 
643  static PString GetCallEndReasonText(CallEndReason reason);
644  PString GetCallEndReasonText() const { return GetCallEndReasonText(GetCallEndReason()); }
645 
648  static void SetCallEndReasonText(CallEndReasonCodes reasonCode, const PString & newText);
649 
654  virtual void SetCallEndReason(
655  CallEndReason reason
656  );
657 
667  void ClearCall(
668  CallEndReason reason = EndedByLocalUser,
669  PSyncPoint * sync = NULL
670  );
671 
676  virtual void ClearCallSynchronous(
677  PSyncPoint * sync,
678  CallEndReason reason = EndedByLocalUser
679  );
680 
684  unsigned GetQ931Cause() const { return m_callEndReason.q931; }
685 
689  void SetQ931Cause(unsigned v) { m_callEndReason.q931 = v; }
690 
697  virtual bool TransferConnection(
698  const PString & remoteParty
699  );
700 
715  virtual bool HoldRemote(
716  bool placeOnHold
717  );
718 
723  virtual bool IsOnHold(
724  bool fromRemote
725  ) const;
726 
731  virtual void OnHold(
732  bool fromRemote,
733  bool onHold
734  );
736 
764  virtual PBoolean OnIncomingConnection(unsigned int options, OpalConnection::StringOptions * stringOptions);
765 
773  virtual PBoolean SetUpConnection();
774 
778  virtual PBoolean OnSetUpConnection();
779 
780 
795  virtual void OnProceeding();
796 
807  virtual void OnAlerting(
808  bool withMedia
809  );
810  virtual void OnAlerting(); // For backward compatibility
811 
822  virtual PBoolean SetAlerting(
823  const PString & calleeName,
824  PBoolean withMedia
825  );
826 
843  virtual AnswerCallResponse OnAnswerCall(
844  const PString & callerName
845  );
846 
857  virtual void AnsweringCall(
858  AnswerCallResponse response
859  );
860 
875  virtual void OnConnected();
876 
887  virtual PBoolean SetConnected();
888 
900  virtual void OnEstablished();
901 
949  virtual bool OnTransferNotify(
950  const PStringToString & info,
951  const OpalConnection * transferringConnection
953  );
954 
963  virtual void Release(
964  CallEndReason reason = EndedByLocalUser,
965  bool synchronous = false
966  );
967 
985  virtual void OnReleased();
987 
998  virtual PString GetDestinationAddress();
999 
1009  virtual PBoolean ForwardCall(
1010  const PString & forwardParty
1011  );
1012 
1015  PSafePtr<OpalConnection> GetOtherPartyConnection() const;
1016 
1019  template <class cls> PSafePtr<cls> GetOtherPartyConnectionAs() const { return PSafePtrCast<OpalConnection, cls>(GetOtherPartyConnection()); }
1021 
1030  virtual OpalMediaFormatList GetMediaFormats() const;
1031 
1037 
1051  virtual void AdjustMediaFormats(
1052  bool local,
1053  const OpalConnection * otherConnection,
1054  OpalMediaFormatList & mediaFormats
1055  ) const;
1056 
1061  virtual PStringArray GetMediaCryptoSuites() const;
1062 
1070  virtual unsigned GetNextSessionID(
1071  const OpalMediaType & mediaType,
1072  bool isSource
1073  );
1074 
1078  virtual bool RequireSymmetricMediaStreams() const;
1079 
1086  virtual OpalMediaType::AutoStartMode GetAutoStart(
1087  const OpalMediaType & mediaType
1088  ) const;
1089 
1092  virtual void AutoStartMediaStreams(
1093  bool transfer = false
1094  );
1095 
1096 #if OPAL_T38_CAPABILITY
1097 
1099  virtual bool SwitchFaxMediaStreams(
1100  bool toT38
1101  );
1102 
1107  virtual void OnSwitchedFaxMediaStreams(
1108  bool toT38,
1109  bool success
1110  );
1111 
1116  virtual bool OnSwitchingFaxMediaStreams(
1117  bool toT38
1118  );
1119 #endif // OPAL_T38_CAPABILITY
1120 
1124  const OpalMediaFormat & mediaFormat,
1125  unsigned sessionID,
1126  bool isSource
1127  );
1128 
1131  bool CloseMediaStream(
1132  unsigned sessionId,
1133  bool source
1134  );
1135 
1138  bool CloseMediaStream(
1139  OpalMediaStreamPtr stream
1140  );
1141 
1149  bool RemoveMediaStream(
1150  OpalMediaStream & strm
1151  );
1152 
1155  virtual void StartMediaStreams();
1156 
1159  virtual void CloseMediaStreams();
1160 
1163  virtual void PauseMediaStreams(
1164  bool paused
1165  );
1166 
1169  virtual void OnPauseMediaStream(
1170  OpalMediaStream & strm,
1171  bool paused
1172  );
1173 
1187  const OpalMediaFormat & mediaFormat,
1188  unsigned sessionID,
1189  PBoolean isSource
1190  );
1191 
1199  const PString & streamID,
1200  bool source
1201  ) const;
1202 
1209  unsigned sessionId,
1210  bool source
1211  ) const;
1212 
1224  const OpalMediaType & mediaType,
1225  bool source,
1226  OpalMediaStreamPtr previous = NULL
1227  ) const;
1228 
1229 #if OPAL_STATISTICS
1230  bool GetStatistics(
1232  const OpalMediaType & mediaType,
1233  bool source,
1234  OpalMediaStatistics & statistics
1235  ) const;
1236 #endif // OPAL_STATISTICS
1237 
1249  virtual PBoolean OnOpenMediaStream(
1250  OpalMediaStream & stream
1251  );
1252 
1257  virtual void OnClosedMediaStream(
1258  const OpalMediaStream & stream
1259  );
1260 
1265  virtual void OnFailedMediaStream(
1266  bool fromRemote,
1267  const PString & reason
1268  );
1269 
1278  virtual void OnPatchMediaStream(
1279  PBoolean isSource,
1280  OpalMediaPatch & patch
1281  );
1282 
1287  virtual void OnStartMediaPatch(
1288  OpalMediaPatch & patch
1289  );
1290 
1295  virtual void OnStopMediaPatch(
1296  OpalMediaPatch & patch
1297  );
1298 
1314  virtual bool OnMediaFailed(
1315  unsigned sessionId
1316  );
1317 
1320  bool AllMediaFailed() const;
1321 
1327  virtual bool OnMediaCommand(
1328  OpalMediaStream & stream,
1329  const OpalMediaCommand & command
1330  );
1331 
1337  virtual bool ExecuteMediaCommand(
1338  const OpalMediaCommand & command,
1339  bool aync = false
1340  ) const;
1341 
1351  virtual bool GetMediaTransportAddresses(
1352  OpalConnection & otherConnection,
1353  unsigned sessionId,
1354  const OpalMediaType & mediaType,
1355  OpalTransportAddressArray & transports
1356  ) const;
1357 
1361  virtual PBoolean SetAudioVolume(
1362  PBoolean source,
1363  unsigned percentage
1364  );
1365 
1369  virtual PBoolean GetAudioVolume(
1370  PBoolean source,
1371  unsigned & percentage
1372  );
1373 
1376  virtual bool SetAudioMute(
1377  bool source,
1378  bool mute
1379  );
1380 
1383  virtual bool GetAudioMute(
1384  bool source,
1385  bool & mute
1386  );
1387 
1391  virtual unsigned GetAudioSignalLevel(
1392  PBoolean source
1393  );
1395 
1402  ) const;
1403 
1406  virtual bool SetBandwidthAvailable(
1408  OpalBandwidth availableBandwidth
1409  );
1410 
1414  virtual bool SetBandwidthAllocated(
1416  OpalBandwidth newBandwidth
1417  );
1418 
1425  ) const;
1426 
1435  virtual bool SetBandwidthUsed(
1437  OpalBandwidth releasedBandwidth,
1438  OpalBandwidth requiredBandwidth
1439  );
1441 
1444  P_DECLARE_TRACED_ENUM(SendUserInputModes,
1445  SendUserInputAsQ931,
1446  SendUserInputAsString,
1447  SendUserInputAsTone,
1448  SendUserInputAsRFC2833,
1449  SendUserInputAsInlineRFC2833 = SendUserInputAsRFC2833, // For backward compatibility
1450  SendUserInputInBand,
1451  SendUserInputAsProtocolDefault
1452  );
1453 
1456  virtual void SetSendUserInputMode(SendUserInputModes mode);
1457 
1460  virtual SendUserInputModes GetSendUserInputMode() const { return m_sendUserInputMode; }
1461 
1467  virtual SendUserInputModes GetRealSendUserInputMode() const { return GetSendUserInputMode(); }
1468 
1475  virtual PBoolean SendUserInputString(
1476  const PString & value
1477  );
1478 
1492  virtual PBoolean SendUserInputTone(
1493  char tone,
1494  unsigned duration = 0
1495  );
1496 
1503  virtual void OnUserInputString(
1504  const PString & value
1505  );
1506  void OnUserInputStringCallback(PString value) { OnUserInputString(value); }
1507 
1522  virtual void OnUserInputTone(
1523  char tone,
1524  unsigned duration
1525  );
1526 
1531  unsigned duration = 500
1532  ) { SendUserInputTone('!', duration); }
1533 
1536  virtual PString GetUserInput(
1537  unsigned timeout = 30
1538  );
1539 
1544  virtual void SetUserInput(
1545  const PString & input
1546  );
1547 
1550  virtual PString ReadUserInput(
1551  const char * terminators = "YX#\r\n",
1552  unsigned lastDigitTimeout = 4,
1553  unsigned firstDigitTimeout = 30
1554  );
1555 
1562  virtual PBoolean PromptUserInput(
1563  PBoolean play
1564  );
1566 
1580  virtual bool GetConferenceState(
1581  OpalConferenceState * state
1582  ) const;
1583 
1596  virtual bool RequestPresentationRole(
1597  bool release
1598  );
1599 
1607  virtual bool OnChangedPresentationRole(
1608  const PString & newChairURI,
1609  bool request
1610  );
1611 
1616  virtual bool HasPresentationRole() const;
1617 
1622  virtual bool GarbageCollection();
1624 
1629  OpalEndPoint & GetEndPoint() const { return m_endpoint; }
1630 
1633  OpalCall & GetCall() const { return m_ownerCall; }
1634 
1637  const PString & GetToken() const { return m_callToken; }
1638 
1643  virtual void SetToken(
1644  const PString & newToken
1645  );
1646 
1649  PBoolean IsOriginating() const { return m_originating; }
1650 
1653  const PTime & GetPhaseTime(Phases phase) const { return m_phaseTime[phase]; }
1654 
1657  const PTime & GetSetupUpTime() const { return m_phaseTime[SetUpPhase]; }
1658 
1661  const PTime & GetAlertingTime() const { return m_phaseTime[AlertingPhase]; }
1662 
1667  const PTime & GetConnectionStartTime() const { return m_phaseTime[ConnectedPhase]; }
1668 
1671  const PTime & GetConnectionEndTime() const { return m_phaseTime[ReleasingPhase]; }
1672 
1675  const OpalProductInfo & GetProductInfo() const { return m_productInfo; }
1676 
1680  const OpalProductInfo & info
1681  ) { m_productInfo = info; }
1682 
1685  virtual PString GetPrefixName() const;
1686 
1689  const PString & GetLocalPartyName() const { return m_localPartyName; }
1690 
1693  virtual void SetLocalPartyName(const PString & name);
1694 
1697  virtual PString GetLocalPartyURL() const;
1698 
1701  const PString & GetDisplayName() const { return m_displayName; }
1702 
1705  void SetDisplayName(const PString & name) { m_displayName = name; }
1706 
1712  virtual bool IsPresentationBlocked() const;
1713 
1716  const PString & GetRemotePartyName() const { return m_remotePartyName; }
1717 
1720  void SetRemotePartyName(const PString & name) { m_remotePartyName = name; }
1721 
1730  const PString & GetRemotePartyNumber() const { return m_remotePartyNumber; }
1731 
1735 
1742  virtual PString GetRemotePartyURL() const;
1743 
1749  virtual PString GetRemoteIdentity() const { return GetRemotePartyURL(); }
1750 
1751  // Deprecated - backward compatibility only
1752  P_DEPRECATED PString GetRemotePartyAddress() const { return GetRemotePartyURL(); }
1754  // Deprecated - backward compatibility only
1755  P_DEPRECATED const PString GetRemotePartyCallbackURL() const { return GetRemotePartyURL(); }
1760  PCaselessString GetRemoteApplication() const { return m_remoteProductInfo.AsString(); }
1761 
1765 
1769 
1773  const PString & GetRedirectingParty() const { return m_redirectingParty; }
1774 
1778  void SetRedirectingParty(const PString & party) { m_redirectingParty = party; }
1779 
1786  const PString & GetCalledPartyName() const { return m_calledPartyName; }
1787 
1794  void SetCalledPartyName(const PString & name) { m_calledPartyName = name; }
1795 
1802  const PString & GetCalledPartyNumber() const { return m_calledPartyNumber; }
1803 
1811  virtual PString GetCalledPartyURL();
1812 
1815  virtual PMultiPartList GetExtraCallInfo() const { return PMultiPartList(); }
1816 
1817  /* Internal function to copy party names from "network" connection to
1818  "non-network" connection such as OpalPCSSConnection. This allows
1819  the non-network GetRemoteAddress() function and its ilk to return
1820  the intuitive value, i.e. the value from the OTHER connection.
1821  */
1822  void CopyPartyNames(const OpalConnection & other);
1823 
1824 
1838  virtual PString GetAlertingType() const;
1839 
1853  virtual bool SetAlertingType(const PString & info);
1854 
1862  virtual PString GetCallInfo() const;
1863 
1872  virtual PString GetSupportedFeatures() const;
1873 
1877  unsigned GetMinAudioJitterDelay() const { return m_jitterParams.m_minJitterDelay; }
1878 
1882  unsigned GetMaxAudioJitterDelay() const { return m_jitterParams.m_maxJitterDelay; }
1883 
1887  unsigned minDelay,
1888  unsigned maxDelay
1889  );
1890 
1894 
1895 #if OPAL_AEC
1896 
1898  OpalEchoCanceler * GetEchoCanceler() const { return m_echoCanceler; }
1899 #endif
1900 
1904  virtual PString GetIdentifier() const;
1905 
1914  virtual PINDEX GetMaxRtpPayloadSize() const;
1916 
1918  const StringOptions & GetStringOptions() const { return m_stringOptions; }
1919 
1921  void SetStringOptions(
1922  const StringOptions & options,
1923  bool overwrite
1924  );
1925 
1927  virtual void OnApplyStringOptions();
1928 
1929 #if OPAL_HAS_MIXER
1930  virtual void EnableRecording();
1931  virtual void DisableRecording();
1932 
1934  void InternalOnRecordAudio(PString key, PAutoPtr<RTP_DataFrame> frame);
1935 #if OPAL_VIDEO
1937  void InternalOnRecordVideo(PString key, PAutoPtr<RTP_DataFrame> frame);
1938 #endif
1939 
1940  virtual void OnStartRecording(OpalMediaPatch * patch);
1941  virtual void OnStopRecording(OpalMediaPatch * patch);
1942 #endif
1943 
1944  bool InternalOnConnected();
1945  bool InternalOnEstablished();
1946  void InternalSetAsOriginating();
1947 
1948  bool InternalRelease(CallEndReason reason);
1949  void InternalOnReleased();
1951 
1952  void InternalCreatedMediaTransport(const OpalMediaTransportPtr & transport) { m_mediaTransports.Append(transport); }
1953 
1954  protected:
1955  // Member variables
1958 
1959  private:
1960  PDECLARE_MUTEX( m_phaseMutex);
1961  Phases m_phase;
1962 
1963  protected:
1964  PString m_callToken;
1965  PBoolean m_originating;
1967  PString m_localPartyName;
1968  PString m_displayName;
1978  SendUserInputModes m_sendUserInputMode;
1981 
1983 #if OPAL_AEC
1984  OpalEchoCanceler * m_echoCanceler;
1985 #endif
1987 
1989 
1990  struct StreamKey : PKey<uint64_t>
1991  {
1992  StreamKey(unsigned sessionID, bool isSource)
1993  : PKey<uint64_t>(sessionID + (isSource ? 0x100000000ULL : 0x200000000ULL))
1994  { }
1995  StreamKey(const OpalMediaStream & stream)
1996  : PKey<uint64_t>(stream.GetSessionID() + (stream.IsSource() ? 0x100000000ULL : 0x200000000ULL))
1997  { }
1998  PObject * Clone() const { return new StreamKey(*this); }
1999  };
2000  typedef PSafeDictionary<StreamKey, OpalMediaStream> StreamDict;
2003  PSafeList<OpalMediaTransport> m_mediaTransports;
2006 
2010  // The In-Band DTMF detector. This is used inside an audio filter which is
2011  // added to the audio channel.
2012 #if OPAL_PTLIB_DTMF
2013  PDTMFDecoder m_dtmfDecoder;
2014  bool m_detectInBandDTMF;
2015  unsigned m_dtmfScaleMultiplier;
2016  unsigned m_dtmfScaleDivisor;
2017  PNotifier m_dtmfDetectNotifier;
2018  PDECLARE_NOTIFIER(RTP_DataFrame, OpalConnection, OnDetectInBandDTMF);
2019 
2020  bool m_sendInBandDTMF;
2021  OpalMediaFormat m_dtmfSendFormat;
2022  PBYTEArray m_inBandDTMF;
2023  PINDEX m_emittedInBandDTMF;
2024  PDECLARE_MUTEX(m_inBandMutex);
2025  PNotifier m_dtmfSendNotifier;
2026  PDECLARE_NOTIFIER(RTP_DataFrame, OpalConnection, OnSendInBandDTMF);
2027 #endif
2028 
2030 
2031 #if OPAL_HAS_MIXER
2032  PString m_recordingFilename;
2034 #if OPAL_VIDEO
2035  PNotifier m_recordVideoNotifier;
2036 #endif
2037 #endif
2038 
2040 
2041 #if OPAL_SCRIPT
2042  PString m_scriptTableName;
2043  PDECLARE_ScriptFunctionNotifier(OpalConnection, ScriptRelease);
2044  PDECLARE_ScriptFunctionNotifier(OpalConnection, ScriptSetOption);
2045  PDECLARE_ScriptFunctionNotifier(OpalConnection, ScriptGetLocalPartyURL);
2046  PDECLARE_ScriptFunctionNotifier(OpalConnection, ScriptGetRemotePartyURL);
2047  PDECLARE_ScriptFunctionNotifier(OpalConnection, ScriptGetCalledPartyURL);
2048  PDECLARE_ScriptFunctionNotifier(OpalConnection, ScriptGetRedirectingParty);
2049 #endif // OPAL_SCRIPT
2050 
2051  // A version of PTime where default constructor creates invalid times
2052  class ZeroTime : public PTime
2053  {
2054  public:
2055  ZeroTime() : PTime(0) { }
2056  };
2057  ZeroTime m_phaseTime[NumPhases];
2058 
2059  std::set<unsigned> m_mediaSessionFailed;
2060  PDECLARE_MUTEX( m_mediaSessionFailedMutex);
2062 
2063  private:
2064  P_REMOVE_VIRTUAL(PBoolean, OnIncomingConnection(unsigned int), false);
2065  P_REMOVE_VIRTUAL(PBoolean, OnIncomingConnection(), false);
2066  P_REMOVE_VIRTUAL(PBoolean, IsConnectionOnHold(), false);
2067  P_REMOVE_VIRTUAL_VOID(OnMediaPatchStart(unsigned, bool));
2068  P_REMOVE_VIRTUAL_VOID(OnMediaPatchStop(unsigned, bool));
2069  P_REMOVE_VIRTUAL_VOID(AdjustMediaFormats(OpalMediaFormatList &) const);
2070  P_REMOVE_VIRTUAL_VOID(AdjustMediaFormats(OpalMediaFormatList &, OpalConnection *) const);
2071  P_REMOVE_VIRTUAL_VOID(AdjustMediaFormats(bool,OpalMediaFormatList &,OpalConnection *) const);
2072  P_REMOVE_VIRTUAL_VOID(PreviewPeerMediaFormats(const OpalMediaFormatList &));
2073  P_REMOVE_VIRTUAL(bool, HoldConnection(), false);
2074  P_REMOVE_VIRTUAL(bool, RetrieveConnection(), false);
2075  P_REMOVE_VIRTUAL(bool, IsConnectionOnHold(bool), false);
2076  P_REMOVE_VIRTUAL_VOID(ApplyStringOptions(OpalConnection::StringOptions &));
2077  P_REMOVE_VIRTUAL(PBoolean, IsMediaBypassPossible(unsigned) const, false);
2078  P_REMOVE_VIRTUAL(bool, OnTransferNotify(const PStringToString &), false);
2079  P_REMOVE_VIRTUAL(OpalMediaSession *, CreateMediaSession(unsigned, const OpalMediaType &), NULL);
2080  P_REMOVE_VIRTUAL(PBoolean, SetBandwidthAvailable(unsigned, PBoolean), false);
2081  P_REMOVE_VIRTUAL(unsigned, GetBandwidthUsed() const, 0);
2082  P_REMOVE_VIRTUAL(PBoolean, SetBandwidthUsed(unsigned, unsigned), false);
2083  P_REMOVE_VIRTUAL_VOID(OnSwitchedFaxMediaStreams(bool));
2084  P_REMOVE_VIRTUAL(bool, CloseMediaStream(OpalMediaStream &),false);
2085  P_REMOVE_VIRTUAL(bool,GetMediaTransportAddresses(const OpalMediaType&,OpalTransportAddressArray&) const,false);
2086  P_REMOVE_VIRTUAL(bool,GetMediaTransportAddresses(OpalConnection&,const OpalMediaType&,OpalTransportAddressArray &) const,false);
2087 #if OPAL_PTLIB_NAT
2088  P_REMOVE_VIRTUAL(PNatMethod *, GetNatMethod(const PIPSocket::Address &) const,NULL);
2089 #endif
2090  P_REMOVE_VIRTUAL(bool,Hold(bool,bool),false);
2091  P_REMOVE_VIRTUAL(bool,ExecuteMediaCommand(const OpalMediaCommand &,unsigned,const OpalMediaType &) const,0);
2092  P_REMOVE_VIRTUAL(bool,OnMediaFailed(unsigned,bool),false);
2093 };
2094 
2095 #endif // OPAL_OPAL_CONNECTION_H
2096 
2097 
2098 // End of File ///////////////////////////////////////////////////////////////
void ExtractFromString(PString &str)
PString m_callToken
Definition: connection.h:1968
const PString & GetCalledPartyNumber() const
Definition: connection.h:1806
Definition: connection.h:523
const PString & GetCalledPartyName() const
Definition: connection.h:1790
virtual bool OnTransferNotify(const PStringToString &info, const OpalConnection *transferringConnection)
void SetProductInfo(const OpalProductInfo &info)
Definition: connection.h:1683
virtual void OnReleased()
bool GetStatistics(const OpalMediaType &mediaType, bool source, OpalMediaStatistics &statistics) const
Get media statistics of the type, and of the specifed direction.
virtual void OnUserInputString(const PString &value)
Definition: endpoint.h:65
P_DEPRECATED const PString GetRemotePartyCallbackURL() const
Definition: connection.h:1759
PCaselessString name
Definition: connection.h:386
Definition: connection.h:524
virtual void OnUserInputTone(char tone, unsigned duration)
virtual bool SetBandwidthUsed(OpalBandwidth::Direction dir, OpalBandwidth releasedBandwidth, OpalBandwidth requiredBandwidth)
virtual void OnHold(bool fromRemote, bool onHold)
virtual bool SetBandwidthAvailable(OpalBandwidth::Direction dir, OpalBandwidth availableBandwidth)
Definition: connection.h:519
virtual bool ExecuteMediaCommand(const OpalMediaCommand &command, bool aync=false) const
virtual OpalMediaStream * CreateMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, PBoolean isSource)
virtual void SetToken(const PString &newToken)
PSafeList< OpalMediaTransport > m_mediaTransports
Definition: connection.h:2007
virtual bool OnChangedPresentationRole(const PString &newChairURI, bool request)
OpalEndPoint & GetEndPoint() const
Definition: connection.h:1633
void ClearCall(CallEndReason reason=EndedByLocalUser, PSyncPoint *sync=NULL)
virtual void OnAlerting()
const PString & GetDisplayName() const
Definition: connection.h:1705
Definition: connection.h:525
ZeroTime m_phaseTime[NumPhases]
Definition: connection.h:2061
ZeroTime()
Definition: connection.h:2059
Options
Definition: connection.h:500
Definition: mediacmd.h:43
OpalCall & GetCall() const
Definition: connection.h:1637
void SetAudioJitterDelay(unsigned minDelay, unsigned maxDelay)
virtual PBoolean ForwardCall(const PString &forwardParty)
virtual void ClearCallSynchronous(PSyncPoint *sync, CallEndReason reason=EndedByLocalUser)
PCaselessString GetRemoteApplication() const
Definition: connection.h:1764
void InternalOnRecordAudio(PString key, PAutoPtr< RTP_DataFrame > frame)
Definition: mediasession.h:647
OpalProductInfo m_remoteProductInfo
Definition: connection.h:1975
WORD manufacturerCode
Definition: connection.h:392
bool InternalOnConnected()
PCaselessString version
Definition: connection.h:387
CallEndReason GetCallEndReason() const
virtual PString GetIdentifier() const
PSafePtr< OpalMediaStream > OpalMediaStreamPtr
Definition: mediastrm.h:493
virtual OpalMediaFormatList GetLocalMediaFormats()
Definition: connection.h:527
friend ostream & operator<<(ostream &strm, const OpalProductInfo &info)
Definition: connection.h:517
virtual PBoolean SendUserInputTone(char tone, unsigned duration=0)
unsigned q931
Definition: connection.h:478
OpalSilenceDetector * GetSilenceDetector() const
Definition: connection.h:1897
void SetStringOptions(const StringOptions &options, bool overwrite)
Set the string options associated with this connection.
virtual void OnPauseMediaStream(OpalMediaStream &strm, bool paused)
virtual void OnFailedMediaStream(bool fromRemote, const PString &reason)
virtual PString GetLocalPartyURL() const
Definition: mediatype.h:66
OpalMediaFormat m_filterMediaFormat
Definition: connection.h:1990
OpalCall & m_ownerCall
Definition: connection.h:1960
PString m_remotePartyNumber
Definition: connection.h:1976
virtual AnswerCallResponse OnAnswerCall(const PString &callerName)
bool InternalOnEstablished()
void SetRedirectingParty(const PString &party)
Definition: connection.h:1782
Definition: jitter.h:55
PString m_redirectingParty
Definition: connection.h:1977
OpalConnection(OpalCall &call, OpalEndPoint &endpoint, const PString &token, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
virtual bool IsOnHold(bool fromRemote) const
virtual void EnableRecording()
OpalMediaFormatList m_localMediaFormats
Definition: connection.h:1992
PString m_calledPartyName
Definition: connection.h:1980
void OnUserInputStringCallback(PString value)
Definition: connection.h:1510
virtual PString GetUserInput(unsigned timeout=30)
virtual void SetUserInput(const PString &input)
Definition: connection.h:511
PBoolean m_originating
Definition: connection.h:1969
PString m_remotePartyName
Definition: connection.h:1973
virtual bool GetConferenceState(OpalConferenceState *state) const
virtual void OnPatchMediaStream(PBoolean isSource, OpalMediaPatch &patch)
Definition: connection.h:518
unsigned m_minJitterDelay
Minimum delay in milliseconds.
Definition: jitter.h:57
virtual PBoolean OnIncomingConnection(unsigned int options, OpalConnection::StringOptions *stringOptions)
OpalBandwidth GetBandwidthAvailable(OpalBandwidth::Direction dir) const
void SetDisplayName(const PString &name)
Definition: connection.h:1709
PString oid
Definition: connection.h:394
Definition: silencedetect.h:43
P_DECLARE_TRACED_ENUM_EX(CallEndReasonCodes, NumCallEndReasons, EndedByLocalUser, 0, EndedByNoAccept, EndedByAnswerDenied, EndedByRemoteUser, EndedByRefusal, EndedByNoAnswer, EndedByCallerAbort, EndedByTransportFail, EndedByConnectFail, EndedByGatekeeper, EndedByNoUser, EndedByNoBandwidth, EndedByCapabilityExchange, EndedByCallForwarded, EndedBySecurityDenial, EndedByLocalBusy, EndedByLocalCongestion, EndedByRemoteBusy, EndedByRemoteCongestion, EndedByUnreachable, EndedByNoEndPoint, EndedByHostOffline, EndedByTemporaryFailure, EndedByQ931Cause, EndedByDurationLimit, EndedByInvalidConferenceID, EndedByNoDialTone, EndedByNoRingBackTone, EndedByOutOfService, EndedByAcceptingCallWaiting, EndedByGkAdmissionFailed, EndedByMediaFailed, EndedByCallCompletedElsewhere, EndedByCertificateAuthority, EndedByIllegalAddress, EndedByCustomCode)
Definition: connection.h:510
PString m_calledPartyNumber
Definition: connection.h:1979
OpalSilenceDetector * m_silenceDetector
Definition: connection.h:1986
virtual PBoolean SetConnected()
Definition: connection.h:503
void SetQ931Cause(unsigned v)
Definition: connection.h:693
Definition: rfc2833.h:61
void operator=(const OpalProductInfo &other)
virtual PString GetRemotePartyURL() const
virtual void OnConnected()
virtual void OnStartRecording(OpalMediaPatch *patch)
virtual void Release(CallEndReason reason=EndedByLocalUser, bool synchronous=false)
void SetCalledPartyName(const PString &name)
Definition: connection.h:1798
unsigned custom
Definition: connection.h:479
virtual void OnStopMediaPatch(OpalMediaPatch &patch)
virtual void AnsweringCall(AnswerCallResponse response)
Definition: mediafmt.h:112
OpalEndPoint & m_endpoint
Definition: connection.h:1961
Definition: connection.h:502
std::set< unsigned > m_mediaSessionFailed
Definition: connection.h:2063
virtual PStringArray GetMediaCryptoSuites() const
PString m_recordingFilename
Definition: connection.h:2036
virtual PBoolean GetAudioVolume(PBoolean source, unsigned &percentage)
virtual void OnProceeding()
Definition: connection.h:507
virtual OpalMediaStreamPtr OpenMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource)
Definition: mediafmt.h:60
virtual bool RequireSymmetricMediaStreams() const
Definition: connection.h:530
__inline bool operator!=(const OpalProductInfo &other) const
Definition: connection.h:376
PNotifier m_recordVideoNotifier
Definition: connection.h:2039
virtual bool TransferConnection(const PString &remoteParty)
void SetPhase(Phases phaseToSet)
void PrintOn(ostream &strm) const
static const OpalProductInfo & Default()
Definition: rtp.h:540
virtual PString GetSupportedFeatures() const
virtual PBoolean SetAlerting(const PString &calleeName, PBoolean withMedia)
virtual void AutoStartMediaStreams(bool transfer=false)
virtual SendUserInputModes GetRealSendUserInputMode() const
Definition: connection.h:1471
PString GetCallEndReasonText() const
Definition: connection.h:648
Definition: patch.h:56
virtual bool GetMediaTransportAddresses(OpalConnection &otherConnection, unsigned sessionId, const OpalMediaType &mediaType, OpalTransportAddressArray &transports) const
virtual bool IsPresentationBlocked() const
const PTime & GetConnectionEndTime() const
Definition: connection.h:1675
P_DEPRECATED PString GetRemotePartyAddress() const
Definition: connection.h:1756
virtual void OnEstablished()
Definition: mediafmt.h:806
bool InternalRelease(CallEndReason reason)
BYTE t35CountryCode
Definition: connection.h:390
Direction
Definition: mediafmt.h:64
virtual PBoolean SetUpConnection()
OpalMediaType::AutoStartMap m_autoStartInfo
Definition: connection.h:2043
CallEndReason(CallEndReasonCodes reason=NumCallEndReasons, unsigned cause=0)
Definition: connection.h:463
Definition: call.h:62
virtual void SetLocalPartyName(const PString &name)
PCaselessString vendor
Definition: connection.h:385
const PString & GetRemotePartyNumber() const
Definition: connection.h:1734
void SetRemotePartyName(const PString &name)
Definition: connection.h:1724
void SetRemoteProductInfo(const OpalProductInfo &info)
Definition: connection.h:1772
virtual void AdjustMediaFormats(bool local, const OpalConnection *otherConnection, OpalMediaFormatList &mediaFormats) const
unsigned GetQ931Cause() const
Definition: connection.h:688
PCaselessString AsString() const
OpalMediaStreamPtr GetMediaStream(const PString &streamID, bool source) const
void InternalOnRecordVideo(PString key, PAutoPtr< RTP_DataFrame > frame)
CallEndReasonCodes code
Definition: connection.h:475
virtual bool RequestPresentationRole(bool release)
__inline Phases GetPhase() const
Definition: connection.h:619
__inline bool IsEstablished() const
Return true if connection is in the established phase.
Definition: connection.h:622
virtual bool HoldRemote(bool placeOnHold)
PSafePtr< OpalMediaTransport, PSafePtrMultiThreaded > OpalMediaTransportPtr
Definition: mediasession.h:605
const PTime & GetConnectionStartTime() const
Definition: connection.h:1671
const OpalProductInfo & GetRemoteProductInfo() const
Definition: connection.h:1768
OpalJitterBuffer::Params m_jitterParams
Definition: connection.h:2009
PString m_localPartyName
Definition: connection.h:1971
const PTime & GetAlertingTime() const
Definition: connection.h:1665
virtual bool SetAudioMute(bool source, bool mute)
StringOptions()
Definition: connection.h:533
virtual bool HasPresentationRole() const
Definition: connection.h:1994
virtual PString GetRemoteIdentity() const
Definition: connection.h:1753
Definition: rfc2833.h:108
void InternalSetAsOriginating()
PDECLARE_NOTIFIER(RTP_DataFrame, OpalConnection, OnRecordAudio)
ostream & operator<<(ostream &strm, OpalSilenceDetector::Mode mode)
virtual void OnStopRecording(OpalMediaPatch *patch)
virtual PBoolean OnSetUpConnection()
virtual SendUserInputModes GetSendUserInputMode() const
Definition: connection.h:1464
CallEndReason m_callEndReason
Definition: connection.h:1978
PCaselessString comments
Definition: connection.h:388
const PString & GetToken() const
Definition: connection.h:1641
void CopyPartyNames(const OpalConnection &other)
virtual bool SetBandwidthAllocated(OpalBandwidth::Direction dir, OpalBandwidth newBandwidth)
virtual PINDEX GetMaxRtpPayloadSize() const
const PTime & GetPhaseTime(Phases phase) const
Definition: connection.h:1657
Definition: connection.h:506
PSafePtr< OpalConnection > GetOtherPartyConnection() const
virtual PString GetDestinationAddress()
virtual void OnClosedMediaStream(const OpalMediaStream &stream)
virtual bool GetAudioMute(bool source, bool &mute)
Definition: connection.h:462
PSafePtr< cls > GetOtherPartyConnectionAs() const
Definition: connection.h:1023
static void SetCallEndReasonText(CallEndReasonCodes reasonCode, const PString &newText)
Definition: mediatype.h:109
OpalProductInfo m_productInfo
Definition: connection.h:1970
bool RemoveMediaStream(OpalMediaStream &strm)
OpalBandwidth m_rxBandwidthAvailable
Definition: connection.h:2011
virtual bool IsNetworkConnection() const =0
Definition: manager.h:66
Definition: connection.h:501
virtual unsigned GetAudioSignalLevel(PBoolean source)
virtual PString GetCallInfo() const
PBoolean IsOriginating() const
Definition: connection.h:1653
virtual PBoolean SendUserInputString(const PString &value)
bool CloseMediaStream(unsigned sessionId, bool source)
PString m_userInputString
Definition: connection.h:1983
virtual PString GetCalledPartyURL()
unsigned GetMaxAudioJitterDelay() const
Definition: connection.h:1886
void InternalExecuteMediaCommand(OpalMediaCommand *command)
void SendUserInputHookFlash(unsigned duration=500)
Definition: connection.h:1534
Definition: mediastrm.h:110
virtual bool SetAlertingType(const PString &info)
virtual PBoolean PromptUserInput(PBoolean play)
P_DECLARE_TRACED_ENUM(AnswerCallResponse, AnswerCallNow, AnswerCallDenied, AnswerCallPending, AnswerCallDeferred, AnswerCallAlertWithMedia, AnswerCallDeferredWithMedia, AnswerCallProgress, AnswerCallNowAndReleaseCurrent)
virtual PString GetAlertingType() const
virtual bool OnMediaFailed(unsigned sessionId)
Definition: connection.h:509
bool AllMediaFailed() const
PString m_remotePartyURL
Definition: connection.h:1974
Definition: connection.h:415
const PString & GetRemotePartyName() const
Definition: connection.h:1720
P_DECLARE_STREAMABLE_ENUM(Phases, UninitialisedPhase, SetUpPhase, ProceedingPhase, AlertingPhase, ConnectedPhase, EstablishedPhase, ForwardingPhase, ReleasingPhase, ReleasedPhase)
PString m_displayName
Definition: connection.h:1972
virtual void SetSendUserInputMode(SendUserInputModes mode)
virtual PString GetPrefixName() const
const PString & GetRedirectingParty() const
Definition: connection.h:1777
const PString & GetLocalPartyName() const
Definition: connection.h:1693
virtual bool OnMediaCommand(OpalMediaStream &stream, const OpalMediaCommand &command)
const OpalProductInfo & GetProductInfo() const
Definition: connection.h:1679
unsigned GetMinAudioJitterDelay() const
Definition: connection.h:1881
virtual PMultiPartList GetExtraCallInfo() const
Definition: connection.h:1819
virtual OpalMediaType::AutoStartMode GetAutoStart(const OpalMediaType &mediaType) const
__inline bool IsReleased() const
Return true if connection is in the established phase.
Definition: connection.h:625
const StringOptions & GetStringOptions() const
Get the string options associated with this connection.
Definition: connection.h:1922
virtual void OnApplyStringOptions()
Call back for connection to act on changed string options.
Definition: mediasession.h:210
const PTime & GetSetupUpTime() const
Definition: connection.h:1661
Definition: transports.h:151
Definition: transports.h:326
BYTE t35Extension
Definition: connection.h:391
bool operator==(const OpalProductInfo &other) const
StreamKey(unsigned sessionID, bool isSource)
Definition: connection.h:1996
virtual unsigned GetNextSessionID(const OpalMediaType &mediaType, bool isSource)
virtual void SetCallEndReason(CallEndReason reason)
virtual void StartMediaStreams()
virtual void PauseMediaStreams(bool paused)
void ExtractFromURL(PURL &url)
PNotifier m_recordAudioNotifier
Definition: connection.h:2037
__inline int AsInteger() const
Definition: connection.h:473
Definition: connection.h:522
virtual OpalMediaFormatList GetMediaFormats() const
virtual void CloseMediaStreams()
virtual OpalTransportAddress GetRemoteAddress() const
Definition: connection.h:1738
virtual bool GarbageCollection()
virtual PBoolean SetAudioVolume(PBoolean source, unsigned percentage)
Definition: connection.h:2056
StringOptions m_stringOptions
Definition: connection.h:2033
PSyncPoint m_userInputAvailable
Definition: connection.h:1984
PSafeDictionary< StreamKey, OpalMediaStream > StreamDict
Definition: connection.h:2004
virtual void DisableRecording()
SendUserInputModes m_sendUserInputMode
Definition: connection.h:1982
virtual void OnStartMediaPatch(OpalMediaPatch &patch)
Definition: connection.h:505
virtual PBoolean OnOpenMediaStream(OpalMediaStream &stream)
void InternalCreatedMediaTransport(const OpalMediaTransportPtr &transport)
Definition: connection.h:1956
PObject * Clone() const
Definition: connection.h:2002
Definition: connection.h:358
void InternalOnReleased()
unsigned m_maxJitterDelay
Maximum delay in milliseconds.
Definition: jitter.h:58
Definition: connection.h:515
virtual OpalBandwidth GetBandwidthUsed(OpalBandwidth::Direction dir) const
virtual PString ReadUserInput(const char *terminators="YX#\r\n", unsigned lastDigitTimeout=4, unsigned firstDigitTimeout=30)
StreamDict m_mediaStreams
Definition: connection.h:2005
OpalBandwidth m_txBandwidthAvailable
Definition: connection.h:2012
Definition: connection.h:521