#include <iax2con.h>
Inheritance diagram for IAX2Connection:
General worker methods | |
void | IncomingEthernetFrame (IAX2Frame *frame) |
IAX2EndPoint & | GetEndPoint () |
void | ReportStatistics () |
void | Release (CallEndReason reason=EndedByLocalUser) |
void | ClearCall (CallEndReason reason=EndedByLocalUser) |
void | EndCallNow (CallEndReason reason=EndedByLocalUser) |
void | SendDtmf (PString dtmf) |
virtual BOOL | SendUserInputString (const PString &value) |
virtual BOOL | SendUserInputTone (char tone, unsigned duration) |
void | AcceptIncomingCall () |
BOOL | IsCallTerminating () |
BOOL | SetAlerting (const PString &calleeName, BOOL withMedia) |
BOOL | SetConnected () |
OpalMediaFormatList | GetMediaFormats () const |
OpalMediaStream * | CreateMediaStream (const OpalMediaFormat &mediaFormat, unsigned sessionID, BOOL isSource) |
void | SetCallToken (PString newToken) |
PString | GetCallToken () |
void | TransmitFrameToRemoteEndpoint (IAX2Frame *src) |
void | PutSoundPacketToNetwork (PBYTEArray *sund) |
IAX2Frame * | GetSoundPacketFromNetwork () |
IAX2Remote & | GetRemoteInfo () |
IAX2SequenceNumbers & | GetSequenceInfo () |
const PTimeInterval & | GetCallStartTick () |
virtual BOOL | OnIncomingConnection () |
virtual void | OnSetUp () |
virtual void | OnAlerting () |
virtual void | OnConnected () |
virtual void | OnEstablished () |
void | OnReleased () |
BOOL | SetUpConnection () |
PINDEX | GetSupportedCodecs () |
PINDEX | GetPreferredCodec () |
void | BuildRemoteCapabilityTable (unsigned int remoteCapability, unsigned int format) |
unsigned int | ChooseCodec () |
static BOOL | IsStatusQueryEthernetFrame (IAX2Frame *frame) |
Public Member Functions | |
Construction/Destruction functions | |
IAX2Connection (OpalCall &call, IAX2EndPoint &endpoint, const PString &token, void *userData, const PString &remoteParty) | |
~IAX2Connection () | |
Protected Attributes | |
Internal, protected methods, which are invoked only by this | |
thread | |
IAX2EndPoint & | endpoint |
OpalMediaFormatList | remoteMediaFormats |
OpalMediaFormatList | localMediaFormats |
IAX2Processor * | iax2Processor |
It is a thread, and runs when activated by outside events.
IAX2Connection::IAX2Connection | ( | OpalCall & | call, | |
IAX2EndPoint & | endpoint, | |||
const PString & | token, | |||
void * | userData, | |||
const PString & | remoteParty | |||
) |
Construct a connection given the endpoint.
call | Owner call for connection |
endpoint | Owner iax endpoint for connection |
token | Token to identify the connection |
userData | Specific user data for this call |
remoteParty | Person we are calling |
IAX2Connection::~IAX2Connection | ( | ) |
Destroy this connection, but do it nicely and let attached sound objects close first.
void IAX2Connection::AcceptIncomingCall | ( | ) |
Send appropriate packets to the remote node to indicate we will accept this call. Note that this method is called from the endpoint thread, (not this IAX2Connection's thread
void IAX2Connection::BuildRemoteCapabilityTable | ( | unsigned int | remoteCapability, | |
unsigned int | format | |||
) |
Fill the OpalMediaFormatList which describes the remote nodes capabilities
unsigned int IAX2Connection::ChooseCodec | ( | ) |
The local capabilites and remote capabilites are in OpalMediaFormatList classes, stored in this class. The local capbilities have already been ordered by the users preferences. The first entry in the remote capabilities is the remote endpoints preferred codec. Now, we have to select a codec to use for this connection. The selected codec is in the binary value defined by FullFrameVoice::AudioSc
void IAX2Connection::ClearCall | ( | CallEndReason | reason = EndedByLocalUser |
) |
Clear a current call. This sends a hangup frame to the remote endpoint, and then calls OpalConnection::ClearCall();
reason | Reason for call clearing |
OpalMediaStream* IAX2Connection::CreateMediaStream | ( | const OpalMediaFormat & | mediaFormat, | |
unsigned | sessionID, | |||
BOOL | isSource | |||
) | [virtual] |
Open a new media stream. This will create a media stream of subclass OpalIAXMediaStream.
The sessionID parameter is (in this case) not needed by a particular media stream and is ignored.
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.
sessionID | Media format for stream |
isSource | Session number for stream Is a source stream |
Reimplemented from OpalConnection.
void IAX2Connection::EndCallNow | ( | CallEndReason | reason = EndedByLocalUser |
) |
Cause the call to end now, but do not send any iax hangup frames etc
reason | Reason for call clearing |
const PTimeInterval& IAX2Connection::GetCallStartTick | ( | ) | [inline] |
Get the call start time
PString IAX2Connection::GetCallToken | ( | ) | [inline] |
Return the string that identifies this IAX2Connection instance
IAX2EndPoint& IAX2Connection::GetEndPoint | ( | ) | [inline] |
Return reference to the endpoint class
OpalMediaFormatList IAX2Connection::GetMediaFormats | ( | ) | const [inline, 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.
Implements OpalConnection.
PINDEX IAX2Connection::GetPreferredCodec | ( | ) |
Return the bitmask which specifies the preferred codec. The selected codec is in the binary value defined by FullFrameVoice::AudioSc
IAX2Remote& IAX2Connection::GetRemoteInfo | ( | ) | [inline] |
Get information on Remote class (remote node address & port + source & dest call number.)
IAX2SequenceNumbers& IAX2Connection::GetSequenceInfo | ( | ) | [inline] |
Get the sequence number info (inSeqNo and outSeqNo)
IAX2Frame* IAX2Connection::GetSoundPacketFromNetwork | ( | ) | [inline] |
Handle a sound packet received from the network. Return the media frame (IAX2MiniFrame or IAX2FullFrame) to the audio play stream
PINDEX IAX2Connection::GetSupportedCodecs | ( | ) |
Return the bitmask which specifies the possible codecs we support. The supported codecs are a bitmask of values defined by FullFrameVoice::AudioSc
void IAX2Connection::IncomingEthernetFrame | ( | IAX2Frame * | frame | ) |
Handle a received IAX frame. This may be a mini frame or full frame
BOOL IAX2Connection::IsCallTerminating | ( | ) | [inline] |
Report if this Connection is still active
static BOOL IAX2Connection::IsStatusQueryEthernetFrame | ( | IAX2Frame * | frame | ) | [static] |
Test to see if it is a status query type iax frame (eg lagrq) and handle it. If the frame is a status query, and it is handled, return TRUE
virtual void IAX2Connection::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 from OpalConnection.
virtual void IAX2Connection::OnConnected | ( | ) | [virtual] |
A call back function whenever a connection is "connected". This indicates that an iax link to an endpoint has been made & verified. Now, the endpoint has to receive information on this. Further, media has to start to flow.
In the context of IAX, this means that the accept and verification packets have been procesed, and or that we have received the first media from the remote end.
Reimplemented from OpalConnection.
virtual void IAX2Connection::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 IAX2 this means we have received the first full frame of media from the remote endpoint
The default behaviour calls the OpalEndPoint function of the same name.
Reimplemented from OpalConnection.
virtual BOOL IAX2Connection::OnIncomingConnection | ( | ) | [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.
This method is called right at the very beginning of the call sequence
Reimplemented from OpalConnection.
void IAX2Connection::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 from OpalConnection.
virtual void IAX2Connection::OnSetUp | ( | ) | [virtual] |
We have received a packet from the remote iax endpoint, requeting a call. Now, we use this method to invoke the opal components to do their bit.
This method is called after OnIncomingConnection().
void IAX2Connection::PutSoundPacketToNetwork | ( | PBYTEArray * | sund | ) |
Handle a sound packet received from the sound device.
Now onsend this to the remote endpoint.
void IAX2Connection::Release | ( | CallEndReason | reason = EndedByLocalUser |
) |
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.
The ConnectionRun that manages packets going into/out of the IAX2Connection will continue to run, and will send the appropriate IAX@ hangup messages. Death of the Connection thread will happen when the OnReleased thread of the OpalConnection runs
reason | Reason for call release |
void IAX2Connection::ReportStatistics | ( | ) |
Invoked by the User interface, which causes the statistics (count of in/out packets) to be printed
void IAX2Connection::SendDtmf | ( | PString | dtmf | ) |
Provided as a link between the iax endpoint and the iax processor
virtual BOOL IAX2Connection::SendUserInputString | ( | const PString & | value | ) | [virtual] |
sending text fullframes
Reimplemented from OpalConnection.
virtual BOOL IAX2Connection::SendUserInputTone | ( | char | tone, | |
unsigned | duration | |||
) | [virtual] |
sending dtmf - which is 1 char per IAX2FullFrameDtmf on the frame.
Reimplemented from OpalConnection.
BOOL IAX2Connection::SetAlerting | ( | const PString & | calleeName, | |
BOOL | withMedia | |||
) | [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.
withMedia | Name of endpoint being alerted. Open media with alerting |
Implements OpalConnection.
void IAX2Connection::SetCallToken | ( | PString | newToken | ) |
Give the call token a value. The call token is the ipaddress of the remote node concatented with the remote nodes src number. This is guaranteed to be unique. Sadly, if this connection is setting up the cal, the callToken is not known until receipt of the first packet from the remote node.
However, if this connection is created in response to a call, this connection can determine the callToken on examination of that incoming first packet
BOOL IAX2Connection::SetConnected | ( | ) | [virtual] |
Indicate to remote endpoint we are connected.
The default behaviour is pure.
Implements OpalConnection.
BOOL IAX2Connection::SetUpConnection | ( | ) | [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 behaviour at the opal level is pure. Here, the method is defined.
Implements OpalConnection.
void IAX2Connection::TransmitFrameToRemoteEndpoint | ( | IAX2Frame * | src | ) |
Transmit IAX2Frame to remote endpoint, It is only called by the the IAXProcessor class.
IAX2EndPoint& IAX2Connection::endpoint [protected] |
Global variable which specifies IAX2 protocol specific issues
Reimplemented from OpalConnection.
IAX2Processor* IAX2Connection::iax2Processor [protected] |
The thread that processes the list of pending frames on this class
OpalMediaFormatList IAX2Connection::localMediaFormats [protected] |
The list of media formats (codecs) this end wants to use. This list is defined on constructing this IAX2Connection class
The list of media formats (codecs) the remote enpoint can use. This list is defined on receiving a particular Inforation Element