35 #ifndef OPAL_OPAL_CONNECTION_H 36 #define OPAL_OPAL_CONNECTION_H 48 #include <ptclib/dtmf.h> 49 #include <ptlib/safecoll.h> 59 #include <ptclib/lua.h> 71 #define OPAL_URL_PARAM_PREFIX "OPAL-" 73 #define OPAL_OPT_AUTO_START "AutoStart" 74 #define OPAL_OPT_CALL_IDENTIFIER "Call-Identifier" 75 #define OPAL_OPT_CALLING_PARTY_URL "Calling-Party-URL" 76 #define OPAL_OPT_CALLING_PARTY_NUMBER "Calling-Party-Number" 77 #define OPAL_OPT_CALLING_PARTY_NAME "Calling-Party-Name" 78 #define OPAL_OPT_CALLING_PARTY_DOMAIN "Calling-Party-Domain" 79 #define OPAL_OPT_CALLING_DISPLAY_NAME "Calling-Display-Name" 80 #define OPAL_OPT_CALLED_PARTY_NAME "Called-Party-Name" 81 #define OPAL_OPT_CALLED_DISPLAY_NAME "Called-Display-Name" 82 #define OPAL_OPT_REDIRECTING_PARTY "Redirecting-Party" 83 #define OPAL_OPT_PRESENTATION_BLOCK "Presentation-Block" 84 #define OPAL_OPT_ORIGINATOR_ADDRESS "Originator-Address" 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" 400 ) : code(reason), q931(cause) { }
407 __inline
int AsInteger()
const {
return code|(q931<<8); }
426 NumAnswerCallResponses
435 FastStartOptionDisable = 0x0001,
436 FastStartOptionEnable = 0x0002,
437 FastStartOptionMask = 0x0003,
439 H245TunnelingOptionDisable = 0x0004,
440 H245TunnelingOptionEnable = 0x0008,
441 H245TunnelingOptionMask = 0x000c,
443 H245inSetupOptionDisable = 0x0010,
444 H245inSetupOptionEnable = 0x0020,
445 H245inSetupOptionMask = 0x0030,
447 DetectInBandDTMFOptionDisable = 0x0040,
448 DetectInBandDTMFOptionEnable = 0x0080,
449 DetectInBandDTMFOptionMask = 0x00c0,
451 RTPAggregationDisable = 0x0100,
452 RTPAggregationEnable = 0x0200,
453 RTPAggregationMask = 0x0300,
455 SendDTMFAsDefault = 0x0000,
456 SendDTMFAsString = 0x0400,
457 SendDTMFAsTone = 0x0800,
458 SendDTMFAsRFC2833 = 0x0c00,
459 SendDTMFMask = 0x0c00
481 const PString & token,
482 unsigned options = 0,
518 virtual bool IsNetworkConnection()
const = 0;
546 __inline
bool IsReleased()
const {
return m_phase >= ReleasingPhase; }
573 static void SetCallEndReasonText(
CallEndReasonCodes reasonCode,
const PString & newText);
579 virtual void SetCallEndReason(
594 PSyncPoint * sync = NULL
601 virtual void ClearCallSynchronous(
622 virtual bool TransferConnection(
623 const PString & remoteParty
642 virtual bool IsOnHold(
691 virtual PBoolean SetUpConnection() = 0;
696 virtual PBoolean OnSetUpConnection();
713 virtual void OnProceeding();
725 virtual void OnAlerting();
737 virtual PBoolean SetAlerting(
738 const PString & calleeName,
759 const PString & callerName
772 virtual void AnsweringCall(
790 virtual void OnConnected();
802 virtual PBoolean SetConnected();
815 virtual void OnEstablished();
864 virtual bool OnTransferNotify(
865 const PStringToString & info,
878 virtual void Release(
880 bool synchronous =
false 900 virtual void OnReleased();
913 virtual PString GetDestinationAddress();
924 virtual PBoolean ForwardCall(
925 const PString & forwardParty
930 PSafePtr<OpalConnection> GetOtherPartyConnection()
const;
934 template <
class cls> PSafePtr<cls>
GetOtherPartyConnectionAs()
const {
return PSafePtrCast<OpalConnection, cls>(GetOtherPartyConnection()); }
966 virtual void AdjustMediaFormats(
979 virtual unsigned GetNextSessionID(
996 virtual void AutoStartMediaStreams(
1003 virtual bool SwitchFaxMediaStreams(
1011 virtual void OnSwitchedFaxMediaStreams(
1020 virtual bool OnSwitchingFaxMediaStreams(
1035 virtual bool CloseMediaStream(
1042 virtual bool CloseMediaStream(
1053 bool RemoveMediaStream(
1059 virtual void StartMediaStreams();
1063 virtual void CloseMediaStreams();
1067 virtual void PauseMediaStreams(
1073 virtual void OnPauseMediaStream(
1103 const PString & streamID,
1144 virtual PBoolean OnOpenMediaStream(
1152 virtual void OnClosedMediaStream(
1164 virtual void OnPatchMediaStream(
1171 virtual void OnStartMediaPatch(
1177 virtual void OnStopMediaPatch(
1186 virtual bool OnMediaCommand(
1195 virtual void AttachRFC2833HandlerToPatch(PBoolean isSource,
OpalMediaPatch & patch);
1202 virtual PBoolean IsMediaBypassPossible(
1209 virtual PBoolean CreateVideoInputDevice(
1211 PVideoInputDevice * & device,
1212 PBoolean & autoDelete
1218 virtual PBoolean CreateVideoOutputDevice(
1221 PVideoOutputDevice * & device,
1222 PBoolean & autoDelete
1230 virtual bool SendVideoUpdatePicture(
1231 unsigned sessionID = 0,
1239 virtual PBoolean SetAudioVolume(
1247 virtual PBoolean GetAudioVolume(
1249 unsigned & percentage
1254 virtual bool SetAudioMute(
1261 virtual bool GetAudioMute(
1269 virtual unsigned GetAudioSignalLevel(
1284 virtual PBoolean SetBandwidthAvailable(
1285 unsigned newBandwidth,
1286 PBoolean force =
false 1293 virtual unsigned GetBandwidthUsed()
const;
1303 virtual PBoolean SetBandwidthUsed(
1304 unsigned releasedBandwidth,
1305 unsigned requiredBandwidth
1320 SendUserInputAsInlineRFC2833 = SendUserInputAsRFC2833
1347 virtual PBoolean SendUserInputString(
1348 const PString & value
1367 virtual PBoolean SendUserInputTone(
1369 unsigned duration = 0
1378 virtual void OnUserInputString(
1379 const PString & value
1388 virtual void OnUserInputTone(
1397 unsigned duration = 500
1398 ) { SendUserInputTone(
'!', duration); }
1402 virtual PString GetUserInput(
1403 unsigned timeout = 30
1410 virtual void SetUserInput(
1411 const PString & input
1416 virtual PString ReadUserInput(
1417 const char * terminators =
"#\r\n",
1418 unsigned lastDigitTimeout = 4,
1419 unsigned firstDigitTimeout = 30
1428 virtual PBoolean PromptUserInput(
1437 virtual bool GarbageCollection();
1488 ) { productInfo = info; }
1492 virtual PString GetPrefixName()
const;
1500 virtual void SetLocalPartyName(
const PString &
name);
1504 virtual PString GetLocalPartyURL()
const;
1519 virtual bool IsPresentationBlocked()
const;
1556 virtual PString GetRemotePartyURL()
const;
1604 virtual PString GetCalledPartyURL();
1627 virtual PString GetAlertingType()
const;
1642 virtual bool SetAlertingType(
const PString & info);
1651 virtual PString GetCallInfo()
const;
1665 void SetAudioJitterDelay(
1683 virtual PString GetIdentifier()
const;
1693 virtual PINDEX GetMaxRtpPayloadSize()
const;
1700 {
return mediaTransportAddresses; }
1713 void SetStringOptions(
1719 virtual void OnApplyStringOptions();
1723 virtual void EnableRecording();
1724 virtual void DisableRecording();
1732 virtual bool TransmitInternalIM(
1740 virtual void OnReceiveInternalIM(
1748 virtual bool TransmitExternalIM(
1756 virtual bool OnReceiveExternalIM(
1765 RFC4103Context & GetRFC4103Context(PINDEX i) {
return m_rfc4103Context[i]; };
1773 void OnConnectedInternal();
1791 PMutex m_phaseMutex;
1831 PDTMFDecoder m_dtmfDecoder;
1832 bool m_detectInBandDTMF;
1833 unsigned m_dtmfScaleMultiplier;
1834 unsigned m_dtmfScaleDivisor;
1835 PNotifier m_dtmfDetectNotifier;
1838 bool m_sendInBandDTMF;
1840 PBYTEArray m_inBandDTMF;
1841 PINDEX m_emittedInBandDTMF;
1842 PMutex m_inBandMutex;
1843 PNotifier m_dtmfSendNotifier;
1889 e_SwitchingFromFaxMediaStreams
1890 } m_faxMediaStreamsSwitchState;
1896 bool m_luaScriptLoaded;
1900 PLUA_BINDING2(LuaSetOption,
"SetOption")
1902 PLUA_DECLARE_FUNCTION(LuaSetOption);
1914 P_REMOVE_VIRTUAL(PBoolean, OnIncomingConnection(
unsigned int),
false);
1915 P_REMOVE_VIRTUAL(PBoolean, OnIncomingConnection(),
false);
1916 P_REMOVE_VIRTUAL(PBoolean, IsConnectionOnHold(),
false);
1917 P_REMOVE_VIRTUAL_VOID(OnMediaPatchStart(
unsigned,
bool));
1918 P_REMOVE_VIRTUAL_VOID(OnMediaPatchStop(
unsigned,
bool));
1923 P_REMOVE_VIRTUAL(
bool, HoldConnection(),
false);
1924 P_REMOVE_VIRTUAL(
bool, RetrieveConnection(),
false);
1925 P_REMOVE_VIRTUAL(
bool, IsConnectionOnHold(
bool),
false);
1927 P_REMOVE_VIRTUAL(
bool, OnTransferNotify(
const PStringToString &),
false);
1928 P_REMOVE_VIRTUAL_VOID(OnSwitchedFaxMediaStreams(
bool));
1931 #endif // OPAL_OPAL_CONNECTION_H virtual SendUserInputModes GetRealSendUserInputMode() const
Definition: connection.h:1339
void SetProductInfo(const OpalProductInfo &info)
Definition: connection.h:1486
CallEndReason callEndReason
Definition: connection.h:1806
unsigned GetBandwidthAvailable() const
Definition: connection.h:1278
Call cleared because the line is out of service,.
Definition: connection.h:391
Definition: endpoint.h:67
PCaselessString name
Definition: connection.h:323
Remote endpoint congested.
Definition: connection.h:381
The remote party host off line.
Definition: connection.h:384
There is agreement on having a call, usually means billing will apply.
Definition: connection.h:528
const PString & GetCalledPartyNumber() const
Definition: connection.h:1595
Answer the call with a h323 progress, or sip 183 session in progress, or ...
Definition: connection.h:425
const PString & GetLocalPartyName() const
Definition: connection.h:1496
OpalEndPoint & endpoint
Definition: connection.h:1788
__inline Phases GetPhase() const
Definition: connection.h:540
OpalSilenceDetector * GetSilenceDetector() const
Definition: connection.h:1672
unsigned m_VideoUpdateRequestsSent
Definition: connection.h:1862
ZeroTime()
Definition: connection.h:1909
Options
Definition: connection.h:434
const PTime & GetSetupUpTime() const
Definition: connection.h:1464
Call cleared due to an enforced duration limit.
Definition: connection.h:387
unsigned minAudioJitterDelay
Definition: connection.h:1824
__inline int AsInteger() const
Definition: connection.h:407
Definition: connection.h:1317
The remote says there is a phone ringing, somewhere.
Definition: connection.h:527
Local endpoint congested.
Definition: connection.h:379
WORD manufacturerCode
Definition: connection.h:329
PCaselessString version
Definition: connection.h:324
Definition: transports.h:703
CallEndReason GetCallEndReason() const
Definition: connection.h:564
As for AnswerCallPending but starts media channels.
Definition: connection.h:423
friend ostream & operator<<(ostream &strm, const OpalProductInfo &info)
Definition: connection.h:1313
unsigned q931
Definition: connection.h:410
CallEndReasonCodes
Definition: connection.h:361
AutoStartMap m_autoStartInfo
Definition: connection.h:1883
Definition: connection.h:1887
OpalMediaFormat m_filterMediaFormat
Definition: connection.h:1818
Remote endpoint stopped calling.
Definition: connection.h:369
PCaselessString AsString() const
Definition: connection.h:1316
OpalSilenceDetector * silenceDetector
Definition: connection.h:1814
As for AnswerCallPending but does not send Alerting PDU.
Definition: connection.h:422
void SetRedirectingParty(const PString &party)
Definition: connection.h:1566
PSafeList< OpalMediaStream > mediaStreams
Definition: connection.h:1822
PString m_redirectingParty
Definition: connection.h:1805
__inline bool IsReleased() const
Return true if connection is in the established phase.
Definition: connection.h:546
Call was forwarded using FACILITY message.
Definition: connection.h:376
OpalCall & GetCall() const
Definition: connection.h:1448
OpalMediaFormatList m_localMediaFormats
Definition: connection.h:1820
PString m_calledPartyName
Definition: connection.h:1808
CallEndReason(long reason)
Definition: connection.h:401
Call cleared because another call is answered.
Definition: connection.h:392
Hangup packet has been sent/received, media and control not yet stopped.
Definition: connection.h:531
unsigned GetMinAudioJitterDelay() const
Definition: connection.h:1656
Transport connection failed to establish call.
Definition: connection.h:371
PString remotePartyName
Definition: connection.h:1800
unsigned maxAudioJitterDelay
Definition: connection.h:1825
unsigned bandwidthAvailable
Definition: connection.h:1826
Has just sent/received the initial SETUP/INVITE packet.
Definition: connection.h:525
Could not find common capabilities.
Definition: connection.h:375
Could not reach the remote party.
Definition: connection.h:382
Answer the call continuing with the connection.
Definition: connection.h:419
The remote party is not running an endpoint.
Definition: connection.h:383
Local endpoint application cleared call.
Definition: connection.h:363
void SetDisplayName(const PString &name)
Definition: connection.h:1512
Local endpoint did not accept call OnIncomingCall()=false.
Definition: connection.h:364
Definition: silencedetect.h:43
Media is established, streams are all operational.
Definition: connection.h:529
PString m_calledPartyNumber
Definition: connection.h:1807
unsigned GetQ931Cause() const
Definition: connection.h:609
void SetQ931Cause(unsigned v)
Definition: connection.h:614
const PString & GetRemotePartyName() const
Definition: connection.h:1523
PCaselessString GetRemoteApplication() const
Definition: connection.h:1574
Definition: connection.h:418
Transport error cleared call.
Definition: connection.h:370
SendUserInputModes
Definition: connection.h:1311
Refuse the call sending a release complete.
Definition: connection.h:420
Indicates the OpalConnection instance has just been constructed.
Definition: connection.h:524
PString callToken
Definition: connection.h:1795
PString m_recordingFilename
Definition: connection.h:1854
__inline bool IsEstablished() const
Return true if connection is in the established phase.
Definition: connection.h:543
AnswerCallResponse
Definition: connection.h:417
Definition: connection.h:462
PNotifier m_recordVideoNotifier
Definition: connection.h:1857
unsigned preferredSessionId
Definition: connection.h:1866
const PString & GetRemotePartyNumber() const
Definition: connection.h:1537
Definition: connection.h:1888
Definition: connection.h:1318
static OpalProductInfo & Default()
const PString & GetDisplayName() const
Definition: connection.h:1508
BYTE t35CountryCode
Definition: connection.h:327
const PString & GetRemotePartyAddress() const
Definition: connection.h:1544
CallEndReason(CallEndReasonCodes reason=NumCallEndReasons, unsigned cause=0)
Definition: connection.h:397
PCaselessString vendor
Definition: connection.h:322
Remote endpoint did not answer in required time.
Definition: connection.h:368
void SetRemotePartyName(const PString &name)
Definition: connection.h:1527
Call cleared due to missing ringback tone.
Definition: connection.h:390
OpalMediaType::AutoStartMode autoStart
Definition: connection.h:1867
Definition: connection.h:1870
PMutex m_mutex
Definition: connection.h:1880
const PTime & GetConnectionStartTime() const
Definition: connection.h:1474
Local endpoint busy.
Definition: connection.h:378
CallEndReasonCodes code
Definition: connection.h:409
Call cleared due to missing dial tone.
Definition: connection.h:389
PString displayName
Definition: connection.h:1799
const PTime & GetAlertingTime() const
Definition: connection.h:1468
Phases
Definition: connection.h:523
Definition: rfc2833.h:112
virtual SendUserInputModes GetSendUserInputMode() const
Definition: connection.h:1332
OpalProductInfo productInfo
Definition: connection.h:1797
Remote endpoint refused call.
Definition: connection.h:367
PString remotePartyURL
Definition: connection.h:1801
virtual OpalTransport & GetTransport() const
Definition: connection.h:1695
PCaselessString comments
Definition: connection.h:325
Send an Alerting PDU and wait for AnsweringCall()
Definition: connection.h:421
PString remotePartyNumber
Definition: connection.h:1803
Definition: echocancel.h:51
const StringOptions & GetStringOptions() const
Get the string options associated with this connection.
Definition: connection.h:1710
void SetRemotePartyAddress(const PString &addr)
Definition: connection.h:1548
Definition: connection.h:396
const PString GetRemotePartyCallbackURL() const
Definition: connection.h:1569
MediaAddressesDict mediaTransportAddresses
Definition: connection.h:1821
PBoolean IsOriginating() const
Definition: connection.h:1456
Definition: connection.h:1315
PString remotePartyAddress
Definition: connection.h:1804
SendUserInputModes sendUserInputMode
Definition: connection.h:1810
PDICTIONARY(H323CallIdentityDict, PString, H323Connection)
Call failed as could not get enough bandwidth.
Definition: connection.h:374
MediaAddressesDict & GetMediaTransportAddresses()
Definition: connection.h:1699
void SendUserInputHookFlash(unsigned duration=500)
Definition: connection.h:1396
Call failed a security check and was ended.
Definition: connection.h:377
OpalCall & ownerCall
Definition: connection.h:1787
PString localPartyName
Definition: connection.h:1798
const PString & GetRedirectingParty() const
Definition: connection.h:1561
As for AnswerCallDeferred but starts media channels.
Definition: connection.h:424
const PString & GetCalledPartyName() const
Definition: connection.h:1587
bool m_initialised
Definition: connection.h:1879
Definition: connection.h:1314
Call cleared due to invalid conference ID.
Definition: connection.h:388
Local endpoint declined to answer call.
Definition: connection.h:365
Definition: connection.h:353
OpalProductInfo remoteProductInfo
Definition: connection.h:1802
Media and control streams have been terminated.
Definition: connection.h:532
OpalEndPoint & GetEndPoint() const
Definition: connection.h:1444
The receipt of SETUP/INVITE has been acknowledged.
Definition: connection.h:526
Gatekeeper has cleared call.
Definition: connection.h:372
PString GetCallEndReasonText() const
Definition: connection.h:569
Definition: connection.h:1865
const PString & GetToken() const
Definition: connection.h:1452
Definition: transports.h:149
BYTE t35Extension
Definition: connection.h:328
PSyncPoint userInputAvailable
Definition: connection.h:1812
PString userInputString
Definition: connection.h:1811
unsigned GetVideoUpdateRequestsSent() const
Definition: connection.h:1705
Connection is in the process of being forwarded.
Definition: connection.h:530
unsigned GetMaxAudioJitterDelay() const
Definition: connection.h:1661
PNotifier m_recordAudioNotifier
Definition: connection.h:1855
Remote endpoint application cleared call.
Definition: connection.h:366
PSafePtr< cls > GetOtherPartyConnectionAs() const
Definition: connection.h:934
PBoolean originating
Definition: connection.h:1796
Definition: connection.h:1906
StringOptions m_stringOptions
Definition: connection.h:1851
Call failed as could not find user (in GK)
Definition: connection.h:373
const PTime & GetConnectionEndTime() const
Definition: connection.h:1478
The remote failed temporarily app may retry.
Definition: connection.h:385
const OpalProductInfo & GetProductInfo() const
Definition: connection.h:1482
Definition: connection.h:362
const PTime & GetPhaseTime(Phases phase) const
Definition: connection.h:1460
Definition: connection.h:1312
Definition: connection.h:312
The remote ended the call with unmapped Q.931 cause code.
Definition: connection.h:386
const OpalProductInfo & GetRemoteProductInfo() const
Definition: connection.h:1578
Remote endpoint busy.
Definition: connection.h:380