# class MGCPEngine | An MGCP engine. More...
Full name | `TelEngine::MGCPEngine`
Definition | `#include <libs/ymgcp/yatemgcp.h>`
Inherits | TelEngine::DebugEnabler [public ], TelEngine::Mutex [public ]
List of all Methods
Annotated List
Files
Globals
Hierarchy
Index

#### Public Methods

- MGCPEngine (bool gateway, const char* name = 0, const NamedList* params = 0)
- virtual ~MGCPEngine ()
- inline bool gateway () const
- inline const SocketAddr& address () const
- inline unsigned int maxRecvPacket () const
- inline bool allowUnkCmd () const
- inline unsigned int retransInterval () const
- inline unsigned int retransCount () const
- inline u_int64_t extraTime () const
- inline bool parseParamToLower () const
- inline bool provisional () const
- inline bool ackRequest () const
- inline void ackRequest (bool request)
- virtual void initialize (const NamedList& params)
- inline bool knownCommand (const String& cmd)
- void addCommand (const char* cmd)
- void attach (MGCPEndpoint* ep)
- void detach (MGCPEndpoint* ep, bool del = false, bool delTrans = false)
- MGCPEndpoint* findEp (MGCPEndpoint* ep)
- MGCPEndpoint* findEp (const String& epId)
- MGCPTransaction* findTrans (unsigned int id, bool outgoing)
- unsigned int getNextId ()
- MGCPTransaction* sendCommand (MGCPMessage* cmd, const SocketAddr& address, bool engineProcess = true)
- bool receive (unsigned char* buffer, SocketAddr& addr)
- bool process (u_int64_t time = Time())
- bool processTransaction (MGCPTransaction* tr, u_int64_t time = Time())
- void runReceive (SocketAddr& addr)
- void runReceive ()
- void runProcess ()
- MGCPEvent* getEvent (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)

#### Public Static Methods

- static inline int defaultPort (bool gateway)

#### Public Members

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

#### Protected Methods

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

#### Protected Members

- ObjList m_endpoints
- ObjList m_transactions
- ListIterator m_iterator

## Detailed Description

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

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

Constructor. Construct the engine and, optionally, initialize it

Parameters:

gateway | Engine's mode: true if this engine is an MGCP Gateway, false if it's a collection of Call Agents
name | Optional debug name for this engine
params | Optional parameters used to initialize this engine

~MGCPEngine () | ### ~MGCPEngine

[virtual]

Destructor. Clear all lists

inline bool gateway () | ### gateway

[const]

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

inline const SocketAddr& address () | ### address

[const]

Get the IP address used by this engine to receive data

Returns: The IP address used by this engine to receive data

inline unsigned int maxRecvPacket () | ### maxRecvPacket

[const]

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

inline bool allowUnkCmd () | ### allowUnkCmd

[const]

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

Returns: True if this engine is allowed to send/accept unknown commands

inline unsigned int retransInterval () | ### retransInterval

[const]

Get the message retransmission interval

Returns: The message retransmission interval

inline unsigned int retransCount () | ### retransCount

[const]

Get the maximum number of retransmissions for a message

Returns: The maximum number of retransmissions for a message

inline u_int64_t extraTime () | ### extraTime

[const]

Get the time to live after the transaction terminated gracefully

Returns: The time to live after the transaction terminated gracefully

inline bool parseParamToLower () | ### parseParamToLower

[const]

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

inline bool provisional () | ### provisional

[const]

Check if incoming transactions would send provisional responses

Returns: True if incoming transactions would send provisional responses

inline bool ackRequest () | ### ackRequest

[const]

Get the remote ACK request flag

Returns: True if remote will be requested to send an ACK

inline void ackRequest (bool request) | ### ackRequest

Set the remote ACK request flag

Parameters:

request | False to not request from remote to send an ACK

void initialize (const NamedList& params) | ### initialize

[virtual]

Initialize this engine

Parameters:

params | Engine's parameters

inline bool knownCommand (const String& cmd) | ### knownCommand

Check if a command is known by this engine

Parameters:

cmd | The command name to check

Returns: True if the given command is known by this engine

void addCommand (const char* cmd) | ### addCommand

Add a command to the list of known commands

Parameters:

cmd | The command name to add

void attach (MGCPEndpoint* ep) | ### attach

Append an endpoint to this engine if not already done

Parameters:

ep | The endpoint to append

void detach (MGCPEndpoint* ep, bool del = false, bool delTrans = false) | ### detach

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

Parameters:

ep | The endpoint to remove
del | True to delete it, false to just remove it from the list
delTrans | True to remove all its transactions. Forced to true if the endpoint is deleted

MGCPEndpoint* findEp (MGCPEndpoint* ep) | ### findEp

Find an endpoint by its pointer

Parameters:

ep | The endpoint to find

Returns: MGCPEndpoint pointer or 0 if not found

MGCPEndpoint* findEp (const String& epId) | ### findEp

Find an endpoint by its id

Parameters:

epId | The endpoint's id to find

Returns: MGCPEndpoint pointer or 0 if not found

MGCPTransaction* findTrans (unsigned int id, bool outgoing) | ### findTrans

Find a transaction by its id

Parameters:

id | The id of the transaction to find
outgoing | The transaction direction. True for outgoing, false for incoming

Returns: MGCPTransaction pointer or 0 if not found

unsigned int getNextId () | ### getNextId

Generate a new id for an outgoing transaction

Returns: An id for an outgoing transaction

MGCPTransaction* sendCommand (MGCPMessage* cmd, const SocketAddr& address, bool engineProcess = true) | ### sendCommand

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:

cmd | The message containig the command
address | The destination IP address
engineProcess | Use engine private processor thread for the new transaction. If false the caller is responsable with transaction processing

Returns: MGCPTransaction pointer or 0 if failed to create a transaction

bool receive (unsigned char* buffer, SocketAddr& addr) | ### receive

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

Parameters:

buffer | Buffer used for read operation. The buffer must be large enough to keep the maximum packet length returned by maxRecvPacket()
addr | The sender's address if received any data

Returns: True if received any data (a message was successfully parsed)

bool process (u_int64_t time = Time()) | ### process

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:

time | Current time in microseconds

Returns: True if an event was processed

bool processTransaction (MGCPTransaction* tr, u_int64_t time = Time()) | ### processTransaction

Try to get an event from a given 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:

tr | Transaction to process
time | Current time in microseconds

Returns: True if an event was processed

void runReceive (SocketAddr& addr) | ### runReceive

Repeatedly calls receive() until the calling thread terminates

Parameters:

addr | The sender's address if received any data

void runReceive () | ### runReceive

Repeatedly calls receive() until the calling thread terminates

void runProcess () | ### runProcess

Repeatedly calls process() until the calling thread terminates

MGCPEvent* getEvent (u_int64_t time = Time()) | ### getEvent

Try to get an event from a transaction

Parameters:

time | Current time in microseconds

Returns: MGCPEvent pointer or 0 if none

bool processEvent (MGCPEvent* event) | ### processEvent

[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:

event | The 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

bool processEvent (MGCPTransaction* trans, MGCPMessage* msg) | ### processEvent

[virtual]

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

Parameters:

trans | Pointer to the transaction that generated the event
msg | MGCP 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

void returnEvent (MGCPEvent* event) | ### returnEvent

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:

event | The event to return

void cleanup (bool gracefully = true, const char* text = "Shutdown") | ### cleanup

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

Parameters:

gracefully | If 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
text | Optional text to be sent with the response code of the incoming transactions on gracefully cleanup

inline int defaultPort (bool gateway) | ### defaultPort

[static]

Get the default port defined by the protocol

Parameters:

gateway | True 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 timeout (MGCPTransaction* tr) | ### timeout

[virtual]

Handle a transaction that has timed out

Parameters:

tr | The transaction that has timed out

static TokenDict mgcp_commands[] | ### mgcp_commands[]

static TokenDict mgcp_responses[] | ### mgcp_responses[]

static TokenDict mgcp_reasons[] | ### mgcp_reasons[]

bool sendData (const String& msg, const SocketAddr& address) | ### sendData

[protected]

Send a string buffer through the socket

Parameters:

msg | The buffer to send
address | The destination IP address

Returns: False if the operation failed

void appendTrans (MGCPTransaction* trans) | ### appendTrans

[protected]

Append a transaction to the list

Parameters:

trans | The transaction to append

void removeTrans (MGCPTransaction* trans, bool del) | ### removeTrans

[protected]

Remove a transaction from the list

Parameters:

trans | The transaction to remove
del | True to delete it, false to just remove it from list

ObjList m_endpoints | ### m_endpoints

[protected]

ObjList m_transactions | ### m_transactions

[protected]

ListIterator m_iterator | ### m_iterator

[protected]

Generated by: paulc on bussard on Mon Feb 10 13:15:47 2014, using kdoc 2.0a54.