#include <iax2ep.h>
Inheritance diagram for IAX2EndPoint:
enum of the components from a remote party address string These fields are from the address,
[iax2:]{username@][transport$]address[/extension][+context]
IAX2EndPoint::IAX2EndPoint | ( | OpalManager & | manager | ) |
Create the endpoint, and define local variables
IAX2EndPoint::~IAX2EndPoint | ( | ) |
Destroy the endpoint, and all associated connections
BOOL IAX2EndPoint::AddNewTranslationEntry | ( | IAX2Frame * | f | ) | [protected] |
The TokenTranslationDict may need a new entry. Examine the list of active connections, to see if any match this frame. If any do, then we add a new translation entry in tokenTable;
If a matching connection is found in connectionsActive, create a new translation entry and return TRUE. The connection, after processing the frame, will then delete the frame.
BOOL IAX2EndPoint::ConectionForFrameIsAlive | ( | IAX2Frame * | f | ) |
A simple test to report if the connection associated with this frame is still alive. This test is used when transmitting the frame. If the connection is gone, don't bother transmitting the frame. There are exceptins to this rule, such as when a hangup packet is sent (which is after the connections has died.
BOOL IAX2EndPoint::ConnectionForFrameIsAlive | ( | IAX2Frame * | f | ) |
Return True if a connection (which matches this Frame ) can be found. This check is called prior to transmission of this frame.
void IAX2EndPoint::CopyLocalMediaFormats | ( | OpalMediaFormatList & | list | ) |
Copy to the supplied OpalMediaList the media formats we support
virtual IAX2Connection* IAX2EndPoint::CreateConnection | ( | OpalCall & | call, | |
const PString & | token, | |||
void * | userData, | |||
const PString & | remoteParty | |||
) | [virtual] |
Create a connection for the IAX endpoint. The default implementation is to create a IAX2Connection.
token | Owner of connection |
userData | token used to identify connection |
remoteParty | User data for connection Person we are calling. |
static PStringList IAX2EndPoint::DissectRemoteParty | ( | const PString & | other | ) | [static] |
Given a remote party name of the format:
[proto:][alias@][transport$]address[/extension]
pull the string apart and get the components. The compoents are stored in a PStringList, indexed by the enum RemoteAddressFields
void IAX2EndPoint::GetCodecLengths | ( | PINDEX | src, | |
PINDEX & | compressedBytes, | |||
PINDEX & | duration | |||
) |
Get the frame size (bytes) and frame duration (ms) for compressed data from this codec
PString IAX2EndPoint::GetLocalNumber | ( | ) | [inline] |
Report the number used by the computer running this program
PString IAX2EndPoint::GetLocalUserName | ( | ) | [inline] |
Report the local username
virtual OpalMediaFormatList IAX2EndPoint::GetMediaFormats | ( | ) | const [virtual] |
Get the data formats this endpoint is capable of operating. This provides a list of media data format names that may be used by an OpalMediaStream may be created by a connection from this endpoint.
Note that a specific connection may not actually support all of the media formats returned here, but should return no more.
The default behaviour is pure.
Implements OpalEndPoint.
PINDEX IAX2EndPoint::GetOutSequenceNumberForStatusQuery | ( | ) |
Get out sequence number to use on status query frames
PString& IAX2EndPoint::GetPassword | ( | ) | [inline] |
Report the password
PINDEX IAX2EndPoint::GetPreferredCodec | ( | OpalMediaFormatList & | list | ) |
Return the bitmask which specifies the preferred codec
PINDEX IAX2EndPoint::GetSupportedCodecs | ( | OpalMediaFormatList & | list | ) |
Return the bitmask which specifies the possible codecs we support
virtual void IAX2EndPoint::IncomingEthernetFrame | ( | IAX2Frame * | frame | ) | [virtual] |
Handle a received IAX frame. This may be a mini frame or full frame
BOOL IAX2EndPoint::Initialise | ( | ) |
Setup the Endpoint internval variables, which is called at program startup.
WORD IAX2EndPoint::ListenPortNumber | ( | ) | [inline] |
Report the port in use for IAX calls
virtual BOOL IAX2EndPoint::MakeConnection | ( | OpalCall & | call, | |
const PString & | party, | |||
void * | userData = NULL | |||
) | [virtual] |
Set up a connection to a remote party. This is called from the OpalManager::MakeConnection() function once it has determined that this is the endpoint for the protocol.
The general form for this party parameter is:
[iax2:]{username@][transport$]address[/extension][+context]
where the various fields will have meanings specific to the endpoint type. For example, with H.323 it could be "h323:Fred@site.com" which indicates a user Fred at gatekeeper size.com. Whereas for the PSTN endpoint it could be "pstn:5551234" which is to call 5551234 on the first available PSTN line.
The proto field is optional when passed to a specific endpoint. If it is present, however, it must agree with the endpoints protocol name or FALSE is returned.
This function usually returns almost immediately with the connection continuing to occur in a new background thread.
If FALSE is returned then the connection could not be established. For example if a PSTN endpoint is used and the assiciated line is engaged then it may return immediately. Returning a non-NULL value does not mean that the connection will succeed, only that an attempt is being made.
The default behaviour is pure.
party | Owner of connection |
userData | Remote party to call Arbitrary data to pass to connection |
Implements OpalEndPoint.
void IAX2EndPoint::NewIncomingConnection | ( | IAX2Frame * | f | ) |
Handle new incoming connection from listener.
A return value of TRUE indicates that the transport object should be deleted by the caller. FALSE indicates that something else (eg the connection) has taken over responsibility for deleting the transport.
Well, that is true of Opal. In iax2, we do all the work of creating a new connection etc. The transport arguement is ignore. In Iax2, this method is void, as no value is returned. Further, in iax2, we process the incoming frame.
f | Frame carrying the new request. |
virtual BOOL IAX2EndPoint::NewIncomingConnection | ( | OpalTransport * | transport | ) | [virtual] |
Handle new incoming connection from listener.
The default behaviour does nothing.
transport | Transport connection came in on |
Reimplemented from OpalEndPoint.
int IAX2EndPoint::NextSrcCallNumber | ( | ) |
Request a new src call number, one that is different to all other src call numbers for this invocation of the program.
void IAX2EndPoint::OnConnectionClose | ( | IAX2Connection & | con | ) |
Call back for when a connection has closed
void IAX2EndPoint::OnEstablished | ( | OpalConnection & | con | ) | [virtual] |
Call back for when a connections is established (we have received the first media packet)
Reimplemented from OpalEndPoint.
BOOL IAX2EndPoint::ProcessInMatchingConnection | ( | IAX2Frame * | f | ) | [protected] |
For the supplied IAX2Frame, pass it to a connection in the connectionsActive structure. If no matching connection is found, return FALSE;
If a matching connections is found, give the frame to the connection (for the connection to process) and return TRUE;
void IAX2EndPoint::ProcessReceivedEthernetFrames | ( | ) |
Pull frames off the incoming list, and pass on to the relevant connection. If no matching connection found, delete the frame. Repeat the process until no frames are left.
void IAX2EndPoint::ReportStoredConnections | ( | ) |
Write the token of all connections in the connectionsActive structure to the trace file
void IAX2EndPoint::ReportTransmitterLists | ( | ) |
Report on the frames in the current transmitter class, which are pending transmission
void IAX2EndPoint::SetLocalNumber | ( | PString | newValue | ) |
Set the local (on this host) number to some value
void IAX2EndPoint::SetLocalUserName | ( | PString | newValue | ) |
Set the username to some value
void IAX2EndPoint::SetPassword | ( | PString | newValue | ) |
Set the password to some value
void IAX2EndPoint::StartRinging | ( | PString | remoteCaller | ) |
We have an incoming call. Do we accept ?
PMutex IAX2EndPoint::callNumbLock [protected] |
lock on access to call numbers variable
int IAX2EndPoint::callnumbs [protected] |
Number of active calls
PAtomicInteger IAX2EndPoint::callsEstablished [protected] |
Thread safe counter which keeps track of the calls created by this endpoint. This value is used when giving outgoing calls a unique ID
PTime IAX2EndPoint::callStartTime [protected] |
Time when a call was started
Thread which transfers frames from the Receiver to the appropriate connection. It momentarily locks the connection list, searches through, and then completes the trasnsfer. If need be, this thread will create a new conneciton (to cope with a new incoming call) and add the new connections to the internal list.
OpalMediaFormatList IAX2EndPoint::localMediaFormats [protected] |
Local copy of the media types we can handle
PString IAX2EndPoint::localNumber [protected] |
Number, as used by the computer on the host running this program
PString IAX2EndPoint::localUserName [protected] |
Name of this user, which is used as the IeCallingNumber
PMutex IAX2EndPoint::mutexTokenTable [protected] |
Threading mutex on the variable tokenTable
IAX2FrameList IAX2EndPoint::packetsReadFromEthernet [protected] |
List of iax packets which has been read from the ethernet, and is to be sent to the matching IAX2Connection
PString IAX2EndPoint::password [protected] |
Password for this user, which is used when processing an authentication request
Pointer to the receiver class, which is always valid
PUDPSocket* IAX2EndPoint::sock [protected] |
The socket on which all data is sent/received.
IAX2Processor* IAX2EndPoint::specialPacketHandler [protected] |
Pointer to the Processor class which handles special packets (eg lagrq) that have no destination call to handle them.
PINDEX IAX2EndPoint::statusQueryCounter [protected] |
Counter to use for sending on status query frames
PMutex IAX2EndPoint::statusQueryMutex [protected] |
Mutex for the statusQueryCounter
PStringToString IAX2EndPoint::tokenTable [protected] |
tokenTable is a hack to allow IAX2 to fit in with one of the demands of the opal library.
Opal demands that at connection setup, we know the unique ID which this call will use.
Since the unique ID is remote ip adress + remote's Source Call number, this is unknown if we are initiating the call. Consequently, this table is needed, as it provides a translation between the initial (or psuedo) token and the token that is later adopted
Pointer to the transmitter class, which is always valid