Yate
|
A class holding one SIP transaction. More...
#include <yatesip.h>
Public Types | |
enum | State { Invalid, Initial, Trying, Process, Retrans, Finish, Cleared } |
enum | Processed { NoMatch, NoDialog, Matched } |
Public Member Functions | |
SIPTransaction (SIPMessage *message, SIPEngine *engine, bool outgoing=true) | |
SIPTransaction (const SIPTransaction &original, const String &tag) | |
virtual | ~SIPTransaction () |
int | getState () const |
bool | isActive () const |
const SIPMessage * | initialMessage () const |
const SIPMessage * | latestMessage () const |
const SIPMessage * | recentMessage () const |
SIPEngine * | getEngine () const |
bool | isOutgoing () const |
bool | isIncoming () const |
bool | isInvite () const |
bool | isReliable () const |
const String & | getMethod () const |
const String & | getURI () const |
const String & | getBranch () const |
const String & | getCallID () const |
const String & | getDialogTag () const |
void | setDialogTag (const char *tag=0) |
void | setTransmit () |
void | setCleared () |
void | requestAuth (const String &realm, const String &domain, bool stale, bool proxy=false) |
int | authUser (String &user, bool proxy=false, GenObject *userData=0) |
virtual Processed | processMessage (SIPMessage *message, const String &branch) |
virtual void | processMessage (SIPMessage *message) |
virtual SIPEvent * | getEvent (bool pendingOnly=false) |
bool | setResponse () const |
bool | setResponse (int code, const char *reason=0) |
void | setResponse (SIPMessage *message) |
int | getResponseCode () const |
void | setUserData (void *data) |
void * | getUserData () const |
Static Public Member Functions | |
static const char * | stateName (int state) |
Protected Member Functions | |
SIPTransaction (SIPTransaction &original, SIPMessage *answer) | |
virtual void | destroyed () |
bool | tryAutoAuth (SIPMessage *answer) |
virtual SIPEvent * | getClientEvent (int state, int timeout) |
virtual SIPEvent * | getServerEvent (int state, int timeout) |
virtual void | processClientMessage (SIPMessage *message, int state) |
virtual void | processServerMessage (SIPMessage *message, int state) |
bool | changeState (int newstate) |
void | setLatestMessage (SIPMessage *message=0) |
void | setPendingEvent (SIPEvent *event=0, bool replace=false) |
bool | isPendingEvent () const |
void | setTimeout (u_int64_t delay=0, unsigned int count=1) |
Protected Attributes | |
bool | m_outgoing |
bool | m_invite |
bool | m_transmit |
int | m_state |
int | m_response |
unsigned int | m_timeouts |
u_int64_t | m_delay |
u_int64_t | m_timeout |
SIPMessage * | m_firstMessage |
SIPMessage * | m_lastMessage |
SIPEvent * | m_pending |
SIPEngine * | m_engine |
String | m_branch |
String | m_callid |
String | m_tag |
void * | m_private |
A class holding one SIP transaction.
All informaton related to a SIP transaction, starting with 1st message
enum Processed |
Possible return values from processMessage()
enum State |
Current state of the transaction
SIPTransaction | ( | SIPMessage * | message, |
SIPEngine * | engine, | ||
bool | outgoing = true |
||
) |
Constructor from first message
message | A pointer to the initial message, should not be used afterwards as the transaction takes ownership |
engine | A pointer to the SIP engine this transaction belongs |
outgoing | True if this transaction is for an outgoing request |
SIPTransaction | ( | const SIPTransaction & | original, |
const String & | tag | ||
) |
Copy constructor to be used with forked INVITEs
original | Original transaction that is to be copied |
tag | Dialog tag for the new transaction |
virtual ~SIPTransaction | ( | ) | [virtual] |
Destructor - clears all held objects
SIPTransaction | ( | SIPTransaction & | original, |
SIPMessage * | answer | ||
) | [protected] |
Constructor from previous auto authenticated transaction. This is used only internally
original | Original transaction that failed authentication |
answer | SIP answer that creates the new transaction |
Detect the proper credentials for any user in the engine
user | String to store the authenticated user name or user to look for (if not null on entry) |
proxy | True to authenticate as proxy, false as user agent |
userData | Pointer to an optional object that is passed back to SIPEngine::checkUser |
bool changeState | ( | int | newstate | ) | [protected] |
Change the transaction state
newstate | The desired new state |
virtual void destroyed | ( | ) | [protected, virtual] |
Pre-destruction notification used to clean up the transaction
Reimplemented from RefObject.
The Via branch that may uniquely identify this transaction
The call ID may identify this transaction
virtual SIPEvent* getClientEvent | ( | int | state, |
int | timeout | ||
) | [protected, virtual] |
Get an event only for client transactions
state | The current state of the transaction |
timeout | If timeout occured, number of remaining timeouts, otherwise -1 |
const String& getDialogTag | ( | ) | const [inline] |
The dialog tag that may identify this transaction
Get an event for this transaction if any is available. It provides default handling for invalid states, otherwise calls the more specific protected version. You may override this method if you need processing of invalid states.
pendingOnly | True to only return outgoing and pending events |
The SIP method this transaction handles
References String::empty().
int getResponseCode | ( | ) | const [inline] |
Retrieve the latest response code
virtual SIPEvent* getServerEvent | ( | int | state, |
int | timeout | ||
) | [protected, virtual] |
Get an event only for server transactions.
state | The current state of the transaction |
timeout | If timeout occured, number of remaining timeouts, otherwise -1 |
int getState | ( | ) | const [inline] |
The current state of the transaction
The SIP URI this transaction handles
References String::empty().
void* getUserData | ( | ) | const [inline] |
Return the opaque user data
const SIPMessage* initialMessage | ( | ) | const [inline] |
The first message that created this transaction
bool isActive | ( | ) | const [inline] |
Check if the transaction is active for the upper layer
bool isIncoming | ( | ) | const [inline] |
Check if this transaction was initiated locally or by the remote peer
bool isInvite | ( | ) | const [inline] |
Check if this transaction is an INVITE transaction or not
bool isOutgoing | ( | ) | const [inline] |
Check if this transaction was initiated by the remote peer or locally
Referenced by SIPEvent::isOutgoing().
bool isPendingEvent | ( | ) | const [inline, protected] |
Check if there is a pending event waiting
bool isReliable | ( | ) | const [inline] |
Check if this transaction is handled by a reliable protocol
const SIPMessage* latestMessage | ( | ) | const [inline] |
The last message (re)sent by this transaction
virtual void processClientMessage | ( | SIPMessage * | message, |
int | state | ||
) | [protected, virtual] |
Process only the messages for client transactions
message | A pointer to the message to process, should not be used afterwards if this method returned True |
state | The current state of the transaction |
virtual Processed processMessage | ( | SIPMessage * | message, |
const String & | branch | ||
) | [virtual] |
Check if a message belongs to this transaction and process it if so
message | A pointer to the message to check, should not be used afterwards if this method returned Matched |
branch | The branch parameter extracted from first Via header |
virtual void processMessage | ( | SIPMessage * | message | ) | [virtual] |
Process a message belonging to this transaction
message | A pointer to the message to process, the caller must make sure it belongs to this transaction |
virtual void processServerMessage | ( | SIPMessage * | message, |
int | state | ||
) | [protected, virtual] |
Process only the messages for server transactions
message | A pointer to the message to process, should not be used afterwards if this method returned True |
state | The current state of the transaction |
const SIPMessage* recentMessage | ( | ) | const [inline] |
The most recent message handled by this transaction
void requestAuth | ( | const String & | realm, |
const String & | domain, | ||
bool | stale, | ||
bool | proxy = false |
||
) |
Send back an authentication required response
realm | Authentication realm to send in the answer |
domain | Domain for which it will authenticate |
stale | True if the previous password is valid but nonce is too old |
proxy | True to authenticate as proxy, false as user agent |
void setCleared | ( | ) | [inline] |
Change transaction status to Cleared This method is not thread safe
void setDialogTag | ( | const char * | tag = 0 | ) |
Set a new dialog tag, optionally build a random one
tag | New dialog tag, a null string will build a random tag |
void setLatestMessage | ( | SIPMessage * | message = 0 | ) | [protected] |
Set the latest message sent by this transaction
message | Pointer to the latest message |
void setPendingEvent | ( | SIPEvent * | event = 0 , |
bool | replace = false |
||
) | [protected] |
Store a pending event to be picked up at the next getEvent() call
event | Event to store |
replace | True to replace any existing pending event |
bool setResponse | ( | ) | const |
Checks if a response message can be sent
bool setResponse | ( | int | code, |
const char * | reason = 0 |
||
) |
Creates and transmits a final response message
code | Response code to send |
reason | Human readable reason text (optional) |
void setResponse | ( | SIPMessage * | message | ) |
Transmits a final response message
void setTimeout | ( | u_int64_t | delay = 0 , |
unsigned int | count = 1 |
||
) | [protected] |
Set a repetitive timeout
delay | How often (in microseconds) to fire the timeout |
count | How many times to keep firing the timeout |
void setTransmit | ( | ) | [inline] |
Set the (re)transmission flag that allows the latest outgoing message to be send over the wire
void setUserData | ( | void * | data | ) | [inline] |
Set an arbitrary pointer as user specific data
static const char* stateName | ( | int | state | ) | [static] |
Get the name of a transaction state
bool tryAutoAuth | ( | SIPMessage * | answer | ) | [protected] |
Attempt to perform automatic client transaction authentication
answer | SIP answer that creates the new transaction |