Yate
Public Member Functions | Static Public Member Functions | Protected Attributes

SIPEngine Class Reference

The SIP engine and transaction list. More...

#include <yatesip.h>

Inheritance diagram for SIPEngine:
DebugEnabler Mutex Lockable

List of all members.

Public Member Functions

 SIPEngine (const char *userAgent=0)
virtual ~SIPEngine ()
virtual bool buildParty (SIPMessage *message)=0
virtual bool checkUser (const String &username, const String &realm, const String &nonce, const String &method, const String &uri, const String &response, const SIPMessage *message, GenObject *userData)
virtual bool checkAuth (bool noUser, const SIPMessage *message, GenObject *userData)
int authUser (const SIPMessage *message, String &user, bool proxy=false, GenObject *userData=0)
SIPTransactionaddMessage (SIPParty *ep, const char *buf, int len=-1)
SIPTransactionaddMessage (SIPMessage *message)
SIPEventgetEvent ()
bool process ()
virtual void processEvent (SIPEvent *event)
virtual SIPTransactionforkInvite (SIPMessage *answer, SIPTransaction *trans)
virtual u_int64_t getUserTimeout () const
u_int64_t getTimer (char which, bool reliable=false) const
unsigned int getMaxForwards () const
const StringgetUserAgent () const
int getNextCSeq ()
bool lazyTrying () const
void lazyTrying (bool lazy100)
void nonceGet (String &nonce)
long nonceAge (const String &nonce)
bool isAllowed (const char *method) const
void addAllowed (const char *method)
const StringgetAllowed () const
void remove (SIPTransaction *transaction)
void append (SIPTransaction *transaction)
void insert (SIPTransaction *transaction)

Static Public Member Functions

static void buildAuth (const String &username, const String &realm, const String &passwd, const String &nonce, const String &method, const String &uri, String &response)
static void buildAuth (const String &hash_a1, const String &nonce, const String &hash_a2, String &response)

Protected Attributes

ObjList m_transList
u_int64_t m_t1
u_int64_t m_t4
unsigned int m_maxForwards
int m_cseq
bool m_lazyTrying
String m_userAgent
String m_allowed
String m_nonce
String m_nonce_secret
u_int32_t m_nonce_time
Mutex m_nonce_mutex

Detailed Description

The SIP engine and transaction list.

The SIP engine holds common methods and the list of current transactions


Constructor & Destructor Documentation

SIPEngine ( const char *  userAgent = 0)

Create the SIP Engine

virtual ~SIPEngine ( ) [virtual]

Destroy the SIP Engine


Member Function Documentation

void addAllowed ( const char *  method)

Add a method to the allowed methods list

Parameters:
methodUppercase name of the method to add
SIPTransaction* addMessage ( SIPParty ep,
const char *  buf,
int  len = -1 
)

Add a message into the transaction list

Parameters:
epParty of the received message
bufA buffer containing the SIP message text
lenThe length of the message or -1 to interpret as C string
Returns:
Pointer to the transaction or NULL if message was invalid
SIPTransaction* addMessage ( SIPMessage message)

Add a message into the transaction list This method is thread safe

Parameters:
messageA parsed SIP message to add to the transactions
Returns:
Pointer to the transaction or NULL if message was invalid
void append ( SIPTransaction transaction) [inline]

Append a transaction to the end of the list

Parameters:
transactionPointer to transaction to append
int authUser ( const SIPMessage message,
String user,
bool  proxy = false,
GenObject userData = 0 
)

Detect the proper credentials for any user in the engine

Parameters:
messagePointer to the message to check
userString to store the authenticated user name or user to look for (if not null on entry)
proxyTrue to authenticate as proxy, false as user agent
userDataPointer to an optional object that is passed back to checkUser
Returns:
Age of the nonce if user matches, negative for a failure
static void buildAuth ( const String hash_a1,
const String nonce,
const String hash_a2,
String response 
) [static]

Build an authentication response from already hashed components

Parameters:
hash_a1MD5 digest of username:realm:password
nonceAuthentication opaque nonce generated by the server
hash_a2MD5 digest of method:uri
responseString to store the computed response
static void buildAuth ( const String username,
const String realm,
const String passwd,
const String nonce,
const String method,
const String uri,
String response 
) [static]

Build an authentication response

Parameters:
usernameUser account name
realmAuthentication realm
passwdAccount password
nonceAuthentication opaque nonce generated by the server
methodMethod of the SIP message that is being authenticated
uriURI of the SIP message that is being authenticated
responseString to store the computed response
virtual bool buildParty ( SIPMessage message) [pure virtual]

Build a new SIPParty for a message

Parameters:
messagePointer to the message to build the party
Returns:
True on success, false if party could not be built
virtual bool checkAuth ( bool  noUser,
const SIPMessage message,
GenObject userData 
) [virtual]

Authenticate a message by other means than user credentials. By default it calls checkUser with empty user credential fields

Parameters:
noUserNo plausible user credentials were detected so far
messageMessage that is to be authenticated
userDataPointer to an optional object passed from authUser
Returns:
True if message is authenticated, false if verification failed
virtual bool checkUser ( const String username,
const String realm,
const String nonce,
const String method,
const String uri,
const String response,
const SIPMessage message,
GenObject userData 
) [virtual]

Check user credentials for validity

Parameters:
usernameUser account name
realmAuthentication realm
nonceAuthentication opaque nonce generated by the server
methodMethod of the SIP message that is being authenticated
uriURI of the SIP message that is being authenticated
responseResponse computed by the authenticated entity
messageMessage that is to be authenticated
userDataPointer to an optional object passed from authUser
Returns:
True if valid user/password, false if verification failed
virtual SIPTransaction* forkInvite ( SIPMessage answer,
SIPTransaction trans 
) [virtual]

Handle answers that create new dialogs for an outgoing INVITE

Parameters:
answerThe message that creates the INVITE fork
transOne of the transactions part of the same INVITE
Returns:
Pointer to new transaction or NULL if message is ignored
const String& getAllowed ( ) const [inline]

Get all the allowed methods

Returns:
Comma separated list of allowed methods
SIPEvent* getEvent ( )

Get a SIPEvent from the queue. This method mainly looks into the transaction list and get all kind of events, like an incoming request (INVITE, REGISTRATION), a timer, an outgoing message. This method is thread safe

unsigned int getMaxForwards ( ) const [inline]

Get the default value of the Max-Forwards header for this engine

Returns:
The maximum number of hops the request is allowed to pass
int getNextCSeq ( ) [inline]

Get a CSeq value suitable for use in a new request

u_int64_t getTimer ( char  which,
bool  reliable = false 
) const

Get the length of a timer

Parameters:
whichA one-character constant that selects which timer to return
reliableWhether we request the timer value for a reliable protocol
Returns:
Duration of the selected timer or 0 if invalid
const String& getUserAgent ( ) const [inline]

Get the User agent for this SIP engine

virtual u_int64_t getUserTimeout ( ) const [virtual]

Get the timeout to be used for transactions involving human interaction. The default implementation returns the proxy INVITE timeout (timer C = 3 minutes) minus the INVITE response retransmit interval (timer T2 = 4 seconds)

Returns:
Duration of the timeout in microseconds
void insert ( SIPTransaction transaction) [inline]

Insert a transaction at the start of the list

Parameters:
transactionPointer to transaction to insert
bool isAllowed ( const char *  method) const

Check if a method is in the allowed methods list

Parameters:
methodUppercase name of the method to check
Returns:
True if the method should be allowed processing
bool lazyTrying ( ) const [inline]

Check if the engine is set up for lazy "100 Trying" messages

Returns:
True if the first 100 message is to be skipped for non-INVITE
void lazyTrying ( bool  lazy100) [inline]

Set the lazy "100 Trying" messages flag

Parameters:
lazy100True to not send the 1st 100 message for non-INVITE
long nonceAge ( const String nonce)

Get the age of an authentication nonce

Parameters:
nonceString nonce to check for validity and age
Returns:
Age of the nonce in seconds, negative for invalid
void nonceGet ( String nonce)

Get an authentication nonce

Parameters:
nonceString reference to fill with the current nonce
bool process ( )

This method should be called very often to get the events from the list and to send them to processEvent method.

Returns:
True if some events were processed this turn
virtual void processEvent ( SIPEvent event) [virtual]

Default handling for events. This method should be overriden for what you need and at the end you should call this default one This method is thread safe

void remove ( SIPTransaction transaction) [inline]

Remove a transaction from the list without dereferencing it

Parameters:
transactionPointer to transaction to remove

Member Data Documentation

ObjList m_transList [protected]

The list that holds all the SIP transactions.


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