Yate
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Friends
MGCPEngine Class Reference

An MGCP engine. More...

#include <yatemgcp.h>

Inheritance diagram for MGCPEngine:
DebugEnabler Mutex Lockable

List of all members.

Public Member Functions

 MGCPEngine (bool gateway, const char *name=0, const NamedList *params=0)
virtual ~MGCPEngine ()
bool gateway () const
const SocketAddraddress () const
unsigned int maxRecvPacket () const
bool allowUnkCmd () const
unsigned int retransInterval () const
unsigned int retransCount () const
u_int64_t extraTime () const
bool parseParamToLower () const
bool provisional () const
bool ackRequest () const
void ackRequest (bool request)
virtual void initialize (const NamedList &params)
bool knownCommand (const String &cmd)
void addCommand (const char *cmd)
void attach (MGCPEndpoint *ep)
void detach (MGCPEndpoint *ep, bool del=false, bool delTrans=false)
MGCPEndpointfindEp (MGCPEndpoint *ep)
MGCPEndpointfindEp (const String &epId)
MGCPTransactionfindTrans (unsigned int id, bool outgoing)
unsigned int getNextId ()
MGCPTransactionsendCommand (MGCPMessage *cmd, const SocketAddr &address)
bool receive (unsigned char *buffer, SocketAddr &addr)
bool process (u_int64_t time=Time())
void runReceive ()
void runProcess ()
MGCPEventgetEvent (u_int64_t time=Time())
virtual bool processEvent (MGCPEvent *event)
virtual bool processEvent (MGCPTransaction *trans, MGCPMessage *msg)
void returnEvent (MGCPEvent *event)
void cleanup (bool gracefully=true, const char *text="Shutdown")
virtual void timeout (MGCPTransaction *tr)

Static Public Member Functions

static int defaultPort (bool gateway)

Static Public Attributes

static TokenDict mgcp_commands []
static TokenDict mgcp_responses []
static TokenDict mgcp_reasons []

Protected Member Functions

bool sendData (const String &msg, const SocketAddr &address)
void appendTrans (MGCPTransaction *trans)
void removeTrans (MGCPTransaction *trans, bool del)

Protected Attributes

ObjList m_endpoints
ObjList m_transactions
ListIterator m_iterator

Friends

class MGCPPrivateThread
class MGCPTransaction

Detailed Description

An MGCP engine.

The engine may keep gateway endpoints or call agents Keep the transaction list and manage it (create/delete/modify/timeout...) Keep a list with the endpoints it services Generate transaction numbers (IDs) Parse received messages, validate and send them to the appropriate transaction Send MGCP messages to remote addresses


Constructor & Destructor Documentation

MGCPEngine ( bool  gateway,
const char *  name = 0,
const NamedList params = 0 
)

Constructor. Construct the engine and, optionally, initialize it

Parameters:
gatewayEngine's mode: true if this engine is an MGCP Gateway, false if it's a collection of Call Agents
nameOptional debug name for this engine
paramsOptional parameters used to initialize this engine
virtual ~MGCPEngine ( ) [virtual]

Destructor. Clear all lists


Member Function Documentation

bool ackRequest ( ) const [inline]

Get the remote ACK request flag

Returns:
True if remote will be requested to send an ACK
void ackRequest ( bool  request) [inline]

Set the remote ACK request flag

Parameters:
requestFalse to not request from remote to send an ACK
void addCommand ( const char *  cmd)

Add a command to the list of known commands

Parameters:
cmdThe command name to add
const SocketAddr& address ( ) const [inline]

Get the IP address used by this engine to receive data

Returns:
The IP address used by this engine to receive data
bool allowUnkCmd ( ) const [inline]

Check if this engine is allowed to send/accept unknown commands

Returns:
True if this engine is allowed to send/accept unknown commands
void appendTrans ( MGCPTransaction trans) [protected]

Append a transaction to the list

Parameters:
transThe transaction to append
void attach ( MGCPEndpoint ep)

Append an endpoint to this engine if not already done

Parameters:
epThe endpoint to append
void cleanup ( bool  gracefully = true,
const char *  text = "Shutdown" 
)

Terminate all transactions. Cancel all private threads if any and wait for them to terminate

Parameters:
gracefullyIf true, all incoming transaction will be responded and private threads will be gently cancelled. If false, all transactions will be deleted and threads will be cancelled the hard way
textOptional text to be sent with the response code of the incoming transactions on gracefully cleanup
static int defaultPort ( bool  gateway) [inline, static]

Get the default port defined by the protocol

Parameters:
gatewayTrue to get the default Gateway port, false to get the default port for the Call Agent
Returns:
The default port defined by the protocol
void detach ( MGCPEndpoint ep,
bool  del = false,
bool  delTrans = false 
)

Remove an endpoint from this engine and, optionally, remove all its transactions

Parameters:
epThe endpoint to remove
delTrue to delete it, false to just remove it from the list
delTransTrue to remove all its transactions. Forced to true if the endpoint is deleted
u_int64_t extraTime ( ) const [inline]

Get the time to live after the transaction terminated gracefully

Returns:
The time to live after the transaction terminated gracefully

Find an endpoint by its pointer

Parameters:
epThe endpoint to find
Returns:
MGCPEndpoint pointer or 0 if not found
MGCPEndpoint* findEp ( const String epId)

Find an endpoint by its id

Parameters:
epIdThe endpoint's id to find
Returns:
MGCPEndpoint pointer or 0 if not found
MGCPTransaction* findTrans ( unsigned int  id,
bool  outgoing 
)

Find a transaction by its id

Parameters:
idThe id of the transaction to find
outgoingThe transaction direction. True for outgoing, false for incoming
Returns:
MGCPTransaction pointer or 0 if not found
bool gateway ( ) const [inline]

Check if this engine is an MGCP Gateway or a collection of Call Agents

Returns:
True if this engine is an MGCP Gateway, false if it's a collection of Call Agents
MGCPEvent* getEvent ( u_int64_t  time = Time())

Try to get an event from a transaction

Parameters:
timeCurrent time in microseconds
Returns:
MGCPEvent pointer or 0 if none
unsigned int getNextId ( )

Generate a new id for an outgoing transaction

Returns:
An id for an outgoing transaction
virtual void initialize ( const NamedList params) [virtual]

Initialize this engine

Parameters:
paramsEngine's parameters
bool knownCommand ( const String cmd) [inline]

Check if a command is known by this engine

Parameters:
cmdThe command name to check
Returns:
True if the given command is known by this engine
unsigned int maxRecvPacket ( ) const [inline]

Get the maximum length or received packets. This is the size of the buffer used by this engine to read data from the socket

Returns:
The maximum length or received packets
bool parseParamToLower ( ) const [inline]

Check if the parser should convert received messages' parameters to lower case

Returns:
True if the parser should convert received messages' parameters to lower case
bool process ( u_int64_t  time = Time())

Try to get an event from a transaction. If the event contains an unknown command and this engine is not allowed to process such commands, calls the returnEvent() method, otherwise, calls the processEvent() method

Parameters:
timeCurrent time in microseconds
Returns:
True if an event was processed
virtual bool processEvent ( MGCPEvent event) [virtual]

Process an event generated by a transaction. Descendants must override this method if they want to process events. By default it calls the version of processEvent that accepts separate parameters of event

Parameters:
eventThe event to process
Returns:
True if the event was processed. If the event carry a received command and it's not processed the transaction will receive an 'unknown command' response
virtual bool processEvent ( MGCPTransaction trans,
MGCPMessage msg 
) [virtual]

Process an event generated by a transaction. Descendants must override this method if they want to process events

Parameters:
transPointer to the transaction that generated the event
msgMGCP message of the event, may be NULL
Returns:
True if the event was processed. If the event carry a received command and it's not processed the transaction will receive an 'unknown command' response
bool provisional ( ) const [inline]

Check if incoming transactions would send provisional responses

Returns:
True if incoming transactions would send provisional responses
bool receive ( unsigned char *  buffer,
SocketAddr addr 
)

Read data from the socket. Parse and process the received message

Parameters:
bufferBuffer used for read operation. The buffer must be large enough to keep the maximum packet length returned by maxRecvPacket()
addrThe sender's address if received any data
Returns:
True if received any data (a message was successfully parsed)
void removeTrans ( MGCPTransaction trans,
bool  del 
) [protected]

Remove a transaction from the list

Parameters:
transThe transaction to remove
delTrue to delete it, false to just remove it from list
unsigned int retransCount ( ) const [inline]

Get the maximum number of retransmissions for a message

Returns:
The maximum number of retransmissions for a message
unsigned int retransInterval ( ) const [inline]

Get the message retransmission interval

Returns:
The message retransmission interval
void returnEvent ( MGCPEvent event)

Returns an unprocessed event to this engine to be deleted. Incoming transactions will be responded. Unknown commands will receive a 504 Unknown Command response, the others will receive a 507 Unsupported Functionality one

Parameters:
eventThe event to return
void runProcess ( )

Repeatedly calls process() until the calling thread terminates

void runReceive ( )

Repeatedly calls receive() until the calling thread terminates

MGCPTransaction* sendCommand ( MGCPMessage cmd,
const SocketAddr address 
)

Send a command message. Create a transaction for it. The method will fail if the message is not a valid one or isn't a valid command

Parameters:
cmdThe message containig the command
addressThe destination IP address
Returns:
MGCPTransaction pointer or 0 if failed to create a transaction
bool sendData ( const String msg,
const SocketAddr address 
) [protected]

Send a string buffer through the socket

Parameters:
msgThe buffer to send
addressThe destination IP address
Returns:
False if the operation failed
virtual void timeout ( MGCPTransaction tr) [inline, virtual]

Handle a transaction that has timed out

Parameters:
trThe transaction that has timed out

Member Data Documentation

ObjList m_endpoints [protected]

The list of endpoints attached to this engine

ListIterator m_iterator [protected]

The transaction list iterator used to get events

ObjList m_transactions [protected]

The transaction list

The list of commands defined in RFC 3435

TokenDict mgcp_reasons[] [static]

The list of known reason codes defined in RFC 3435 2.5. Reason codes are used by the gateway when deleting a connection to inform the Call Agent about the reason for deleting the connection. They may also be used in a RestartInProgress command to inform the Call Agent of the reason for the RestartInProgress

The list of known responses defined in RFC 3435 2.4


The documentation for this class was generated from the following file: