|
|
This class holds all the data needded for the management of an IAX2 transaction which might be a call leg, a register/unregister or a poke one
| enum Type { Incorrect, New, RegReq, RegRel, Poke, } | Type |
The transaction type as enumeration
| enum State { Connected, NewLocalInvite, NewLocalInvite_AuthRecv, NewLocalInvite_RepSent, NewRemoteInvite, NewRemoteInvite_AuthSent, NewRemoteInvite_RepRecv, Unknown, Terminated, Terminating, } | State |
The transaction state as enumeration
| IAXTransaction* factoryIn (IAXEngine* engine, IAXFullFrame* frame, u_int16_t lcallno, const SocketAddr& addr,
void* data = 0)
| factoryIn |
[static]
Constructs an incoming transaction from a received full frame with an IAX control message that needs a new transaction
Parameters:
| engine | The engine that owns this transaction |
| frame | A valid full frame |
| lcallno | Local call number |
| addr | Address from where the frame was received |
| data | Pointer to arbitrary user data |
| IAXTransaction* factoryOut (IAXEngine* engine, Type type, u_int16_t lcallno, const SocketAddr& addr,
IAXIEList& ieList, void* data = 0)
| factoryOut |
[static]
Constructs an outgoing transaction with an IAX control message that needs a new transaction
Parameters:
| engine | The engine that owns this transaction |
| type | Transaction type |
| lcallno | Local call number |
| addr | Address to use |
| ieList | Starting IE list |
| data | Pointer to arbitrary user data |
| ~IAXTransaction ()
| ~IAXTransaction |
[virtual]
Destructor
| inline IAXEngine* getEngine ()
| getEngine |
[const]
The IAX engine this transaction belongs to
Returns: Pointer to the IAXEngine of this transaction
| inline Type type ()
| type |
[const]
Get the type of this transaction
Returns: The type of the transaction as enumeration
| inline const char* typeName ()
| typeName |
Retrieve transaction type name
Returns: Transaction type name
| inline State state ()
| state |
[const]
Get the state of this transaction
Returns: The state of the transaction as enumeration
| inline const char* stateName ()
| stateName |
Retrieve the transaction state name
Returns: Transaction state name
| inline u_int64_t timeStamp ()
| timeStamp |
[const]
Get the timestamp of this transaction
Returns: The timestamp of this transaction
| inline bool outgoing ()
| outgoing |
[const]
Get the direction of this transaction
Returns: True if it is an outgoing transaction
| inline void setUserData (void* data)
| setUserData |
Store a pointer to arbitrary user data
Parameters:
| data | User provided pointer |
| inline void* getUserData ()
| getUserData |
[const]
Return the opaque user data stored in the transaction
Returns: Pointer set by user
| inline u_int16_t localCallNo ()
| localCallNo |
[const]
Retrieve the local call number
Returns: 15-bit local call number
| inline u_int16_t remoteCallNo ()
| remoteCallNo |
[const]
Retrieve the remote call number
Returns: 15-bit remote call number
| inline const SocketAddr& remoteAddr ()
| remoteAddr |
[const]
Retrieve the remote host+port address
Returns: A reference to the remote address
| inline const String& username ()
| username |
Retrieve the username
Returns: A reference to the username
| inline const String& callingNo ()
| callingNo |
Retrieve the calling number
Returns: A reference to the calling number
| inline const String& callingName ()
| callingName |
Retrieve the calling name
Returns: A reference to the calling name
| inline const String& calledNo ()
| calledNo |
Retrieve the called number
Returns: A reference to the called number
| inline const String& calledContext ()
| calledContext |
Retrieve the called context
Returns: A reference to the called context
| inline const String& challenge ()
| challenge |
Retrieve the challenge sent/received during authentication
Returns: A reference to the challenge
| inline IAXFormat* getFormat (int type)
| getFormat |
Retrieve the media of a given type
Parameters:
| type | Media type to retrieve |
Returns: IAXFormat pointer or 0 for invalid type
| inline IAXMediaData* getData (int type)
| getData |
Retrieve the media data for a given type
Parameters:
| type | Media type to retrieve |
Returns: IAXMediaData pointer or 0 for invalid type
| inline u_int32_t format (int type)
| format |
Retrieve the media format used during initialization
Parameters:
| type | Media type to retrieve |
Returns: The initial media format for the given type
| inline u_int32_t formatIn (int type)
| formatIn |
Retrieve the incoming media format
Parameters:
| type | Media type to retrieve |
Returns: The incoming media format for the given type
| inline u_int32_t formatOut (int type)
| formatOut |
Retrieve the outgoing media format
Parameters:
| type | Media type to retrieve |
Returns: The outgoing media format for the given type
| inline u_int32_t capability ()
| capability |
[const]
Retrieve the media capability of this transaction
Returns: The media capability of this transaction
| inline u_int32_t expire ()
| expire |
[const]
Retrieve the expiring time for a register/unregister transaction
Returns: The expiring time for a register/unregister transaction
| inline const String& authdata ()
| authdata |
Retrieve the authentication data sent/received during authentication
Returns: A reference to the authentication data
| inline void setDestroy ()
| setDestroy |
Set the destroy flag
| void start ()
| start |
Start an outgoing transaction. This method is thread safe
| IAXTransaction* processFrame (IAXFrame* frame)
| processFrame |
Process a frame from remote peer. This method is thread safe
Parameters:
| frame | IAX frame belonging to this transaction to process |
Returns: 'this' if successful or NULL if the frame is invalid
| IAXTransaction* processMedia (DataBlock& data, u_int32_t tStamp,
int type = IAXFormat::Audio, bool full = false, bool mark = false)
| processMedia |
Process received media data
Parameters:
| data | Received data |
| tStamp | Mini frame timestamp multiplied by format multiplier |
| type | Media type |
| full | True if received in a full frame |
| mark | Mark flag |
Returns: 0
| unsigned int sendMedia (const DataBlock& data, unsigned int tStamp, u_int32_t format,
int type = IAXFormat::Audio, bool mark = false)
| sendMedia |
Send media data to remote peer. Update the outgoing media format if changed
Parameters:
| data | Data to send |
| tStamp | Data timestamp |
| format | Data format |
| type | Media type |
| mark | Mark flag |
Returns: The number of bytes sent
| IAXEvent* getEvent (const Time& now = Time())
| getEvent |
Get an IAX event from the queue This method is thread safe.
Parameters:
| now | Current time |
Returns: Pointer to an IAXEvent or 0 if none available
| unsigned char getMaxFrameList ()
| getMaxFrameList |
[static]
Get the maximum allowed number of full frames in the incoming frame list
Returns: The maximum allowed number of full frames in the incoming frame list
| bool setMaxFrameList (unsigned char value)
| setMaxFrameList |
[static]
Set the maximum allowed number of full frames in the incoming frame list
Parameters:
| value | The new value of m_maxInFrames |
Returns: False if value is greater then IAX2_MAX_TRANSINFRAMELIST
| inline bool sendAnswer ()
| sendAnswer |
Send an ANSWER frame to remote peer This method is thread safe
Returns: False if the current transaction state is not Connected
| inline bool sendRinging ()
| sendRinging |
Send a RINGING frame to remote peer This method is thread safe
Returns: False if the current transaction state is not Connected
| inline bool sendProgress ()
| sendProgress |
Send a PROCEEDING frame to remote peer This method is thread safe
Returns: False if the current transaction state is not Connected
| bool sendAccept (unsigned int* expires = 0)
| sendAccept |
Send an ACCEPT/REGACK frame to remote peer This method is thread safe
Parameters:
| expires | Optional pointer to expiring time for register transactions |
Returns: False if the transaction type is not New and state is NewRemoteInvite or NewRemoteInvite_AuthRep or if the transaction type is not RegReq and state is NewRemoteInvite or type is not RegReq/RegRel and state is NewRemoteInvite_AuthRep
| bool sendHangup (const char* cause = 0, u_int8_t code = 0)
| sendHangup |
Send a HANGUP frame to remote peer This method is thread safe
Parameters:
| cause | Optional reason for hangup |
| code | Optional code of reason |
Returns: False if the transaction type is not New or state is Terminated/Terminating
| bool sendReject (const char* cause = 0, u_int8_t code = 0)
| sendReject |
Send a REJECT/REGREJ frame to remote peer This method is thread safe
Parameters:
| cause | Optional reason for reject |
| code | Optional code of reason |
Returns: False if the transaction type is not New/RegReq/RegRel or state is Terminated/Terminating
| bool sendAuth ()
| sendAuth |
Send an AUTHREQ/REGAUTH frame to remote peer This method is thread safe
Returns: False if the current transaction state is not NewRemoteInvite
| bool sendAuthReply (const String& response)
| sendAuthReply |
Send an AUTHREP/REGREQ/REGREL frame to remote peer as a response to AUTHREQ/REGREQ/REGREL This method is thread safe
Parameters:
| response | Response to send |
Returns: False if the current transaction state is not NewLocalInvite_AuthRecv
| inline bool sendDtmf (u_int8_t dtmf)
| sendDtmf |
Send a DTMF frame to remote peer This method is thread safe
Parameters:
| dtmf | DTMF char to send |
Returns: False if the current transaction state is not Connected or dtmf is grater then 127
| bool sendText (const char* text)
| sendText |
Send a TEXT frame to remote peer This method is thread safe
Parameters:
| text | Text to send |
Returns: False if the current transaction state is not Connected
| inline bool sendNoise (u_int8_t noise)
| sendNoise |
Send a NOISE frame to remote peer This method is thread safe
Parameters:
| noise | Noise value to send |
Returns: False if the current transaction state is not Connected or noise is grater then 127
| bool abortReg ()
| abortReg |
Abort a registration transaction This method is thread safe
Returns: False transaction is not a registration one or is already terminating
| bool enableTrunking (IAXMetaTrunkFrame* trunkFrame, bool efficientUse)
| enableTrunking |
Enable trunking for this transaction
Parameters:
| trunkFrame | Pointer to IAXMetaTrunkFrame used to send trunked media |
| efficientUse | Use or not the trunk based on calls using it |
Returns: False trunking is already enabled for this transactio or trunkFrame is 0
| void processCallToken (const DataBlock& callToken)
| processCallToken |
Process a received call token This method is thread safe
Parameters:
| callToken | Received call token |
| void processMiniNoTs (u_int32_t ts, ObjList& blocks, const Time& now = Time())
| processMiniNoTs |
Process incoming audio miniframes from trunk without timestamps
Parameters:
| ts | Trunk frame timestamp |
| blocks | Received blocks |
| now | Current time |
| void print (bool printStats = false, bool printFrames = false, const char* location = "status")
|
Print transaction data on stdin
Parameters:
| printStats | True to print media statistics |
| printFrames | True to print in/out pending frames |
| location | Additional location info to be shown in debug |
| inline const char* typeName (int type)
| typeName |
[static]
Retrieve transaction type name from transaction type
Parameters:
| type | Transaction type |
Returns: Requested type name
| inline const char* stateName (int state)
| stateName |
[static]
Retrieve transaction state name
Parameters:
| state | Transaction state |
Returns: Requested state name
| static const TokenDict s_typeName[] | s_typeName[] |
| static const TokenDict s_stateName[] | s_stateName[] |
| static String s_iax_modNoAuthMethod | s_iax_modNoAuthMethod |
| static String s_iax_modNoMediaFormat | s_iax_modNoMediaFormat |
| static String s_iax_modInvalidAuth | s_iax_modInvalidAuth |
| static String s_iax_modNoUsername | s_iax_modNoUsername |
| IAXTransaction (IAXEngine* engine, IAXFullFrame* frame, u_int16_t lcallno, const SocketAddr& addr,
void* data = 0)
| IAXTransaction |
[protected]
Constructor: constructs an incoming transaction from a received full frame with an IAX control message that needs a new transaction
Parameters:
| engine | The engine that owns this transaction |
| frame | A valid full frame |
| lcallno | Local call number |
| addr | Address from where the frame was received |
| data | Pointer to arbitrary user data |
| IAXTransaction (IAXEngine* engine, Type type, u_int16_t lcallno, const SocketAddr& addr, IAXIEList& ieList,
void* data = 0)
| IAXTransaction |
[protected]
Constructor: constructs an outgoing transaction with an IAX control message that needs a new transaction
Parameters:
| engine | The engine that owns this transaction |
| type | Transaction type: see Type enumeration |
| lcallno | Local call number |
| addr | Address to use |
| ieList | Starting IE list |
| data | Pointer to arbitrary user data |
| void destroyed ()
| destroyed |
[protected virtual]
Cleanup
Reimplemented from RefObject.
| void init (IAXIEList& ieList)
| init |
[protected]
Init data members from an IE list
Parameters:
| ieList | IE list to init from |
| bool incrementSeqNo (const IAXFullFrame* frame, bool inbound)
| incrementSeqNo |
[protected]
Increment sequence numbers (inbound or outbound) for the frames that need it
Parameters:
| frame | Received frame if inbound is true, otherwise a transmitted one |
| inbound | True for inbound frames |
Returns: True if incremented.
| bool isFrameAcceptable (const IAXFullFrame* frame)
| isFrameAcceptable |
[protected]
Test if frame is acceptable (not an out of order or a late one)
Parameters:
| frame | Frame to test |
Returns: True if frame can be added to incoming frame list
| bool changeState (State newState)
| changeState |
[protected]
Change the transaction state
Parameters:
| newState | the new transaction state |
Returns: False if trying to change a termination state into a non termination one
| IAXEvent* terminate (u_int8_t evType, bool local, IAXFullFrame* frame = 0, bool createIEList = true)
| terminate |
[protected]
Terminate the transaction.
Parameters:
| evType | IAXEvent type to generate |
| local | If true it is a locally generated event |
| frame | Frame to build event from |
| createIEList | If true create IE list in the generated event |
Returns: Pointer to a valid IAXEvent
| IAXEvent* waitForTerminate (u_int8_t evType = 0, bool local = true, IAXFullFrame* frame = 0)
| waitForTerminate |
[protected]
Wait for ACK to terminate the transaction. No more events will be generated
Parameters:
| evType | IAXEvent type to generate |
| local | If true it is a locally generated event |
| frame | Frame to build event from |
Returns: Pointer to a valid IAXEvent if evType if non 0, 0 otherwise
| void postFrame (IAXFrame::Type type, u_int32_t subclass, void* data = 0, u_int16_t len = 0, u_int32_t tStamp = 0,
bool ackOnly = false, bool mark = false)
| postFrame |
[protected]
Constructs an IAXFrameOut frame, send it to remote peer and put it in the transmission list This method is thread safe
Parameters:
| type | Frame type |
| subclass | Frame subclass |
| data | Frame IE list |
| len | Frame IE list length |
| tStamp | Frame timestamp. If 0 the transaction timestamp will be used |
| ackOnly | Frame's acknoledge only flag |
| mark | Frame mark flag |
| void postFrameIes (IAXFrame::Type type, u_int32_t subclass, IAXIEList* ies, u_int32_t tStamp = 0,
bool ackOnly = false)
| postFrameIes |
[protected]
Constructs an IAXFrameOut frame, send it to remote peer and put it in the transmission list This method is thread safe
Parameters:
| type | Frame type |
| subclass | Frame subclass |
| ies | Frame IE list |
| tStamp | Frame timestamp. If 0 the transaction timestamp will be used |
| ackOnly | Frame's acknoledge only flag |
| bool sendFrame (IAXFrameOut* frame, bool vnak = false)
| sendFrame |
[protected]
Send a full frame to remote peer
Parameters:
| frame | Frame to send |
| vnak | If true the transmission is a response to a VNAK frame |
Returns: True on success
| IAXEvent* createEvent (u_int8_t evType, bool local, IAXFullFrame* frame, State newState)
| createEvent |
[protected]
Create an event
Parameters:
| evType | Event type |
| local | If true it is a locally generated event. |
| frame | Frame to create from |
| newState | The transaction new state |
Returns: Pointer to an IAXEvent or 0 (invalid IE list)
| IAXEvent* createResponse (IAXFrameOut* frame, u_int8_t findType, u_int8_t findSubclass, u_int8_t evType, bool local, State newState)
| createResponse |
[protected]
Create an event from a received frame that is a response to a sent frame and change the transaction state to newState. Remove the response from incoming list.
Parameters:
| frame | Frame to create response for |
| findType | Frame type to find |
| findSubclass | Frame subclass to find |
| evType | Event type to generate |
| local | Local flag for the generated event. |
| newState | New transaction state if an event was generated |
Returns: Pointer to an IAXEvent or 0 (invalid IE list)
| IAXEvent* getEventResponse (IAXFrameOut* frame, bool& delFrame)
| getEventResponse |
[protected]
Find a response for a previously sent frame
Parameters:
| frame | Frame to find response for |
| delFrame | Delete frame flag. If true on exit, a response was found |
Returns: Pointer to an IAXEvent or 0
| IAXEvent* getEventResponse_New (IAXFrameOut* frame, bool& delFrame)
| getEventResponse_New |
[protected]
Find a response for a previously sent frame if the transaction type is New
Parameters:
| frame | Frame to find response for |
| delFrame | Delete frame flag. If true on exit, a response was found |
Returns: Pointer to an IAXEvent or 0
| IAXEvent* processAuthReq (IAXEvent* event)
| processAuthReq |
[protected]
Process an authentication request. If valid, send an authentication reply
Parameters:
| event | Already generated event |
Returns: Pointer to a valid IAXEvent
| IAXEvent* processAccept (IAXEvent* event)
| processAccept |
[protected]
Process an accept. If not valid (call m_engine->acceptFormatAndCapability) send a reject. Otherwise return the event
Parameters:
| event | Already generated event |
Returns: Pointer to a valid IAXEvent
| IAXEvent* processAuthRep (IAXEvent* event)
| processAuthRep |
[protected]
Process an authentication reply
Parameters:
| event | Already generated event |
Returns: Pointer to a valid IAXEvent
| IAXEvent* getEventResponse_Reg (IAXFrameOut* frame, bool& delFrame)
| getEventResponse_Reg |
[protected]
Find a response for a previously sent frame if the transaction type is RegReq/RegRel
Parameters:
| frame | Frame to find response for |
| delFrame | Delete frame flag. If true on exit, a response was found |
Returns: Pointer to an IAXEvent or 0
| IAXEvent* processRegAck (IAXEvent* event)
| processRegAck |
[protected]
Update transaction data from the event
Parameters:
| event | Already generated event |
Returns: The received event
| IAXEvent* getEventStartTrans (IAXFullFrame* frame, bool& delFrame)
| getEventStartTrans |
[protected]
Find out if an incoming frame would start a transaction
Parameters:
| frame | Frame to process |
| delFrame | Delete frame flag. If true on exit, frame is valid |
Returns: Pointer to an IAXEvent or 0
| IAXEvent* getEventRequest (IAXFullFrame* frame, bool& delFrame)
| getEventRequest |
[protected]
Find out if a frame is a remote request
Parameters:
| frame | Frame to process |
| delFrame | Delete rame flag. If true on exit, a request was found |
Returns: Pointer to an IAXEvent or 0
| IAXEvent* getEventRequest_New (IAXFullFrame* frame, bool& delFrame)
| getEventRequest_New |
[protected]
Find out if a frame is a remote request if transaction type is New
Parameters:
| frame | Frame to process |
| delFrame | Delete rame flag. If true on exit, a request was found |
Returns: Pointer to an IAXEvent or 0
| IAXFullFrame* findInFrame (IAXFrame::Type type, u_int32_t subclass)
| findInFrame |
[protected]
Search for a frame in m_inFrames having the given type and subclass
Parameters:
| type | Frame type to find. |
| subclass | Frame subclass to find. |
Returns: Pointer to frame if found or 0.
| bool findInFrameTimestamp (const IAXFullFrame* frameOut, IAXFrame::Type type, u_int32_t subclass)
| findInFrameTimestamp |
[protected]
Search in m_inFrames for a frame with the same timestamp as frameOut and deletes it.
Parameters:
| frameOut | Frame to find response for |
| type | Frame type to find |
| subclass | Frame subclass to find |
Returns: True if found.
| bool findInFrameAck (const IAXFullFrame* frameOut)
| findInFrameAck |
[protected]
Search in m_inFrames for an ACK frame which confirm the received frame and deletes it
Parameters:
| frameOut | Frame to find response for |
Returns: True if found.
| void ackInFrames ()
| ackInFrames |
[protected]
Acknoledge the last received full frame
| bool sendConnected (IAXFullFrame::ControlType subclass, IAXFrame::Type frametype = IAXFrame::Control)
| sendConnected |
[protected]
Send a frame to remote peer in state Connected This method is thread safe
Parameters:
| subclass | Frame subclass to send |
| frametype | Frame type to send |
Returns: False if the current transaction state is not Connected
| void sendAck (const IAXFullFrame* frame)
| sendAck |
[protected]
Send an ACK frame
Parameters:
| frame | Aknoledged frame |
| void sendVNAK ()
| sendVNAK |
[protected]
Send an VNAK frame
| void sendUnsupport (u_int32_t subclass)
| sendUnsupport |
[protected]
Send an Unsupport frame
Parameters:
| subclass | Unsupported frame's subclass |
| IAXEvent* processInternalOutgoingRequest (IAXFrameOut* frame, bool& delFrame)
| processInternalOutgoingRequest |
[protected]
Internal protocol outgoing frames processing (PING/LAGRQ)
Parameters:
| frame | Frame to process |
| delFrame | Delete frame flag. If true on exit, a response was found |
Returns: 0.
| IAXEvent* processInternalIncomingRequest (const IAXFullFrame* frame, bool& delFrame)
| processInternalIncomingRequest |
[protected]
Internal protocol incoming frames processing (PING/LAGRQ)
Parameters:
| frame | Frame to process |
| delFrame | Delete frame flag. If true on exit, a request was found |
Returns: 0.
| IAXEvent* processMidCallControl (IAXFullFrame* frame, bool& delFrame)
| processMidCallControl |
[protected]
Process mid call control frames
Parameters:
| frame | Frame to process |
| delFrame | Delete frame flag. If true on exit, a request was found |
Returns: A valid IAXEvent or 0
| IAXEvent* processMidCallIAXControl (IAXFullFrame* frame, bool& delFrame)
| processMidCallIAXControl |
[protected]
Process mid call IAX control frames
Parameters:
| frame | Frame to process |
| delFrame | Delete frame flag. If true on exit, a request was found |
Returns: A valid IAXEvent or 0
| IAXEvent* remoteRejectCall (IAXFullFrame* frame, bool& delFrame)
| remoteRejectCall |
[protected]
Test if frame is a Reject/RegRej frame
Parameters:
| frame | Frame to process. |
| delFrame | Delete frame flag. If true on exit, a request was found |
Returns: A valid IAXEvent or 0.
| IAXTransaction* processMediaFrame (const IAXFullFrame* frame, int type)
| processMediaFrame |
[protected]
Process received media full frames
Parameters:
| frame | Received frame |
| type | Media type |
Returns: 0
| IAXTransaction* retransmitOnVNAK (u_int16_t seqNo)
| retransmitOnVNAK |
[protected]
Send all frames from outgoing queue with outbound sequence number starting with seqNo.
Parameters:
| seqNo | Requested sequence number |
Returns: 0
| IAXEvent* internalReject (const char* reason, u_int8_t code)
| internalReject |
[protected]
Generate a Reject event after internally rejecting a transaction
Parameters:
| reason | The reason of rejecting |
| code | Error code |
Returns: A valid IAXEvent
| void eventTerminated (IAXEvent* event)
| eventTerminated |
[protected]
Event terminated feedback This method is thread safe
Parameters:
| event | The event notifying termination |
| inline IAXEvent* keepEvent (IAXEvent* event)
| keepEvent |
[protected]
Set the current event
Parameters:
| event | The event notifying termination |
Returns: event
| Generated by: paulc on bussard on Thu Jul 24 18:41:02 2014, using kdoc 2.0a54. |