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"
481 const PString & token,
482 unsigned options = 0,
594 PSyncPoint * sync = NULL
623 const PString & remoteParty
738 const PString & calleeName,
759 const PString & callerName
865 const PStringToString & info,
880 bool synchronous =
false
925 const PString & forwardParty
1103 const PString & streamID,
1211 PVideoInputDevice * & device,
1212 PBoolean & autoDelete
1221 PVideoOutputDevice * & device,
1222 PBoolean & autoDelete
1231 unsigned sessionID = 0,
1249 unsigned & percentage
1285 unsigned newBandwidth,
1286 PBoolean force =
false
1304 unsigned releasedBandwidth,
1305 unsigned requiredBandwidth
1348 const PString & value
1369 unsigned duration = 0
1379 const PString & value
1397 unsigned duration = 500
1403 unsigned timeout = 30
1411 const PString & input
1417 const char * terminators =
"#\r\n",
1418 unsigned lastDigitTimeout = 4,
1419 unsigned firstDigitTimeout = 30
1714 const StringOptions & options,
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]; };
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;
1896 bool m_luaScriptLoaded;
1900 PLUA_BINDING2(LuaSetOption, "SetOption")
1902 PLUA_DECLARE_FUNCTION(LuaSetOption);
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);
1931 #endif // OPAL_OPAL_CONNECTION_H
PDECLARE_NOTIFIER(PThread, OpalConnection, OnReleaseThreadMain)
const PString & GetCalledPartyNumber() const
Definition: connection.h:1595
Definition: connection.h:457
const PString & GetCalledPartyName() const
Definition: connection.h:1587
virtual bool OnTransferNotify(const PStringToString &info, const OpalConnection *transferringConnection)
void SetProductInfo(const OpalProductInfo &info)
Definition: connection.h:1486
virtual void OnReleased()
CallEndReason callEndReason
Definition: connection.h:1806
virtual bool Hold(bool fromRemote, bool placeOnHold)
virtual void OnUserInputString(const PString &value)
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
Definition: connection.h:458
virtual PBoolean CreateVideoInputDevice(const OpalMediaFormat &mediaFormat, PVideoInputDevice *&device, PBoolean &autoDelete)
virtual void OnUserInputTone(char tone, unsigned duration)
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
virtual void OnHold(bool fromRemote, bool onHold)
Definition: connection.h:453
Answer the call with a h323 progress, or sip 183 session in progress, or ...
Definition: connection.h:425
virtual OpalMediaStream * CreateMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, PBoolean isSource)
enum OpalConnection::@30 m_faxMediaStreamsSwitchState
OpalEndPoint & GetEndPoint() const
Definition: connection.h:1444
OpalEndPoint & endpoint
Definition: connection.h:1788
void ClearCall(CallEndReason reason=EndedByLocalUser, PSyncPoint *sync=NULL)
virtual void OnAlerting()
const PString & GetDisplayName() const
Definition: connection.h:1508
Definition: connection.h:459
ZeroTime m_phaseTime[NumPhases]
Definition: connection.h:1911
unsigned m_VideoUpdateRequestsSent
Definition: connection.h:1862
ZeroTime()
Definition: connection.h:1909
Options
Definition: connection.h:434
OpalCall & GetCall() const
Definition: connection.h:1448
virtual void OnSwitchedFaxMediaStreams(bool toT38, bool success)
Call cleared due to an enforced duration limit.
Definition: connection.h:387
void SetAudioJitterDelay(unsigned minDelay, unsigned maxDelay)
virtual PBoolean ForwardCall(const PString &forwardParty)
unsigned minAudioJitterDelay
Definition: connection.h:1824
Definition: connection.h:1317
virtual void ClearCallSynchronous(PSyncPoint *sync, CallEndReason reason=EndedByLocalUser)
The remote says there is a phone ringing, somewhere.
Definition: connection.h:527
PCaselessString GetRemoteApplication() const
Definition: connection.h:1574
virtual OpalTransport & GetTransport() const
Definition: connection.h:1695
Local endpoint congested.
Definition: connection.h:379
virtual bool CloseMediaStream(unsigned sessionId, bool source)
WORD manufacturerCode
Definition: connection.h:329
PCaselessString version
Definition: connection.h:324
CallEndReason GetCallEndReason() const
Definition: connection.h:564
virtual PBoolean SetBandwidthAvailable(unsigned newBandwidth, PBoolean force=false)
Definition: transports.h:703
virtual PString GetIdentifier() const
virtual OpalMediaFormatList GetLocalMediaFormats()
As for AnswerCallPending but starts media channels.
Definition: connection.h:423
friend ostream & operator<<(ostream &strm, const OpalProductInfo &info)
Definition: connection.h:451
virtual PBoolean SendUserInputTone(char tone, unsigned duration=0)
Definition: connection.h:1313
unsigned q931
Definition: connection.h:410
OpalSilenceDetector * GetSilenceDetector() const
Definition: connection.h:1672
void SetStringOptions(const StringOptions &options, bool overwrite)
Set the string options associated with this connection.
virtual void OnPauseMediaStream(OpalMediaStream &strm, bool paused)
CallEndReasonCodes
Definition: connection.h:361
virtual PString GetLocalPartyURL() const
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
Definition: connection.h:1316
OpalSilenceDetector * silenceDetector
Definition: connection.h:1814
As for AnswerCallPending but does not send Alerting PDU.
Definition: connection.h:422
virtual AnswerCallResponse OnAnswerCall(const PString &callerName)
virtual bool SwitchFaxMediaStreams(bool toT38)
void SetRedirectingParty(const PString &party)
Definition: connection.h:1566
PSafeList< OpalMediaStream > mediaStreams
Definition: connection.h:1822
PString m_redirectingParty
Definition: connection.h:1805
void OnStopRecording(OpalMediaPatch *patch)
Call was forwarded using FACILITY message.
Definition: connection.h:376
OpalConnection(OpalCall &call, OpalEndPoint &endpoint, const PString &token, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
virtual void EnableRecording()
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
virtual PString GetUserInput(unsigned timeout=30)
virtual void SetUserInput(const PString &input)
Definition: connection.h:445
virtual void OnPatchMediaStream(PBoolean isSource, OpalMediaPatch &patch)
Definition: connection.h:452
Transport connection failed to establish call.
Definition: connection.h:371
PString remotePartyName
Definition: connection.h:1800
void OnConnectedInternal()
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
virtual PBoolean OnIncomingConnection(unsigned int options, OpalConnection::StringOptions *stringOptions)
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
Definition: connection.h:444
PString m_calledPartyNumber
Definition: connection.h:1807
virtual PBoolean SetConnected()
Definition: connection.h:437
void SetQ931Cause(unsigned v)
Definition: connection.h:614
virtual PString GetRemotePartyURL() const
virtual void OnConnected()
Definition: connection.h:418
Transport error cleared call.
Definition: connection.h:370
virtual void Release(CallEndReason reason=EndedByLocalUser, bool synchronous=false)
virtual void OnStopMediaPatch(OpalMediaPatch &patch)
virtual void AnsweringCall(AnswerCallResponse response)
Definition: connection.h:436
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
virtual PBoolean GetAudioVolume(PBoolean source, unsigned &percentage)
virtual void OnProceeding()
Definition: connection.h:441
virtual OpalMediaStreamPtr OpenMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource)
AnswerCallResponse
Definition: connection.h:417
unsigned GetVideoUpdateRequestsSent() const
Definition: connection.h:1705
Definition: connection.h:448
Definition: connection.h:462
virtual unsigned GetBandwidthUsed() const
PNotifier m_recordVideoNotifier
Definition: connection.h:1857
virtual bool TransferConnection(const PString &remoteParty)
unsigned preferredSessionId
Definition: connection.h:1866
virtual bool IsOnHold(bool fromRemote)
void SetPhase(Phases phaseToSet)
void PrintOn(ostream &strm) const
unsigned GetBandwidthAvailable() const
Definition: connection.h:1278
virtual PBoolean SetBandwidthUsed(unsigned releasedBandwidth, unsigned requiredBandwidth)
virtual SendUserInputModes GetRealSendUserInputMode() const
Definition: connection.h:1339
PString GetCallEndReasonText() const
Definition: connection.h:569
virtual PBoolean SetUpConnection()=0
virtual bool IsPresentationBlocked() const
Definition: connection.h:1888
const PTime & GetConnectionEndTime() const
Definition: connection.h:1478
Definition: connection.h:1318
static OpalProductInfo & Default()
Number of available phases. Can be used to indicate an unknown phase.
Definition: connection.h:533
virtual void OnEstablished()
BYTE t35CountryCode
Definition: connection.h:327
void Initialise(const OpalConnection::StringOptions &stringOptions)
Answer the call and destroy the current call.
Definition: connection.h:426
CallEndReason(CallEndReasonCodes reason=NumCallEndReasons, unsigned cause=0)
Definition: connection.h:397
virtual void SetLocalPartyName(const PString &name)
PCaselessString vendor
Definition: connection.h:322
Definition: connection.h:1320
Remote endpoint did not answer in required time.
Definition: connection.h:368
const PString & GetRemotePartyNumber() const
Definition: connection.h:1537
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
virtual void AdjustMediaFormats(bool local, const OpalConnection *otherConnection, OpalMediaFormatList &mediaFormats) const
unsigned GetQ931Cause() const
Definition: connection.h:609
Local endpoint busy.
Definition: connection.h:378
PCaselessString AsString() const
OpalMediaStreamPtr GetMediaStream(const PString &streamID, bool source) const
void SetAutoStart(const OpalMediaType &mediaType, OpalMediaType::AutoStartMode autoStart)
CallEndReasonCodes code
Definition: connection.h:409
__inline Phases GetPhase() const
Definition: connection.h:540
__inline bool IsEstablished() const
Return true if connection is in the established phase.
Definition: connection.h:543
Call cleared due to missing dial tone.
Definition: connection.h:389
const PTime & GetConnectionStartTime() const
Definition: connection.h:1474
PString displayName
Definition: connection.h:1799
const OpalProductInfo & GetRemoteProductInfo() const
Definition: connection.h:1578
const PTime & GetAlertingTime() const
Definition: connection.h:1468
virtual bool SetAudioMute(bool source, bool mute)
Phases
Definition: connection.h:523
Definition: rfc2833.h:112
OpalProductInfo productInfo
Definition: connection.h:1797
Remote endpoint refused call.
Definition: connection.h:367
PString remotePartyURL
Definition: connection.h:1801
ostream & operator<<(ostream &strm, OpalSilenceDetector::Mode mode)
virtual PBoolean OnSetUpConnection()
virtual SendUserInputModes GetSendUserInputMode() const
Definition: connection.h:1332
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 PString & GetToken() const
Definition: connection.h:1452
void CopyPartyNames(const OpalConnection &other)
virtual PINDEX GetMaxRtpPayloadSize() const
const PTime & GetPhaseTime(Phases phase) const
Definition: connection.h:1460
Definition: connection.h:440
void SetRemotePartyAddress(const PString &addr)
Definition: connection.h:1548
PSafePtr< OpalConnection > GetOtherPartyConnection() const
virtual PString GetDestinationAddress()
virtual void OnClosedMediaStream(const OpalMediaStream &stream)
virtual bool GetAudioMute(bool source, bool &mute)
Definition: connection.h:396
PSafePtr< cls > GetOtherPartyConnectionAs() const
Definition: connection.h:934
static void SetCallEndReasonText(CallEndReasonCodes reasonCode, const PString &newText)
MediaAddressesDict mediaTransportAddresses
Definition: connection.h:1821
Call cleared because gatekeeper admission request failed.
Definition: connection.h:393
bool RemoveMediaStream(OpalMediaStream &strm)
virtual bool IsNetworkConnection() const =0
Definition: connection.h:1889
Definition: connection.h:435
virtual PBoolean CreateVideoOutputDevice(const OpalMediaFormat &mediaFormat, PBoolean preview, PVideoOutputDevice *&device, PBoolean &autoDelete)
virtual unsigned GetAudioSignalLevel(PBoolean source)
Definition: connection.h:1315
virtual PString GetCallInfo() const
PBoolean IsOriginating() const
Definition: connection.h:1456
virtual PBoolean SendUserInputString(const PString &value)
PString remotePartyAddress
Definition: connection.h:1804
SendUserInputModes sendUserInputMode
Definition: connection.h:1810
virtual PString GetCalledPartyURL()
unsigned GetMaxAudioJitterDelay() const
Definition: connection.h:1661
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
As for AnswerCallDeferred but starts media channels.
Definition: connection.h:424
virtual bool SetAlertingType(const PString &info)
virtual PBoolean PromptUserInput(PBoolean play)
bool m_initialised
Definition: connection.h:1879
Definition: connection.h:1314
Call cleared due to invalid conference ID.
Definition: connection.h:388
virtual PString GetAlertingType() const
Definition: connection.h:443
Local endpoint declined to answer call.
Definition: connection.h:365
Definition: connection.h:353
const PString & GetRemotePartyName() const
Definition: connection.h:1523
void OnStartRecording(OpalMediaPatch *patch)
OpalProductInfo remoteProductInfo
Definition: connection.h:1802
Media and control streams have been terminated.
Definition: connection.h:532
virtual void SetSendUserInputMode(SendUserInputModes mode)
virtual PString GetPrefixName() const
const PString & GetRedirectingParty() const
Definition: connection.h:1561
const PString & GetLocalPartyName() const
Definition: connection.h:1496
const PString GetRemotePartyCallbackURL() const
Definition: connection.h:1569
virtual bool OnMediaCommand(OpalMediaStream &stream, const OpalMediaCommand &command)
The receipt of SETUP/INVITE has been acknowledged.
Definition: connection.h:526
Gatekeeper has cleared call.
Definition: connection.h:372
const OpalProductInfo & GetProductInfo() const
Definition: connection.h:1482
unsigned GetMinAudioJitterDelay() const
Definition: connection.h:1656
Definition: connection.h:1865
virtual OpalMediaType::AutoStartMode GetAutoStart(const OpalMediaType &mediaType) const
__inline bool IsReleased() const
Return true if connection is in the established phase.
Definition: connection.h:546
const StringOptions & GetStringOptions() const
Get the string options associated with this connection.
Definition: connection.h:1710
virtual void OnApplyStringOptions()
Call back for connection to act on changed string options.
const PTime & GetSetupUpTime() const
Definition: connection.h:1464
Definition: transports.h:149
BYTE t35Extension
Definition: connection.h:328
PSyncPoint userInputAvailable
Definition: connection.h:1812
PString userInputString
Definition: connection.h:1811
Connection is in the process of being forwarded.
Definition: connection.h:530
virtual unsigned GetNextSessionID(const OpalMediaType &mediaType, bool isSource)
virtual void SetCallEndReason(CallEndReason reason)
virtual void StartMediaStreams()
virtual void PauseMediaStreams(bool paused)
virtual bool OnSwitchingFaxMediaStreams(bool toT38)
void ExtractFromURL(PURL &url)
PNotifier m_recordAudioNotifier
Definition: connection.h:1855
Remote endpoint application cleared call.
Definition: connection.h:366
__inline int AsInteger() const
Definition: connection.h:407
virtual void AttachRFC2833HandlerToPatch(PBoolean isSource, OpalMediaPatch &patch)
virtual bool SendVideoUpdatePicture(unsigned sessionID=0, bool force=false) const
Definition: connection.h:456
virtual OpalMediaFormatList GetMediaFormats() const
virtual void CloseMediaStreams()
PBoolean originating
Definition: connection.h:1796
Definition: connection.h:447
virtual bool GarbageCollection()
virtual PBoolean SetAudioVolume(PBoolean source, unsigned percentage)
Definition: connection.h:1906
StringOptions m_stringOptions
Definition: connection.h:1851
virtual void DisableRecording()
Call failed as could not find user (in GK)
Definition: connection.h:373
OpalMediaType::AutoStartMode GetAutoStart(const OpalMediaType &mediaType) const
The remote failed temporarily app may retry.
Definition: connection.h:385
virtual void OnStartMediaPatch(OpalMediaPatch &patch)
Definition: connection.h:362
Definition: connection.h:439
PDICTIONARY(MediaAddressesDict, POrdinalKey, OpalTransportAddress)
virtual PBoolean OnOpenMediaStream(OpalMediaStream &stream)
Definition: connection.h:1312
virtual PString ReadUserInput(const char *terminators="#\r\n", unsigned lastDigitTimeout=4, unsigned firstDigitTimeout=30)
Definition: connection.h:312
The remote ended the call with unmapped Q.931 cause code.
Definition: connection.h:386
virtual PBoolean SetAlerting(const PString &calleeName, PBoolean withMedia)=0
const PString & GetRemotePartyAddress() const
Definition: connection.h:1544
Definition: connection.h:449
virtual void AutoStartMediaStreams(bool force=false)
Definition: connection.h:455
Remote endpoint busy.
Definition: connection.h:380
virtual PBoolean IsMediaBypassPossible(unsigned sessionID) const