OpalConnection Class Reference

#include <connection.h>

Inheritance diagram for OpalConnection:

H323Connection IAX2Connection OpalFaxConnection OpalLineConnection SIPConnection OpalT38Connection List of all members.

Basic operations

enum  Phases {
  UninitialisedPhase, SetUpPhase, AlertingPhase, ConnectedPhase,
  EstablishedPhase, ReleasingPhase, ReleasedPhase, NumPhases
}
Phases GetPhase () const
CallEndReason GetCallEndReason () const
virtual void SetCallEndReason (CallEndReason reason)
void ClearCall (CallEndReason reason=EndedByLocalUser)
virtual void ClearCallSynchronous (PSyncPoint *sync, CallEndReason reason=EndedByLocalUser)
unsigned GetQ931Cause () const
void SetQ931Cause (unsigned v)
virtual void TransferConnection (const PString &remoteParty, const PString &callIdentity=PString::Empty())
virtual void HoldConnection ()
virtual void RetrieveConnection ()
virtual BOOL IsConnectionOnHold ()

User input

enum  SendUserInputModes {
  SendUserInputAsQ931, SendUserInputAsString, SendUserInputAsTone, SendUserInputAsInlineRFC2833,
  SendUserInputAsSeparateRFC2833, SendUserInputAsProtocolDefault, NumSendUserInputModes
}
virtual void SetSendUserInputMode (SendUserInputModes mode)
virtual SendUserInputModes GetSendUserInputMode () const
virtual SendUserInputModes GetRealSendUserInputMode () const
virtual BOOL SendUserInputString (const PString &value)
virtual BOOL SendUserInputTone (char tone, unsigned duration=0)
virtual void OnUserInputString (const PString &value)
virtual void OnUserInputTone (char tone, unsigned duration)
void SendUserInputHookFlash (unsigned duration=500)
virtual PString GetUserInput (unsigned timeout=30)
virtual void SetUserInput (const PString &input)
virtual PString ReadUserInput (const char *terminators="#\r\n", unsigned lastDigitTimeout=4, unsigned firstDigitTimeout=30)
virtual BOOL PromptUserInput (BOOL play)

Public Types

enum  CallEndReason {
  EndedByLocalUser, 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, NumCallEndReasons, EndedWithQ931Code = 0x100
}
enum  AnswerCallResponse {
  AnswerCallNow, AnswerCallDenied, AnswerCallPending, AnswerCallDeferred,
  AnswerCallAlertWithMedia, AnswerCallDeferredWithMedia, AnswerCallProgress, AnswerCallNowAndReleaseCurrent,
  NumAnswerCallResponses
}
enum  Options {
  FastStartOptionDisable = 0x0001, FastStartOptionEnable = 0x0002, FastStartOptionMask = 0x0003, H245TunnelingOptionDisable = 0x0004,
  H245TunnelingOptionEnable = 0x0008, H245TunnelingOptionMask = 0x000c, H245inSetupOptionDisable = 0x0010, H245inSetupOptionEnable = 0x0020,
  H245inSetupOptionMask = 0x0030, DetectInBandDTMFOptionDisable = 0x0040, DetectInBandDTMFOptionEnable = 0x0080, DetectInBandDTMFOptionMask = 0x00c0,
  RTPAggregationDisable = 0x0100, RTPAggregationEnable = 0x0200, RTPAggregationMask = 0x0300, SendDTMFAsDefault = 0x0000,
  SendDTMFAsString = 0x0400, SendDTMFAsTone = 0x0800, SendDTMFAsRFC2833 = 0x0c00, SendDTMFMask = 0x0c00
}

Public Member Functions

const RTP_DataFrame::PayloadMapTypeGetRTPPayloadMap () const
BOOL RemoteIsNAT () const
virtual void SetSecurityMode (const PString &v)
virtual PString GetSecurityMode () const
StringOptionsGetStringOptions () const
void SetStringOptions (StringOptions *options)
virtual BOOL OnOpenIncomingMediaChannels ()
virtual void ApplyStringOptions ()
virtual void PreviewPeerMediaFormats (const OpalMediaFormatList &fmts)
virtual void EnableRecording ()
virtual void DisableRecording ()
virtual BOOL IsRTPNATEnabled (const PIPSocket::Address &localAddr, const PIPSocket::Address &peerAddr, const PIPSocket::Address &sigAddr, BOOL incoming)
Overrides from PObject
void PrintOn (ostream &strm) const
Call progress functions
virtual BOOL OnIncomingConnection (unsigned int options, OpalConnection::StringOptions *stringOptions)
virtual BOOL OnIncomingConnection (unsigned int options)
virtual BOOL OnIncomingConnection ()
virtual BOOL SetUpConnection ()=0
virtual BOOL OnSetUpConnection ()
virtual void OnAlerting ()
virtual BOOL SetAlerting (const PString &calleeName, BOOL withMedia)=0
virtual AnswerCallResponse OnAnswerCall (const PString &callerName)
virtual void AnsweringCall (AnswerCallResponse response)
virtual void OnConnected ()
virtual BOOL SetConnected ()=0
virtual void OnEstablished ()
virtual void Release (CallEndReason reason=EndedByLocalUser)
virtual void OnReleased ()
Additional signalling functions
virtual PString GetDestinationAddress ()
virtual BOOL ForwardCall (const PString &forwardParty)
Media Stream Management
virtual OpalMediaFormatList GetMediaFormats () const=0
virtual OpalMediaFormatList GetLocalMediaFormats ()
virtual void AdjustMediaFormats (OpalMediaFormatList &mediaFormats) const
virtual BOOL OpenSourceMediaStream (const OpalMediaFormatList &mediaFormats, unsigned sessionID)
virtual OpalMediaStreamOpenSinkMediaStream (OpalMediaStream &source)
virtual void StartMediaStreams ()
virtual void CloseMediaStreams ()
virtual void RemoveMediaStreams ()
virtual void PauseMediaStreams (BOOL paused)
virtual OpalMediaStreamCreateMediaStream (const OpalMediaFormat &mediaFormat, unsigned sessionID, BOOL isSource)
virtual BOOL OnOpenMediaStream (OpalMediaStream &stream)
virtual void OnClosedMediaStream (const OpalMediaStream &stream)
virtual void OnPatchMediaStream (BOOL isSource, OpalMediaPatch &patch)
virtual void AttachRFC2833HandlerToPatch (BOOL isSource, OpalMediaPatch &patch)
OpalMediaStreamGetMediaStream (unsigned sessionId, BOOL source) const
BOOL RemoveMediaStream (OpalMediaStream *strm)
virtual BOOL IsMediaBypassPossible (unsigned sessionID) const
virtual BOOL GetMediaInformation (unsigned sessionID, MediaInformation &info) const
virtual BOOL SetAudioVolume (BOOL source, unsigned percentage)
virtual unsigned GetAudioSignalLevel (BOOL source)
RTP Session Management
virtual RTP_SessionGetSession (unsigned sessionID) const
virtual RTP_SessionUseSession (unsigned sessionID)
virtual RTP_SessionUseSession (const OpalTransport &transport, unsigned sessionID, RTP_QOS *rtpqos=NULL)
virtual void ReleaseSession (unsigned sessionID, BOOL clearAll=FALSE)
virtual RTP_SessionCreateSession (const OpalTransport &transport, unsigned sessionID, RTP_QOS *rtpqos)
Bandwidth Management
unsigned GetBandwidthAvailable () const
virtual BOOL SetBandwidthAvailable (unsigned newBandwidth, BOOL force=FALSE)
virtual unsigned GetBandwidthUsed () const
virtual BOOL SetBandwidthUsed (unsigned releasedBandwidth, unsigned requiredBandwidth)
Member variable access
OpalEndPointGetEndPoint () const
OpalCallGetCall () const
const PString & GetToken () const
BOOL IsOriginating () const
PTime GetSetupUpTime () const
PTime GetAlertingTime () const
PTime GetConnectionStartTime () const
PTime GetConnectionEndTime () const
const OpalProductInfoGetProductInfo () const
void SetProductInfo (const OpalProductInfo &info)
const PString & GetLocalPartyName () const
virtual void SetLocalPartyName (const PString &name)
const PString & GetDisplayName () const
void SetDisplayName (const PString &name)
const PString & GetRemotePartyName () const
PCaselessString GetRemoteApplication () const
const OpalProductInfoGetRemoteProductInfo () const
const PString & GetRemotePartyNumber () const
const PString & GetRemotePartyAddress () const
virtual const PString GetRemotePartyCallbackURL () const
virtual const PString & GetCalledDestinationNumber () const
virtual const PString & GetCalledDestinationName () const
virtual const PString & GetCalledDestinationURL () const
unsigned GetMinAudioJitterDelay () const
unsigned GetMaxAudioJitterDelay () const
void SetAudioJitterDelay (unsigned minDelay, unsigned maxDelay)
OpalSilenceDetectorGetSilenceDetector () const
OpalEchoCancelerGetEchoCanceler () const
virtual const OpalGloballyUniqueID & GetIdentifier () const
virtual OpalTransportGetTransport () const
 PDICTIONARY (MediaAddressesDict, POrdinalKey, OpalTransportAddress)
MediaAddressesDict & GetMediaTransportAddresses ()

Protected Member Functions

 PDECLARE_NOTIFIER (OpalRFC2833Info, OpalConnection, OnUserInputInlineRFC2833)
 PDECLARE_NOTIFIER (OpalRFC2833Info, OpalConnection, OnUserInputInlineCiscoNSE)
 PDECLARE_NOTIFIER (PThread, OpalConnection, OnReleaseThreadMain)
 PDECLARE_NOTIFIER (RTP_DataFrame, OpalConnection, OnRecordAudio)
void SetPhase (Phases phaseToSet)
virtual OpalMediaStreamInternalCreateMediaStream (const OpalMediaFormat &mediaFormat, unsigned sessionID, BOOL isSource)

Protected Attributes

OpalCallownerCall
OpalEndPointendpoint
PMutex phaseMutex
Phases phase
PString callToken
OpalGloballyUniqueID callIdentifier
BOOL originating
PTime setupTime
PTime alertingTime
PTime connectedTime
PTime callEndTime
OpalProductInfo productInfo
PString localPartyName
PString displayName
PString remotePartyName
OpalProductInfo remoteProductInfo
PString remotePartyNumber
PString remotePartyAddress
CallEndReason callEndReason
PString calledDestinationNumber
PString calledDestinationName
PString calledDestinationURL
BOOL remoteIsNAT
SendUserInputModes sendUserInputMode
PString userInputString
PSyncPoint userInputAvailable
BOOL detectInBandDTMF
unsigned q931Cause
OpalSilenceDetectorsilenceDetector
OpalEchoCancelerechoCanceler
OpalRFC2833Protorfc2833Handler
MediaAddressesDict mediaTransportAddresses
OpalMediaStreamList mediaStreams
RTP_SessionManager rtpSessions
unsigned minAudioJitterDelay
unsigned maxAudioJitterDelay
unsigned bandwidthAvailable
RTP_DataFrame::PayloadMapType rtpPayloadMap
PString securityMode
BOOL useRTPAggregation
StringOptionsstringOptions
PString recordAudioFilename

Classes

struct  MediaInformation
class  StringOptions

Detailed Description

This is the base class for connections to an endpoint. A particular protocol will have a descendant class from this to implement the specific semantics of that protocols connection.

A connection is part of a call, and will be "owned" by an OpalCall object. It is also attached to the creator endpoint to do any protocol specific management of the connection. However the deletion of the connection is done by a special thread in the OpalManager class. A connnection should never be deleted directly.

The connection is also in charge of creating media streams. It may do this in respose to an explicit call to OpenMediaStream or implicitly due to requests in the underlying protocol.

When media streams are created they must make requests for bandwidth which is managed by the connection.


Member Enumeration Documentation

enum OpalConnection::CallEndReason

Call/Connection ending reasons. NOTE: if anything is added to this, you also need to add the field to the tables in connection.cxx and h323pdu.cxx.

Enumerator:
EndedByLocalUser 
EndedByNoAccept  Local endpoint application cleared call.
EndedByAnswerDenied  Local endpoint did not accept call OnIncomingCall()=FALSE.
EndedByRemoteUser  Local endpoint declined to answer call.
EndedByRefusal  Remote endpoint application cleared call.
EndedByNoAnswer  Remote endpoint refused call.
EndedByCallerAbort  Remote endpoint did not answer in required time.
EndedByTransportFail  Remote endpoint stopped calling.
EndedByConnectFail  Transport error cleared call.
EndedByGatekeeper  Transport connection failed to establish call.
EndedByNoUser  Gatekeeper has cleared call.
EndedByNoBandwidth  Call failed as could not find user (in GK).
EndedByCapabilityExchange  Call failed as could not get enough bandwidth.
EndedByCallForwarded  Could not find common capabilities.
EndedBySecurityDenial  Call was forwarded using FACILITY message.
EndedByLocalBusy  Call failed a security check and was ended.
EndedByLocalCongestion  Local endpoint busy.
EndedByRemoteBusy  Local endpoint congested.
EndedByRemoteCongestion  Remote endpoint busy.
EndedByUnreachable  Remote endpoint congested.
EndedByNoEndPoint  Could not reach the remote party.
EndedByHostOffline  The remote party is not running an endpoint.
EndedByTemporaryFailure  The remote party host off line.
EndedByQ931Cause  The remote failed temporarily app may retry.
EndedByDurationLimit  The remote ended the call with unmapped Q.931 cause code.
EndedByInvalidConferenceID  Call cleared due to an enforced duration limit.
EndedByNoDialTone  Call cleared due to invalid conference ID.
EndedByNoRingBackTone  Call cleared due to missing dial tone.
EndedByOutOfService  Call cleared due to missing ringback tone.
EndedByAcceptingCallWaiting  Call cleared because the line is out of service,.
NumCallEndReasons  Call cleared because another call is answered.
EndedWithQ931Code 

enum OpalConnection::AnswerCallResponse

Enumerator:
AnswerCallNow 
AnswerCallDenied  Answer the call continuing with the connection.
AnswerCallPending  Refuse the call sending a release complete.
AnswerCallDeferred  Send an Alerting PDU and wait for AnsweringCall().
AnswerCallAlertWithMedia  As for AnswerCallPending but does not send Alerting PDU.
AnswerCallDeferredWithMedia  As for AnswerCallPending but starts media channels.
AnswerCallProgress  As for AnswerCallDeferred but starts media channels.
AnswerCallNowAndReleaseCurrent  Answer the call with a h323 progress, or sip 183 session in progress, or ...
NumAnswerCallResponses  Answer the call and destroy the current call.

enum OpalConnection::Options

Connection options

Enumerator:
FastStartOptionDisable 
FastStartOptionEnable 
FastStartOptionMask 
H245TunnelingOptionDisable 
H245TunnelingOptionEnable 
H245TunnelingOptionMask 
H245inSetupOptionDisable 
H245inSetupOptionEnable 
H245inSetupOptionMask 
DetectInBandDTMFOptionDisable 
DetectInBandDTMFOptionEnable 
DetectInBandDTMFOptionMask 
RTPAggregationDisable 
RTPAggregationEnable 
RTPAggregationMask 
SendDTMFAsDefault 
SendDTMFAsString 
SendDTMFAsTone 
SendDTMFAsRFC2833 
SendDTMFMask 

enum OpalConnection::Phases

Enumerator:
UninitialisedPhase 
SetUpPhase 
AlertingPhase 
ConnectedPhase 
EstablishedPhase 
ReleasingPhase 
ReleasedPhase 
NumPhases 

enum OpalConnection::SendUserInputModes

Enumerator:
SendUserInputAsQ931 
SendUserInputAsString 
SendUserInputAsTone 
SendUserInputAsInlineRFC2833 
SendUserInputAsSeparateRFC2833 
SendUserInputAsProtocolDefault 
NumSendUserInputModes 


Constructor & Destructor Documentation

OpalConnection::OpalConnection ( OpalCall call,
OpalEndPoint endpoint,
const PString &  token,
unsigned  options = 0,
OpalConnection::StringOptions stringOptions = NULL 
)

Create a new connection.

Parameters:
call  Owner calll for connection
endpoint  Owner endpoint for connection
token  Token to identify the connection
options  Connection options
stringOptions  more complex options

OpalConnection::~OpalConnection (  ) 

Destroy connection.

OpalConnection::OpalConnection ( OpalCall call,
OpalEndPoint endpoint,
const PString &  token,
unsigned  options = 0,
OpalConnection::StringOptions stringOptions = NULL 
)

Create a new connection.

Parameters:
call  Owner calll for connection
endpoint  Owner endpoint for connection
token  Token to identify the connection
options  Connection options
stringOptions  more complex options

OpalConnection::~OpalConnection (  ) 

Destroy connection.


Member Function Documentation

void OpalConnection::PrintOn ( ostream &  strm  )  const

Standard stream print function. The PObject class has a << operator defined that calls this function polymorphically.

Parameters:
strm  Stream to output text representation

Phases OpalConnection::GetPhase (  )  const [inline]

Get the phase of the connection. This indicates the current phase of the connection sequence. Whether all phases and the transitions between phases is protocol dependent.

CallEndReason OpalConnection::GetCallEndReason (  )  const [inline]

Get the call clearand reason for this connection shutting down. Note that this function is only generally useful in the H323EndPoint::OnConnectionCleared() function. This is due to the connection not being cleared before that, and the object not even exiting after that.

If the call is still active then this will return NumCallEndReasons.

virtual void OpalConnection::SetCallEndReason ( CallEndReason  reason  )  [virtual]

Set the call clearance reason. An application should have no cause to use this function. It is present for the H323EndPoint::ClearCall() function to set the clearance reason.

Parameters:
reason  Reason for clearance of connection.

void OpalConnection::ClearCall ( CallEndReason  reason = EndedByLocalUser  ) 

Clear a current call. This hangs up the current call. This will release all connections currently in the call by calling the OpalCall::Clear() function.

Note that this function will return quickly as the release and disposal of the connections is done by another thread.

Parameters:
reason  Reason for call clearing

Reimplemented in IAX2Connection.

virtual void OpalConnection::ClearCallSynchronous ( PSyncPoint *  sync,
CallEndReason  reason = EndedByLocalUser 
) [virtual]

Clear a current connection, synchronously

Parameters:
reason  Reason for call clearing

unsigned OpalConnection::GetQ931Cause (  )  const [inline]

Get the Q.931 cause code (Q.850) that terminated this call. See Q931::CauseValues for common values.

void OpalConnection::SetQ931Cause ( unsigned  v  )  [inline]

Set the outgoing Q.931 cause code (Q.850) that is sent for this call See Q931::CauseValues for common values.

virtual void OpalConnection::TransferConnection ( const PString &  remoteParty,
const PString &  callIdentity = PString::Empty() 
) [virtual]

Initiate the transfer of an existing call (connection) to a new remote party.

Parameters:
remoteParty  Remote party to transfer the existing call to
callIdentity  Call Identity of secondary call if present

Reimplemented in IAX2Connection, and SIPConnection.

virtual void OpalConnection::HoldConnection (  )  [virtual]

Put the current connection on hold, suspending all media streams.

Reimplemented in IAX2Connection, and SIPConnection.

virtual void OpalConnection::RetrieveConnection (  )  [virtual]

Retrieve the current connection from hold, activating all media streams.

Reimplemented in IAX2Connection, and SIPConnection.

virtual BOOL OpalConnection::IsConnectionOnHold (  )  [virtual]

Return TRUE if the current connection is on hold.

Reimplemented in IAX2Connection, and SIPConnection.

virtual BOOL OpalConnection::OnIncomingConnection ( unsigned int  options,
OpalConnection::StringOptions stringOptions 
) [virtual]

Call back for an incoming call. This function is used for an application to control the answering of incoming calls.

If TRUE is returned then the connection continues. If FALSE then the connection is aborted.

Note this function should not block for any length of time. If the decision to answer the call may take some time eg waiting for a user to pick up the phone, then AnswerCallPending or AnswerCallDeferred should be returned.

If an application overrides this function, it should generally call the ancestor version to complete calls. Unless the application completely takes over that responsibility. Generally, an application would only intercept this function if it wishes to do some form of logging. For this you can obtain the name of the caller by using the function OpalConnection::GetRemotePartyName().

The default behaviour calls the OpalManager function of the same name.

Note that the most explicit version of this override is made pure, so as to force descendant classes to implement it. This will only affect code that implements new descendants of OpalConnection - code that uses existing descendants will be unaffected

virtual BOOL OpalConnection::OnIncomingConnection ( unsigned int  options  )  [virtual]

virtual BOOL OpalConnection::OnIncomingConnection (  )  [virtual]

virtual BOOL OpalConnection::SetUpConnection (  )  [pure virtual]

Start an outgoing connection. This function will initiate the connection to the remote entity, for example in H.323 it sends a SETUP, in SIP it sends an INVITE etc.

The default behaviour is pure.

Implemented in H323Connection, IAX2Connection, OpalLineConnection, SIPConnection, and OpalFaxConnection.

virtual BOOL OpalConnection::OnSetUpConnection (  )  [virtual]

Callback for outgoing connection, it is invoked after SetUpConnection This function allows the application to set up some parameters or to log some messages

Reimplemented in OpalLineConnection.

virtual void OpalConnection::OnAlerting (  )  [virtual]

Call back for remote party being alerted. This function is called after the connection is informed that the remote endpoint is "ringing". Generally some time after the SetUpConnection() function was called, this is function is called.

If FALSE is returned the connection is aborted.

If an application overrides this function, it should generally call the ancestor version for correct operation. An application would typically only intercept this function if it wishes to do some form of logging. For this you can obtain the name of the caller by using the function OpalConnection::GetRemotePartyName().

The default behaviour calls the OpalEndPoint function of the same name.

Reimplemented in IAX2Connection.

virtual BOOL OpalConnection::SetAlerting ( const PString &  calleeName,
BOOL  withMedia 
) [pure virtual]

Indicate to remote endpoint an alert is in progress. If this is an incoming connection and the AnswerCallResponse is in a AnswerCallDeferred or AnswerCallPending state, then this function is used to indicate to that endpoint that an alert is in progress. This is usually due to another connection which is in the call (the B party) has received an OnAlerting() indicating that its remoteendpoint is "ringing".

The default behaviour is pure.

Parameters:
calleeName  Name of endpoint being alerted.
withMedia  Open media with alerting

Implemented in H323Connection, IAX2Connection, OpalLineConnection, SIPConnection, and OpalFaxConnection.

virtual AnswerCallResponse OpalConnection::OnAnswerCall ( const PString &  callerName  )  [virtual]

Call back for answering an incoming call. This function is called after the connection has been acknowledged but before the connection is established

This gives the application time to wait for some event before signalling to the endpoint that the connection is to proceed. For example the user pressing an "Answer call" button.

If AnswerCallDenied is returned the connection is aborted and the connetion specific end call PDU is sent. If AnswerCallNow is returned then the connection proceeding, Finally if AnswerCallPending is returned then the protocol negotiations are paused until the AnsweringCall() function is called.

The default behaviour calls the endpoint function of the same name.

Parameters:
callerName  Name of caller

Reimplemented in H323Connection.

virtual void OpalConnection::AnsweringCall ( AnswerCallResponse  response  )  [virtual]

Indicate the result of answering an incoming call. This should only be called if the OnAnswerCall() callback function has returned a AnswerCallPending or AnswerCallDeferred response.

Note sending further AnswerCallPending responses via this function will have the result of notification PDUs being sent to the remote endpoint (if possible). In this way multiple notification PDUs may be sent.

Sending a AnswerCallDeferred response would have no effect.

Parameters:
response  Answer response to incoming call

Reimplemented in H323Connection, IAX2Connection, and SIPConnection.

virtual void OpalConnection::OnConnected (  )  [virtual]

A call back function whenever a connection is "connected". This indicates that a connection to an endpoint was connected. That is the endpoint received acknowledgement via whatever protocol it uses that the connection may now start media streams.

In the context of H.323 this means that the CONNECT pdu has been received.

The default behaviour calls the OpalEndPoint function of the same name.

Reimplemented in IAX2Connection, and SIPConnection.

virtual BOOL OpalConnection::SetConnected (  )  [pure virtual]

Indicate to remote endpoint we are connected.

The default behaviour is pure.

Implemented in H323Connection, IAX2Connection, OpalLineConnection, SIPConnection, and OpalFaxConnection.

virtual void OpalConnection::OnEstablished (  )  [virtual]

A call back function whenever a connection is established. This indicates that a connection to an endpoint was established. This differs from OnConnected() in that the media streams are started.

In the context of H.323 this means that the signalling and control channels are open and the TerminalCapabilitySet and MasterSlave negotiations are complete.

The default behaviour calls the OpalEndPoint function of the same name.

Reimplemented in H323Connection, and IAX2Connection.

virtual void OpalConnection::Release ( CallEndReason  reason = EndedByLocalUser  )  [virtual]

Release the current connection. This removes the connection from the current call. The call may continue if there are other connections still active on it. If this was the last connection for the call then the call is disposed of as well.

Note that this function will return quickly as the release and disposal of the connections is done by another thread.

Parameters:
reason  Reason for call release

Reimplemented in IAX2Connection.

virtual void OpalConnection::OnReleased (  )  [virtual]

Clean up the termination of the connection. This function can do any internal cleaning up and waiting on background threads that may be using the connection object.

Note that there is not a one to one relationship with the OnEstablishedConnection() function. This function may be called without that function being called. For example if SetUpConnection() was used but the call never completed.

Classes that override this function should make sure they call the ancestor version for correct operation.

An application will not typically call this function as it is used by the OpalManager during a release of the connection.

The default behaviour calls the OpalEndPoint function of the same name.

Reimplemented in H323Connection, IAX2Connection, OpalLineConnection, and SIPConnection.

virtual PString OpalConnection::GetDestinationAddress (  )  [virtual]

Get the destination address of an incoming connection. This will, for example, collect a phone number from a POTS line, or get the fields from the H.225 SETUP pdu in a H.323 connection.

The default behaviour returns "*", which by convention means any address the endpoint/connection can get to.

Reimplemented in H323Connection, and OpalLineConnection.

virtual BOOL OpalConnection::ForwardCall ( const PString &  forwardParty  )  [virtual]

Forward incoming call to specified address. This would typically be called from within the OnIncomingCall() function when an application wishes to redirct an unwanted incoming call.

The return value is TRUE if the call is to be forwarded, FALSE otherwise. Note that if the call is forwarded the current connection is cleared with teh ended call code of EndedByCallForwarded.

Parameters:
forwardParty  Party to forward call to.

Reimplemented in H323Connection, IAX2Connection, and SIPConnection.

virtual OpalMediaFormatList OpalConnection::GetMediaFormats (  )  const [pure virtual]

Get the data formats this connection is capable of operating. This provides a list of media data format names that a OpalMediaStream may be created in within this connection.

The default behaviour is pure.

Implemented in H323Connection, IAX2Connection, OpalLineConnection, SIPConnection, OpalFaxConnection, and OpalT38Connection.

virtual OpalMediaFormatList OpalConnection::GetLocalMediaFormats (  )  [virtual]

Get the list of data formats used for making calls

The default behaviour is to call call.GetMediaFormats();

virtual void OpalConnection::AdjustMediaFormats ( OpalMediaFormatList mediaFormats  )  const [virtual]

Adjust media formats available on a connection. This is called by a connection after it has called OpalCall::GetMediaFormats() to get all media formats that it can use so that an application may remove or reorder the media formats before they are used to open media streams.

The default behaviour calls the OpalEndPoint function of the same name.

Parameters:
mediaFormats  Media formats to use

Reimplemented in OpalFaxConnection, and OpalT38Connection.

virtual BOOL OpalConnection::OpenSourceMediaStream ( const OpalMediaFormatList mediaFormats,
unsigned  sessionID 
) [virtual]

Open source transmitter media stream for session.

Parameters:
mediaFormats  Optional media format to open
sessionID  Session to start stream on

Reimplemented in H323Connection, SIPConnection, and OpalFaxConnection.

virtual OpalMediaStream* OpalConnection::OpenSinkMediaStream ( OpalMediaStream source  )  [virtual]

Open source transmitter media stream for session.

Parameters:
source  Source media sink format to open to

Reimplemented in SIPConnection, and OpalFaxConnection.

virtual void OpalConnection::StartMediaStreams (  )  [virtual]

Start media streams for session.

virtual void OpalConnection::CloseMediaStreams (  )  [virtual]

Close media streams for session.

virtual void OpalConnection::RemoveMediaStreams (  )  [virtual]

Close media streams from session.

virtual void OpalConnection::PauseMediaStreams ( BOOL  paused  )  [virtual]

Pause media streams for session.

virtual OpalMediaStream* OpalConnection::CreateMediaStream ( const OpalMediaFormat mediaFormat,
unsigned  sessionID,
BOOL  isSource 
) [virtual]

Create a new media stream. This will create a media stream of an appropriate subclass as required by the underlying connection protocol. For instance H.323 would create an OpalRTPStream.

The sessionID parameter may not be needed by a particular media stream and may be ignored. In the case of an OpalRTPStream it us used.

Note that media streams may be created internally to the underlying protocol. This function is not the only way a stream can come into existance.

The default behaviour is pure.

Parameters:
mediaFormat  Media format for stream
sessionID  Session number for stream
isSource  Is a source stream

Reimplemented in H323Connection, IAX2Connection, OpalLineConnection, SIPConnection, OpalFaxConnection, and OpalT38Connection.

virtual BOOL OpalConnection::OnOpenMediaStream ( OpalMediaStream stream  )  [virtual]

Call back when opening a media stream. This function is called when a connection has created a new media stream according to the logic of its underlying protocol.

The usual requirement is that media streams are created on all other connections participating in the call and all of the media streams are attached to an instance of an OpalMediaPatch object that will read from one of the media streams passing data to the other media streams.

The default behaviour calls the OpalEndPoint function of the same name.

Parameters:
stream  New media stream being opened

Reimplemented in OpalLineConnection.

virtual void OpalConnection::OnClosedMediaStream ( const OpalMediaStream stream  )  [virtual]

Call back for closed a media stream.

The default behaviour calls the OpalEndPoint function of the same name.

Parameters:
stream  Media stream being closed

virtual void OpalConnection::OnPatchMediaStream ( BOOL  isSource,
OpalMediaPatch patch 
) [virtual]

Call back when patching a media stream. This function is called when a connection has created a new media patch between two streams.

Parameters:
patch  New patch

Reimplemented in H323Connection, SIPConnection, and OpalFaxConnection.

virtual void OpalConnection::AttachRFC2833HandlerToPatch ( BOOL  isSource,
OpalMediaPatch patch 
) [virtual]

Attaches the RFC 2833 handler to the media patch This method may be called from subclasses, e.g. within OnPatchMediaStream()

OpalMediaStream* OpalConnection::GetMediaStream ( unsigned  sessionId,
BOOL  source 
) const

Get a media stream. Locates a stream given a RTP session ID. Each session would usually have two media streams associated with it, so the source flag may be used to distinguish which channel to return.

Parameters:
sessionId  Session ID to search for.
source  Indicates the direction of stream.

BOOL OpalConnection::RemoveMediaStream ( OpalMediaStream strm  ) 

Remove the specified media stream from the list of streams for this channel. This will automatically delete the stream if the stream was found in the stream list.

Returns TRUE if the media stream was removed the list and deleted, else returns FALSE if the media stream was unchanged

virtual BOOL OpalConnection::IsMediaBypassPossible ( unsigned  sessionID  )  const [virtual]

See if the media can bypass the local host.

The default behaviour returns FALSE indicating that media bypass is not possible.

Parameters:
sessionID  Session ID for media channel

Reimplemented in H323Connection, and SIPConnection.

virtual BOOL OpalConnection::GetMediaInformation ( unsigned  sessionID,
MediaInformation info 
) const [virtual]

Get information on the media channel for the connection. The default behaviour checked the mediaTransportAddresses dictionary for the session ID and returns information based on that. It also uses the rfc2833Handler variable for that part of the info.

It is up to the descendant class to assure that the mediaTransportAddresses dictionary is set correctly before OnIncomingCall() is executed.

Parameters:
sessionID  Session ID for media channel
info  Information on media channel

virtual BOOL OpalConnection::SetAudioVolume ( BOOL  source,
unsigned  percentage 
) [virtual]

Set the volume (gain) for the audio media channel to the specified percentage.

Parameters:
source  true for source (microphone), false for sink (speaker)
percentage  Gain, 0=silent, 100=maximun

Reimplemented in OpalLineConnection.

virtual unsigned OpalConnection::GetAudioSignalLevel ( BOOL  source  )  [virtual]

Get the average signal level (0..32767) for the audio media channel. A return value of UINT_MAX indicates no valid signal, eg no audio channel opened.

Parameters:
source  true for source (microphone), false for sink (speaker)

Reimplemented in OpalLineConnection.

virtual RTP_Session* OpalConnection::GetSession ( unsigned  sessionID  )  const [virtual]

Get an RTP session for the specified ID. If there is no session of the specified ID, NULL is returned.

Parameters:
sessionID  RTP session number

virtual RTP_Session* OpalConnection::UseSession ( unsigned  sessionID  )  [virtual]

Use an RTP session for the specified ID. This will find a session of the specified ID and increment its reference count. Multiple OpalRTPStreams use this to indicate their usage of the RTP session.

If this function is used, then the ReleaseSession() function MUST be called or the session is never deleted for the lifetime of the Opal connection.

If there is no session of the specified ID one is created.

The type of RTP session that is created will be compatible with the transport. At this time only IP (RTp over UDP) is supported.

virtual RTP_Session* OpalConnection::UseSession ( const OpalTransport transport,
unsigned  sessionID,
RTP_QOS rtpqos = NULL 
) [virtual]

Parameters:
transport  Transport of signalling
sessionID  RTP session number
rtpqos  Quiality of Service information

Reimplemented in H323Connection.

virtual void OpalConnection::ReleaseSession ( unsigned  sessionID,
BOOL  clearAll = FALSE 
) [virtual]

Release the session. If the session ID is not being used any more any clients via the UseSession() function, then the session is deleted.

Parameters:
sessionID  RTP session number
clearAll  Clear all sessions

virtual RTP_Session* OpalConnection::CreateSession ( const OpalTransport transport,
unsigned  sessionID,
RTP_QOS rtpqos 
) [virtual]

Create and open a new RTP session. The type of RTP session that is created will be compatible with the transport. At this time only IP (RTp over UDP) is supported.

unsigned OpalConnection::GetBandwidthAvailable (  )  const [inline]

Get the available bandwidth in 100's of bits/sec.

virtual BOOL OpalConnection::SetBandwidthAvailable ( unsigned  newBandwidth,
BOOL  force = FALSE 
) [virtual]

Set the available bandwidth in 100's of bits/sec. Note if the force parameter is TRUE this function will close down active media streams to meet the new bandwidth requirement.

Parameters:
newBandwidth  New bandwidth limit
force  Force bandwidth limit

Reimplemented in H323Connection.

virtual unsigned OpalConnection::GetBandwidthUsed (  )  const [virtual]

Get the bandwidth currently used. This totals the bandwidth used by open streams and returns the total bandwidth used in 100's of bits/sec

Reimplemented in H323Connection.

virtual BOOL OpalConnection::SetBandwidthUsed ( unsigned  releasedBandwidth,
unsigned  requiredBandwidth 
) [virtual]

Set the used bandwidth in 100's of bits/sec. This is an internal function used by the OpalMediaStream bandwidth management code.

If there is insufficient bandwidth available, FALSE is returned. If sufficient bandwidth is available, then TRUE is returned and the amount of available bandwidth is reduced by the specified amount.

Parameters:
releasedBandwidth  Bandwidth to release
requiredBandwidth  Bandwidth required

virtual void OpalConnection::SetSendUserInputMode ( SendUserInputModes  mode  )  [virtual]

Set the user input indication transmission mode.

virtual SendUserInputModes OpalConnection::GetSendUserInputMode (  )  const [inline, virtual]

Get the user input indication transmission mode.

virtual SendUserInputModes OpalConnection::GetRealSendUserInputMode (  )  const [inline, virtual]

Get the real user input indication transmission mode. This will return the user input mode that will actually be used for transmissions. It will be the value of GetSendUserInputMode() provided the remote endpoint is capable of that mode.

Reimplemented in H323Connection, IAX2Connection, and SIPConnection.

virtual BOOL OpalConnection::SendUserInputString ( const PString &  value  )  [virtual]

Send a user input indication to the remote endpoint. This is for sending arbitrary strings as user indications.

The default behaviour is to call SendUserInputTone() for each character in the string.

Parameters:
value  String value of indication

Reimplemented in H323Connection, IAX2Connection, and OpalLineConnection.

virtual BOOL OpalConnection::SendUserInputTone ( char  tone,
unsigned  duration = 0 
) [virtual]

Send a user input indication to the remote endpoint. This sends DTMF emulation user input. If something more sophisticated than the simple tones that can be sent using the SendUserInput() function.

A duration of zero indicates that no duration is to be indicated. A non-zero logical channel indicates that the tone is to be syncronised with the logical channel at the rtpTimestamp value specified.

The tone parameter must be one of "0123456789#*ABCD!" where '!' indicates a hook flash. If tone is a ' ' character then a signalUpdate PDU is sent that updates the last tone indication sent. See the H.245 specifcation for more details on this.

The default behaviour sends the tone using RFC2833.

Parameters:
tone  DTMF tone code
duration  Duration of tone in milliseconds

Reimplemented in H323Connection, IAX2Connection, and SIPConnection.

virtual void OpalConnection::OnUserInputString ( const PString &  value  )  [virtual]

Call back for remote enpoint has sent user input as a string. This will be called irrespective of the source (H.245 string, H.245 signal or RFC2833).

The default behaviour calls the endpoint function of the same name.

Parameters:
value  String value of indication

virtual void OpalConnection::OnUserInputTone ( char  tone,
unsigned  duration 
) [virtual]

Call back for remote enpoint has sent user input. If duration is zero then this indicates the beginning of the tone. If duration is non-zero then it indicates the end of the tone output.

The default behaviour calls the OpalEndPoint function of the same name.

void OpalConnection::SendUserInputHookFlash ( unsigned  duration = 500  )  [inline]

Send a user input indication to the remote endpoint. This sends a Hook Flash emulation user input.

Parameters:
duration  Duration of tone in milliseconds

virtual PString OpalConnection::GetUserInput ( unsigned  timeout = 30  )  [virtual]

Get a user input indication string, waiting until one arrives.

Parameters:
timeout  Timeout in seconds on input

virtual void OpalConnection::SetUserInput ( const PString &  input  )  [virtual]

Set a user indication string. This allows the GetUserInput() function to unblock and return this string.

Parameters:
input  Input string

virtual PString OpalConnection::ReadUserInput ( const char *  terminators = "#\r\n",
unsigned  lastDigitTimeout = 4,
unsigned  firstDigitTimeout = 30 
) [virtual]

Read a sequence of user indications with timeouts.

Parameters:
terminators  Characters that can terminte input
lastDigitTimeout  Timeout on last digit in string
firstDigitTimeout  Timeout on receiving any digits

virtual BOOL OpalConnection::PromptUserInput ( BOOL  play  )  [virtual]

Play a prompt to the connection before rading user indication string.

For example the LID connection would play a dial tone.

The default behaviour does nothing.

Parameters:
play  Flag to start or stop playing the prompt

Reimplemented in OpalLineConnection.

OpalEndPoint& OpalConnection::GetEndPoint (  )  const [inline]

Get the owner endpoint for this connection.

Reimplemented in H323Connection, and SIPConnection.

OpalCall& OpalConnection::GetCall (  )  const [inline]

Get the owner call for this connection.

const PString& OpalConnection::GetToken (  )  const [inline]

Get the token for this connection.

BOOL OpalConnection::IsOriginating (  )  const [inline]

Get the call direction for this connection.

PTime OpalConnection::GetSetupUpTime (  )  const [inline]

Get the time at which the connection was begun

PTime OpalConnection::GetAlertingTime (  )  const [inline]

Get the time at which the ALERTING was received

PTime OpalConnection::GetConnectionStartTime (  )  const [inline]

Get the time at which the connection was established

PTime OpalConnection::GetConnectionEndTime (  )  const [inline]

Get the time at which the connection was cleared

const OpalProductInfo& OpalConnection::GetProductInfo (  )  const [inline]

Get the product info for all endpoints.

void OpalConnection::SetProductInfo ( const OpalProductInfo info  )  [inline]

Set the product info for all endpoints.

const PString& OpalConnection::GetLocalPartyName (  )  const [inline]

Get the local name/alias.

virtual void OpalConnection::SetLocalPartyName ( const PString &  name  )  [virtual]

Set the local name/alias.

Reimplemented in H323Connection.

const PString& OpalConnection::GetDisplayName (  )  const [inline]

Get the local display name.

void OpalConnection::SetDisplayName ( const PString &  name  )  [inline]

Set the local display name.

const PString& OpalConnection::GetRemotePartyName (  )  const [inline]

Get the caller name/alias.

PCaselessString OpalConnection::GetRemoteApplication (  )  const [inline]

Get the remote application description. This is for backward compatibility and has been supercedded by GeREmoteProductInfo();

const OpalProductInfo& OpalConnection::GetRemoteProductInfo (  )  const [inline]

Get the remote product info.

const PString& OpalConnection::GetRemotePartyNumber (  )  const [inline]

Get the remote party number, if there was one one. If the remote party has indicated an e164 number as one of its aliases or as a field in the Q.931 PDU, then this function will return it.

const PString& OpalConnection::GetRemotePartyAddress (  )  const [inline]

Get the remote party address.

virtual const PString OpalConnection::GetRemotePartyCallbackURL (  )  const [inline, virtual]

Get the remote party address. This will return the "best guess" at an address to use in a to call the user again later.

Reimplemented in H323Connection, and SIPConnection.

virtual const PString& OpalConnection::GetCalledDestinationNumber (  )  const [inline, virtual]

Get the called number (for incoming calls). This is useful for gateway applications where the destination number may not be the same as the local number

virtual const PString& OpalConnection::GetCalledDestinationName (  )  const [inline, virtual]

Get the called name (for incoming calls). This is useful for gateway applications where the destination name may not be the same as the local username

virtual const PString& OpalConnection::GetCalledDestinationURL (  )  const [inline, virtual]

Get the called URL (for incoming calls). This is useful for gateway applications where the destination number may not be the same as the local number

unsigned OpalConnection::GetMinAudioJitterDelay (  )  const [inline]

Get the default maximum audio jitter delay parameter. Defaults to 50ms

unsigned OpalConnection::GetMaxAudioJitterDelay (  )  const [inline]

Get the default maximum audio delay jitter parameter. Defaults to 250ms.

void OpalConnection::SetAudioJitterDelay ( unsigned  minDelay,
unsigned  maxDelay 
)

Set the maximum audio delay jitter parameter.

Parameters:
minDelay  New minimum jitter buffer delay in milliseconds
maxDelay  New maximum jitter buffer delay in milliseconds

OpalSilenceDetector* OpalConnection::GetSilenceDetector (  )  const [inline]

Get the silence detector active on connection.

OpalEchoCanceler* OpalConnection::GetEchoCanceler (  )  const [inline]

Get the echo canceler active on connection.

virtual const OpalGloballyUniqueID& OpalConnection::GetIdentifier (  )  const [inline, virtual]

Get the protocol-specific unique identifier for this connection.

virtual OpalTransport& OpalConnection::GetTransport (  )  const [inline, virtual]

Reimplemented in H323Connection, and SIPConnection.

OpalConnection::PDICTIONARY ( MediaAddressesDict  ,
POrdinalKey  ,
OpalTransportAddress   
)

MediaAddressesDict& OpalConnection::GetMediaTransportAddresses (  )  [inline]

const RTP_DataFrame::PayloadMapType& OpalConnection::GetRTPPayloadMap (  )  const [inline]

BOOL OpalConnection::RemoteIsNAT (  )  const [inline]

Return TRUE if the remote appears to be behind a NAT firewall

virtual void OpalConnection::SetSecurityMode ( const PString &  v  )  [inline, virtual]

virtual PString OpalConnection::GetSecurityMode (  )  const [inline, virtual]

StringOptions* OpalConnection::GetStringOptions (  )  const [inline]

void OpalConnection::SetStringOptions ( StringOptions options  ) 

virtual BOOL OpalConnection::OnOpenIncomingMediaChannels (  )  [virtual]

Reimplemented in H323Connection, and SIPConnection.

virtual void OpalConnection::ApplyStringOptions (  )  [virtual]

virtual void OpalConnection::PreviewPeerMediaFormats ( const OpalMediaFormatList fmts  )  [virtual]

virtual void OpalConnection::EnableRecording (  )  [virtual]

virtual void OpalConnection::DisableRecording (  )  [virtual]

virtual BOOL OpalConnection::IsRTPNATEnabled ( const PIPSocket::Address &  localAddr,
const PIPSocket::Address &  peerAddr,
const PIPSocket::Address &  sigAddr,
BOOL  incoming 
) [virtual]

OpalConnection::PDECLARE_NOTIFIER ( OpalRFC2833Info  ,
OpalConnection  ,
OnUserInputInlineRFC2833   
) [protected]

OpalConnection::PDECLARE_NOTIFIER ( OpalRFC2833Info  ,
OpalConnection  ,
OnUserInputInlineCiscoNSE   
) [protected]

OpalConnection::PDECLARE_NOTIFIER ( PThread  ,
OpalConnection  ,
OnReleaseThreadMain   
) [protected]

OpalConnection::PDECLARE_NOTIFIER ( RTP_DataFrame  ,
OpalConnection  ,
OnRecordAudio   
) [protected]

void OpalConnection::SetPhase ( Phases  phaseToSet  )  [protected]

Set the phase of the connection.

Parameters:
phaseToSet the phase to set

virtual OpalMediaStream* OpalConnection::InternalCreateMediaStream ( const OpalMediaFormat mediaFormat,
unsigned  sessionID,
BOOL  isSource 
) [protected, virtual]

Reimplemented in H323Connection.


Member Data Documentation

OpalCall& OpalConnection::ownerCall [protected]

OpalEndPoint& OpalConnection::endpoint [protected]

Reimplemented in H323Connection, IAX2Connection, OpalLineConnection, SIPConnection, and OpalFaxConnection.

PMutex OpalConnection::phaseMutex [protected]

Phases OpalConnection::phase [protected]

PString OpalConnection::callToken [protected]

OpalGloballyUniqueID OpalConnection::callIdentifier [protected]

BOOL OpalConnection::originating [protected]

PTime OpalConnection::setupTime [protected]

PTime OpalConnection::alertingTime [protected]

PTime OpalConnection::connectedTime [protected]

PTime OpalConnection::callEndTime [protected]

OpalProductInfo OpalConnection::productInfo [protected]

PString OpalConnection::localPartyName [protected]

PString OpalConnection::displayName [protected]

PString OpalConnection::remotePartyName [protected]

OpalProductInfo OpalConnection::remoteProductInfo [protected]

PString OpalConnection::remotePartyNumber [protected]

PString OpalConnection::remotePartyAddress [protected]

CallEndReason OpalConnection::callEndReason [protected]

PString OpalConnection::calledDestinationNumber [protected]

PString OpalConnection::calledDestinationName [protected]

PString OpalConnection::calledDestinationURL [protected]

BOOL OpalConnection::remoteIsNAT [protected]

SendUserInputModes OpalConnection::sendUserInputMode [protected]

PString OpalConnection::userInputString [protected]

PSyncPoint OpalConnection::userInputAvailable [protected]

BOOL OpalConnection::detectInBandDTMF [protected]

unsigned OpalConnection::q931Cause [protected]

OpalSilenceDetector* OpalConnection::silenceDetector [protected]

OpalEchoCanceler* OpalConnection::echoCanceler [protected]

OpalRFC2833Proto* OpalConnection::rfc2833Handler [protected]

MediaAddressesDict OpalConnection::mediaTransportAddresses [protected]

OpalMediaStreamList OpalConnection::mediaStreams [protected]

RTP_SessionManager OpalConnection::rtpSessions [protected]

unsigned OpalConnection::minAudioJitterDelay [protected]

unsigned OpalConnection::maxAudioJitterDelay [protected]

unsigned OpalConnection::bandwidthAvailable [protected]

RTP_DataFrame::PayloadMapType OpalConnection::rtpPayloadMap [protected]

PString OpalConnection::securityMode [protected]

BOOL OpalConnection::useRTPAggregation [protected]

StringOptions* OpalConnection::stringOptions [protected]

PString OpalConnection::recordAudioFilename [protected]


The documentation for this class was generated from the following file:
Generated on Fri Mar 7 06:34:04 2008 for OPAL by  doxygen 1.5.1