Main Page | Modules | Class List | Directories | File List | Class Members | File Members | Related Pages

oSIP fsm Handling
[State Machines]


Classes

struct osip_ict
struct osip_nict
struct osip_ist
struct osip_nist
struct osip_transaction
struct ixt_t
struct osip
struct osip_event
struct osip_ict
struct osip_nict
struct osip_ist
struct osip_nist
struct osip_transaction
struct ixt
struct osip
struct osip_event

Defines

#define DEFAULT_T1 500
#define DEFAULT_T2 4000
#define DEFAULT_T4 5000
#define EVT_IS_RCV_INVITE(event) (event->type==RCV_REQINVITE)
#define EVT_IS_RCV_ACK(event) (event->type==RCV_REQACK)
#define EVT_IS_RCV_REQUEST(event) (event->type==RCV_REQUEST)
#define EVT_IS_RCV_STATUS_1XX(event) (event->type==RCV_STATUS_1XX)
#define EVT_IS_RCV_STATUS_2XX(event) (event->type==RCV_STATUS_2XX)
#define EVT_IS_RCV_STATUS_3456XX(event) (event->type==RCV_STATUS_3456XX)
#define EVT_IS_SND_INVITE(event) (event->type==SND_REQINVITE)
#define EVT_IS_SND_ACK(event) (event->type==SND_REQACK)
#define EVT_IS_SND_REQUEST(event) (event->type==SND_REQUEST)
#define EVT_IS_SND_STATUS_1XX(event) (event->type==SND_STATUS_1XX)
#define EVT_IS_SND_STATUS_2XX(event) (event->type==SND_STATUS_2XX)
#define EVT_IS_SND_STATUS_3456XX(event) (event->type==SND_STATUS_3456XX)
#define EVT_IS_INCOMINGMSG(event)
#define EVT_IS_INCOMINGREQ(event)
#define EVT_IS_INCOMINGRESP(event)
#define EVT_IS_OUTGOINGMSG(event)
#define EVT_IS_OUTGOINGREQ(event)
#define EVT_IS_OUTGOINGRESP(event)
#define EVT_IS_MSG(event)
#define EVT_IS_KILL_TRANSACTION(event) (event->type==KILL_TRANSACTION)

Typedefs

typedef enum _state_t state_t
typedef enum type_t type_t
typedef enum osip_fsm_type_t osip_fsm_type_t
typedef osip_ict osip_ict_t
typedef osip_nict osip_nict_t
typedef osip_ist osip_ist_t
typedef osip_nist osip_nist_t
typedef osip_transaction osip_transaction_t
typedef enum osip_message_callback_type osip_message_callback_type_t
typedef enum osip_kill_callback_type osip_kill_callback_type_t
typedef enum osip_transport_error_callback_type osip_transport_error_callback_type_t
typedef void(* osip_message_cb_t )(int type, osip_transaction_t *, osip_message_t *)
typedef void(* osip_kill_transaction_cb_t )(int type, osip_transaction_t *)
typedef void(* osip_transport_error_cb_t )(int type, osip_transaction_t *, int error)
typedef ixt_t ixt_t
typedef osip osip_t
typedef osip_event osip_event_t

Enumerations

enum _state_t {
ICT_PRE_CALLING, ICT_CALLING, ICT_PROCEEDING, ICT_COMPLETED,
ICT_TERMINATED, IST_PRE_PROCEEDING, IST_PROCEEDING, IST_COMPLETED,
IST_CONFIRMED, IST_TERMINATED, NICT_PRE_TRYING, NICT_TRYING,
NICT_PROCEEDING, NICT_COMPLETED, NICT_TERMINATED, NIST_PRE_TRYING,
NIST_TRYING, NIST_PROCEEDING, NIST_COMPLETED, NIST_TERMINATED
}
enum type_t {
TIMEOUT_A, TIMEOUT_B, TIMEOUT_D, TIMEOUT_E,
TIMEOUT_F, TIMEOUT_K, TIMEOUT_G, TIMEOUT_H,
TIMEOUT_I, TIMEOUT_J, RCV_REQINVITE, RCV_REQACK,
RCV_REQUEST, RCV_STATUS_1XX, RCV_STATUS_2XX, RCV_STATUS_3456XX,
SND_REQINVITE, SND_REQACK, SND_REQUEST, SND_STATUS_1XX,
SND_STATUS_2XX, SND_STATUS_3456XX, KILL_TRANSACTION, UNKNOWN_EVT
}
enum osip_fsm_type_t { ICT, IST, NICT, NIST }
enum osip_message_callback_type {
OSIP_ICT_INVITE_SENT = 0, OSIP_ICT_INVITE_SENT_AGAIN, OSIP_ICT_ACK_SENT, OSIP_ICT_ACK_SENT_AGAIN,
OSIP_ICT_STATUS_1XX_RECEIVED, OSIP_ICT_STATUS_2XX_RECEIVED, OSIP_ICT_STATUS_2XX_RECEIVED_AGAIN, OSIP_ICT_STATUS_3XX_RECEIVED,
OSIP_ICT_STATUS_4XX_RECEIVED, OSIP_ICT_STATUS_5XX_RECEIVED, OSIP_ICT_STATUS_6XX_RECEIVED, OSIP_ICT_STATUS_3456XX_RECEIVED_AGAIN,
OSIP_IST_INVITE_RECEIVED, OSIP_IST_INVITE_RECEIVED_AGAIN, OSIP_IST_ACK_RECEIVED, OSIP_IST_ACK_RECEIVED_AGAIN,
OSIP_IST_STATUS_1XX_SENT, OSIP_IST_STATUS_2XX_SENT, OSIP_IST_STATUS_2XX_SENT_AGAIN, OSIP_IST_STATUS_3XX_SENT,
OSIP_IST_STATUS_4XX_SENT, OSIP_IST_STATUS_5XX_SENT, OSIP_IST_STATUS_6XX_SENT, OSIP_IST_STATUS_3456XX_SENT_AGAIN,
OSIP_NICT_REGISTER_SENT, OSIP_NICT_BYE_SENT, OSIP_NICT_OPTIONS_SENT, OSIP_NICT_INFO_SENT,
OSIP_NICT_CANCEL_SENT, OSIP_NICT_NOTIFY_SENT, OSIP_NICT_SUBSCRIBE_SENT, OSIP_NICT_UNKNOWN_REQUEST_SENT,
OSIP_NICT_REQUEST_SENT_AGAIN, OSIP_NICT_STATUS_1XX_RECEIVED, OSIP_NICT_STATUS_2XX_RECEIVED, OSIP_NICT_STATUS_2XX_RECEIVED_AGAIN,
OSIP_NICT_STATUS_3XX_RECEIVED, OSIP_NICT_STATUS_4XX_RECEIVED, OSIP_NICT_STATUS_5XX_RECEIVED, OSIP_NICT_STATUS_6XX_RECEIVED,
OSIP_NICT_STATUS_3456XX_RECEIVED_AGAIN, OSIP_NIST_REGISTER_RECEIVED, OSIP_NIST_BYE_RECEIVED, OSIP_NIST_OPTIONS_RECEIVED,
OSIP_NIST_INFO_RECEIVED, OSIP_NIST_CANCEL_RECEIVED, OSIP_NIST_NOTIFY_RECEIVED, OSIP_NIST_SUBSCRIBE_RECEIVED,
OSIP_NIST_UNKNOWN_REQUEST_RECEIVED, OSIP_NIST_REQUEST_RECEIVED_AGAIN, OSIP_NIST_STATUS_1XX_SENT, OSIP_NIST_STATUS_2XX_SENT,
OSIP_NIST_STATUS_2XX_SENT_AGAIN, OSIP_NIST_STATUS_3XX_SENT, OSIP_NIST_STATUS_4XX_SENT, OSIP_NIST_STATUS_5XX_SENT,
OSIP_NIST_STATUS_6XX_SENT, OSIP_NIST_STATUS_3456XX_SENT_AGAIN, OSIP_MESSAGE_CALLBACK_COUNT
}
enum osip_kill_callback_type {
OSIP_ICT_KILL_TRANSACTION, OSIP_IST_KILL_TRANSACTION, OSIP_NICT_KILL_TRANSACTION, OSIP_NIST_KILL_TRANSACTION,
OSIP_KILL_CALLBACK_COUNT
}
enum osip_transport_error_callback_type {
OSIP_ICT_TRANSPORT_ERROR, OSIP_IST_TRANSPORT_ERROR, OSIP_NICT_TRANSPORT_ERROR, OSIP_NIST_TRANSPORT_ERROR,
OSIP_TRANSPORT_ERROR_CALLBACK_COUNT
}

Functions

int osip_set_message_callback (osip_t *osip, int type, osip_message_cb_t cb)
int osip_set_kill_transaction_callback (osip_t *osip, int type, osip_kill_transaction_cb_t cb)
int osip_set_transport_error_callback (osip_t *osip, int type, osip_transport_error_cb_t cb)
int osip_transaction_init (osip_transaction_t **transaction, osip_fsm_type_t ctx_type, osip_t *osip, osip_message_t *request)
int osip_transaction_free (osip_transaction_t *transaction)
int osip_transaction_free2 (osip_transaction_t *transaction)
void osip_response_get_destination (osip_message_t *response, char **address, int *portnum)
int osip_ict_set_destination (osip_ict_t *ict, char *destination, int port)
int osip_nict_set_destination (osip_nict_t *nict, char *destination, int port)
int osip_transaction_add_event (osip_transaction_t *transaction, osip_event_t *evt)
int osip_transaction_execute (osip_transaction_t *transaction, osip_event_t *evt)
int osip_transaction_set_your_instance (osip_transaction_t *transaction, void *instance)
void * osip_transaction_get_your_instance (osip_transaction_t *transaction)
int osip_transaction_get_destination (osip_transaction_t *transaction, char **ip, int *port)
int osip_transaction_set_in_socket (osip_transaction_t *transaction, int sock)
int osip_transaction_set_out_socket (osip_transaction_t *transaction, int sock)
int osip_init (osip_t **osip)
void osip_release (osip_t *osip)
void osip_set_application_context (osip_t *osip, void *pointer)
void * osip_get_application_context (osip_t *osip)
int osip_remove_transaction (osip_t *osip, osip_transaction_t *ict)
int osip_ict_execute (osip_t *osip)
int osip_ist_execute (osip_t *osip)
int osip_nict_execute (osip_t *osip)
int osip_nist_execute (osip_t *osip)
void osip_timers_gettimeout (osip_t *osip, struct timeval *lower_tv)
void osip_timers_ict_execute (osip_t *osip)
void osip_timers_ist_execute (osip_t *osip)
void osip_timers_nict_execute (osip_t *osip)
void osip_timers_nist_execute (osip_t *osip)
osip_transaction_t * osip_transaction_find (osip_list_t *transactions, osip_event_t *evt)
int osip_find_transaction_and_add_event (osip_t *osip, osip_event_t *evt)
osip_transaction_t * osip_create_transaction (osip_t *osip, osip_event_t *evt)
osip_event_t * osip_parse (const char *buf, size_t length)
void osip_retransmissions_execute (osip_t *osip)
void osip_start_200ok_retransmissions (osip_t *osip, struct osip_dialog *dialog, osip_message_t *msg200ok, int sock)
void osip_start_ack_retransmissions (osip_t *osip, struct osip_dialog *dialog, osip_message_t *ack, char *dest, int port, int sock)
osip_dialog * osip_stop_200ok_retransmissions (osip_t *osip, osip_message_t *ack)
void osip_stop_retransmissions_from_dialog (osip_t *osip, struct osip_dialog *dialog)
osip_event_t * osip_new_outgoing_sipmessage (osip_message_t *sip)
void osip_event_free (osip_event_t *event)
void osip_set_cb_send_message (osip_t *cf, int(*cb)(osip_transaction_t *, osip_message_t *, char *, int, int))

Define Documentation

#define DEFAULT_T1 500

You can re-define the default value for T1. (T1 is defined in rfcxxxx) The default value is 500ms.

#define DEFAULT_T2 4000

You can re-define the default value for T2. (T2 is defined in rfcxxxx) The default value is 4000ms.

#define DEFAULT_T4 5000

You can re-define the default value for T4. (T1 is defined in rfcxxxx) The default value is 5000ms.

#define EVT_IS_INCOMINGMSG ( event )

Value:

(event->type>=RCV_REQINVITE \
 &&event->type<=RCV_STATUS_3456XX)
Check if the sipevent is of an incoming SIP MESSAGE.
Parameters:
event the event to check.

#define EVT_IS_INCOMINGREQ ( event )

Value:

(EVT_IS_RCV_INVITE(event) \
 ||EVT_IS_RCV_ACK(event) \
 ||EVT_IS_RCV_REQUEST(event))
Check if the sipevent is of an incoming SIP REQUEST.
Parameters:
event the event to check.

#define EVT_IS_INCOMINGRESP ( event )

Value:

(EVT_IS_RCV_STATUS_1XX(event) \
 ||EVT_IS_RCV_STATUS_2XX(event) \
 ||EVT_IS_RCV_STATUS_3456XX(event))
Check if the sipevent is of an incoming SIP RESPONSE.
Parameters:
event the event to check.

#define EVT_IS_KILL_TRANSACTION ( event ) (event->type==KILL_TRANSACTION)

Check if the sipevent is of type KILL_TRANSACTION. NOTE: THIS IS AN INTERNAL METHOD ONLY

Parameters:
event the event to check.

#define EVT_IS_MSG ( event )

Value:

(event->type>=RCV_REQINVITE \
 &&event->type<=SND_STATUS_3456XX)
Check if the sipevent is a SIP MESSAGE.
Parameters:
event the event to check.

#define EVT_IS_OUTGOINGMSG ( event )

Value:

(event->type>=SND_REQINVITE \
 &&event->type<=SND_STATUS_3456XX)
Check if the sipevent is of an outgoing SIP MESSAGE.
Parameters:
event the event to check.

#define EVT_IS_OUTGOINGREQ ( event )

Value:

(EVT_IS_SND_INVITE(event) \
 ||EVT_IS_SND_ACK(event) \
 ||EVT_IS_SND_REQUEST(event))
Check if the sipevent is of an outgoing SIP REQUEST.
Parameters:
event the event to check.

#define EVT_IS_OUTGOINGRESP ( event )

Value:

(EVT_IS_SND_STATUS_1XX(event) \
 ||EVT_IS_SND_STATUS_2XX(event) \
 ||EVT_IS_SND_STATUS_3456XX(event))
Check if the sipevent is of an outgoing SIP RESPONSE.
Parameters:
event the event to check.

#define EVT_IS_RCV_ACK ( event ) (event->type==RCV_REQACK)

Check if the sipevent is of type RCV_REQACK.

Parameters:
event the event to check.

#define EVT_IS_RCV_INVITE ( event ) (event->type==RCV_REQINVITE)

Check if the sipevent is of type RCV_REQINVITE.

Parameters:
event the event to check.

#define EVT_IS_RCV_REQUEST ( event ) (event->type==RCV_REQUEST)

Check if the sipevent is of type RCV_REQUEST.

Parameters:
event the event to check.

#define EVT_IS_RCV_STATUS_1XX ( event ) (event->type==RCV_STATUS_1XX)

Check if the sipevent is of type RCV_STATUS_1XX.

Parameters:
event the event to check.

#define EVT_IS_RCV_STATUS_2XX ( event ) (event->type==RCV_STATUS_2XX)

Check if the sipevent is of type RCV_STATUS_2XX.

Parameters:
event the event to check.

#define EVT_IS_RCV_STATUS_3456XX ( event ) (event->type==RCV_STATUS_3456XX)

Check if the sipevent is of type RCV_STATUS_3456XX.

Parameters:
event the event to check.

#define EVT_IS_SND_ACK ( event ) (event->type==SND_REQACK)

Check if the sipevent is of type SND_REQACK.

Parameters:
event the event to check.

#define EVT_IS_SND_INVITE ( event ) (event->type==SND_REQINVITE)

Check if the sipevent is of type SND_REQINVITE.

Parameters:
event the event to check.

#define EVT_IS_SND_REQUEST ( event ) (event->type==SND_REQUEST)

Check if the sipevent is of type SND_REQUEST.

Parameters:
event the event to check.

#define EVT_IS_SND_STATUS_1XX ( event ) (event->type==SND_STATUS_1XX)

Check if the sipevent is of type SND_STATUS_1XX.

Parameters:
event the event to check.

#define EVT_IS_SND_STATUS_2XX ( event ) (event->type==SND_STATUS_2XX)

Check if the sipevent is of type SND_STATUS_2XX.

Parameters:
event the event to check.

#define EVT_IS_SND_STATUS_3456XX ( event ) (event->type==SND_STATUS_3456XX)

Check if the sipevent is of type SND_STATUS_3456XX.

Parameters:
event the event to check.

Typedef Documentation

Structure for 2XX retransmission management.

Structure for osip event handling. A osip_event_t element will have a type and will be related to a transaction. In the general case, it is used by the application layer to give SIP messages to the oSIP finite state machine.

Enumeration for transaction type. A transaction can be either of: ICT, IST, NICT, NIST,

Structure for INVITE CLIENT TRANSACTION (outgoing INVITE transaction).

Structure for INVITE SERVER TRANSACTION (incoming INVITE transaction).

Enumeration for callback type used when transaction is over.

Callback definition for end of transaction announcements.

Enumeration for callback type.

Callback definition for message announcements.

Structure for NON-INVITE CLIENT TRANSACTION (outgoing NON-INVITE transaction).

Structure for NON-INVITE SERVER TRANSACTION (incoming SERVER transaction).

Structure for osip handling. In order to use osip, you have to manage at least one global instance of an osip_t element. Then, you'll register a set of required callbacks and a set of optional ones.

Structure for transaction handling.

Enumeration for callback type used when a transport error is detected.

Callback definition for transport error announcements.

typedef enum _state_t state_t

Enumeration for transaction state. Those states are extracted from the diagram found in rfc3261.txt

typedef enum type_t type_t

Enumeration for event type.
The list of values that you need to know is reduced to this:
RCV_REQINVITE,
RCV_REQACK,
RCV_REQUEST,
RCV_STATUS_1XX,
RCV_STATUS_2XX,
RCV_STATUS_3456XX,

SND_REQINVITE,
SND_REQACK,
SND_REQUEST,
SND_STATUS_1XX,
SND_STATUS_2XX,
SND_STATUS_3456XX,


Enumeration Type Documentation

enum _state_t

Enumeration for transaction state. Those states are extracted from the diagram found in rfc3261.txt

Enumeration for transaction type. A transaction can be either of: ICT, IST, NICT, NIST,

Enumeration values:
ICT Invite Client (outgoing) Transaction
IST Invite Server (incoming) Transaction
NICT Non-Invite Client (outgoing) Transaction
NIST Non-Invite Server (incoming) Transaction

Enumeration for callback type used when transaction is over.

Enumeration values:
OSIP_ICT_KILL_TRANSACTION end of Client INVITE transaction
OSIP_IST_KILL_TRANSACTION end of Server INVITE transaction
OSIP_NICT_KILL_TRANSACTION end of Client Non-INVITE transaction
OSIP_NIST_KILL_TRANSACTION end of Server Non-INVITE transaction
OSIP_KILL_CALLBACK_COUNT END OF ENUM

Enumeration for callback type.

Enumeration values:
OSIP_ICT_INVITE_SENT INVITE MESSAGE SENT
OSIP_ICT_INVITE_SENT_AGAIN INVITE MESSAGE RETRANSMITTED
OSIP_ICT_ACK_SENT ACK MESSAGE SENT
OSIP_ICT_ACK_SENT_AGAIN ACK MESSAGE RETRANSMITTED
OSIP_ICT_STATUS_1XX_RECEIVED 1XX FOR INVITE RECEIVED
OSIP_ICT_STATUS_2XX_RECEIVED 2XX FOR INVITE RECEIVED
OSIP_ICT_STATUS_2XX_RECEIVED_AGAIN 2XX FOR INVITE RECEIVED AGAIN
OSIP_ICT_STATUS_3XX_RECEIVED 3XX FOR INVITE RECEIVED
OSIP_ICT_STATUS_4XX_RECEIVED 4XX FOR INVITE RECEIVED
OSIP_ICT_STATUS_5XX_RECEIVED 5XX FOR INVITE RECEIVED
OSIP_ICT_STATUS_6XX_RECEIVED 6XX FOR INVITE RECEIVED
OSIP_ICT_STATUS_3456XX_RECEIVED_AGAIN RESPONSE RECEIVED AGAIN
OSIP_IST_INVITE_RECEIVED INVITE MESSAGE RECEIVED
OSIP_IST_INVITE_RECEIVED_AGAIN INVITE MESSAGE RECEIVED AGAN
OSIP_IST_ACK_RECEIVED ACK MESSAGE RECEIVED
OSIP_IST_ACK_RECEIVED_AGAIN ACK MESSAGE RECEIVED AGAIN
OSIP_IST_STATUS_1XX_SENT 1XX FOR INVITE SENT
OSIP_IST_STATUS_2XX_SENT 2XX FOR INVITE SENT
OSIP_IST_STATUS_2XX_SENT_AGAIN 2XX FOR INVITE RETRANSMITTED
OSIP_IST_STATUS_3XX_SENT 3XX FOR INVITE SENT
OSIP_IST_STATUS_4XX_SENT 4XX FOR INVITE SENT
OSIP_IST_STATUS_5XX_SENT 5XX FOR INVITE SENT
OSIP_IST_STATUS_6XX_SENT 6XX FOR INVITE SENT
OSIP_IST_STATUS_3456XX_SENT_AGAIN RESPONSE RETRANSMITTED
OSIP_NICT_REGISTER_SENT REGISTER MESSAGE SENT
OSIP_NICT_BYE_SENT BYE MESSAGE SENT
OSIP_NICT_OPTIONS_SENT OPTIONS MESSAGE SENT
OSIP_NICT_INFO_SENT INFO MESSAGE SENT
OSIP_NICT_CANCEL_SENT CANCEL MESSAGE SENT
OSIP_NICT_NOTIFY_SENT NOTIFY MESSAGE SENT
OSIP_NICT_SUBSCRIBE_SENT SUBSCRIBE MESSAGE SENT
OSIP_NICT_UNKNOWN_REQUEST_SENT UNKNOWN REQUEST MESSAGE SENT
OSIP_NICT_REQUEST_SENT_AGAIN REQUEST MESSAGE RETRANMITTED
OSIP_NICT_STATUS_1XX_RECEIVED 1XX FOR MESSAGE RECEIVED
OSIP_NICT_STATUS_2XX_RECEIVED 2XX FOR MESSAGE RECEIVED
OSIP_NICT_STATUS_2XX_RECEIVED_AGAIN 2XX FOR MESSAGE RECEIVED AGAIN
OSIP_NICT_STATUS_3XX_RECEIVED 3XX FOR MESSAGE RECEIVED
OSIP_NICT_STATUS_4XX_RECEIVED 4XX FOR MESSAGE RECEIVED
OSIP_NICT_STATUS_5XX_RECEIVED 5XX FOR MESSAGE RECEIVED
OSIP_NICT_STATUS_6XX_RECEIVED 6XX FOR MESSAGE RECEIVED
OSIP_NICT_STATUS_3456XX_RECEIVED_AGAIN RESPONSE RECEIVED AGAIN
OSIP_NIST_REGISTER_RECEIVED REGISTER RECEIVED
OSIP_NIST_BYE_RECEIVED BYE RECEIVED
OSIP_NIST_OPTIONS_RECEIVED OPTIONS RECEIVED
OSIP_NIST_INFO_RECEIVED INFO RECEIVED
OSIP_NIST_CANCEL_RECEIVED CANCEL RECEIVED
OSIP_NIST_NOTIFY_RECEIVED NOTIFY RECEIVED
OSIP_NIST_SUBSCRIBE_RECEIVED SUBSCRIBE RECEIVED
OSIP_NIST_UNKNOWN_REQUEST_RECEIVED UNKNWON REQUEST RECEIVED
OSIP_NIST_REQUEST_RECEIVED_AGAIN UNKNWON REQUEST RECEIVED AGAIN
OSIP_NIST_STATUS_1XX_SENT 1XX FOR MESSAGE SENT
OSIP_NIST_STATUS_2XX_SENT 2XX FOR MESSAGE SENT
OSIP_NIST_STATUS_2XX_SENT_AGAIN 2XX FOR MESSAGE RETRANSMITTED
OSIP_NIST_STATUS_3XX_SENT 3XX FOR MESSAGE SENT
OSIP_NIST_STATUS_4XX_SENT 4XX FOR MESSAGE SENT
OSIP_NIST_STATUS_5XX_SENT 5XX FOR MESSAGE SENT
OSIP_NIST_STATUS_6XX_SENT 6XX FOR MESSAGE SENT
OSIP_NIST_STATUS_3456XX_SENT_AGAIN RESPONSE RETRANSMITTED
OSIP_MESSAGE_CALLBACK_COUNT END OF ENUM

Enumeration values:
OSIP_ICT_TRANSPORT_ERROR transport error for ICT
OSIP_IST_TRANSPORT_ERROR transport error for IST
OSIP_NICT_TRANSPORT_ERROR transport error for NICT
OSIP_NIST_TRANSPORT_ERROR transport error for NIST
OSIP_TRANSPORT_ERROR_CALLBACK_COUNT END OF ENUM

enum type_t

Enumeration for event type.
The list of values that you need to know is reduced to this:
RCV_REQINVITE,
RCV_REQACK,
RCV_REQUEST,
RCV_STATUS_1XX,
RCV_STATUS_2XX,
RCV_STATUS_3456XX,

SND_REQINVITE,
SND_REQACK,
SND_REQUEST,
SND_STATUS_1XX,
SND_STATUS_2XX,
SND_STATUS_3456XX,

Enumeration values:
TIMEOUT_A Timer A
TIMEOUT_B Timer B
TIMEOUT_D Timer D
TIMEOUT_E Timer E
TIMEOUT_F Timer F
TIMEOUT_K Timer K
TIMEOUT_G Timer G
TIMEOUT_H Timer H
TIMEOUT_I Timer I
TIMEOUT_J Timer J
RCV_REQINVITE Event is an incoming INVITE request
RCV_REQACK Event is an incoming ACK request
RCV_REQUEST Event is an incoming NON-INVITE and NON-ACK request
RCV_STATUS_1XX Event is an incoming informational response
RCV_STATUS_2XX Event is an incoming 2XX response
RCV_STATUS_3456XX Event is an incoming final response (not 2XX)
SND_REQINVITE Event is an outgoing INVITE request
SND_REQACK Event is an outgoing ACK request
SND_REQUEST Event is an outgoing NON-INVITE and NON-ACK request
SND_STATUS_1XX Event is an outgoing informational response
SND_STATUS_2XX Event is an outgoing 2XX response
SND_STATUS_3456XX Event is an outgoing final response (not 2XX)
KILL_TRANSACTION Event to 'kill' the transaction before termination

Function Documentation

osip_transaction_t* osip_create_transaction ( osip_t * osip,
osip_event_t * evt
)

Create a transaction for this event (MUST be a SIP REQUEST event).

Parameters:
osip The element to work on.
evt The element representing the new SIP REQUEST.

void osip_event_free ( osip_event_t * event )

Free all ressource in a sipevent.

Parameters:
event The event to free.

int osip_find_transaction_and_add_event ( osip_t * osip,
osip_event_t * evt
)

Search for a transaction that match this event (MUST be a MESSAGE event) and add this event if a transaction is found..

Parameters:
osip The element to work on.
evt The element representing the SIP MESSAGE.

void* osip_get_application_context ( osip_t * osip )

Get a pointer in a osip_t element. This help to find your application layer in callbacks.

Parameters:
osip The element to work on.

int osip_ict_execute ( osip_t * osip )

Consume ALL pending osip_event_t previously added in the fifos of ict transactions.

Parameters:
osip The element to work on.

int osip_ict_set_destination ( osip_ict_t * ict,
char * destination,
int port
)

Set the host and port destination used for sending the SIP message. This can be useful for an application with 'DIRECT ROOTING MODE' NOTE: Instead, you should use the 'Route' header facility which leads to the same behaviour.

Parameters:
ict The element to work on.
destination The destination host.
port The destination port.

int osip_init ( osip_t ** osip )

Allocate an osip_t element.

Parameters:
osip the element to allocate.

int osip_ist_execute ( osip_t * osip )

Consume ALL pending osip_event_t previously added in the fifos of ist transactions.

Parameters:
osip The element to work on.

osip_event_t* osip_new_outgoing_sipmessage ( osip_message_t * sip )

Allocate a sipevent (we know this message is an OUTGOING SIP message).

Parameters:
sip The SIP message we want to send.

int osip_nict_execute ( osip_t * osip )

Consume ALL pending osip_event_t previously added in the fifos of nict transactions.

Parameters:
osip The element to work on.

int osip_nict_set_destination ( osip_nict_t * nict,
char * destination,
int port
)

Set the host and port destination used for sending the SIP message. This can be useful for an application with 'DIRECT ROOTING MODE' NOTE: Instead, you should use the 'Route' header facility which leads to the same behaviour.

Parameters:
nict The element to work on.
destination The destination host.
port The destination port.

int osip_nist_execute ( osip_t * osip )

Consume ALL pending osip_event_t previously added in the fifos of nist transactions.

Parameters:
osip The element to work on.

osip_event_t* osip_parse ( const char * buf,
size_t length
)

Create a sipevent from a SIP message string.

Parameters:
buf The SIP message as a string.
length The length of the buffer to parse.

void osip_release ( osip_t * osip )

Free all resource in a osip_t element.

Parameters:
osip The element to release.

int osip_remove_transaction ( osip_t * osip,
)

Remove a transaction from the osip stack.

Parameters:
osip The element to work on.
ict The transaction to add.

void osip_response_get_destination ( osip_message_t * response,
char ** address,
int * portnum
)

Search in a SIP response the destination where the message should be sent.

Parameters:
response the message to work on.
address a pointer to receive the allocated host address.
portnum a pointer to receive the host port.

void osip_retransmissions_execute ( osip_t * osip )

Send required retransmissions

Parameters:
osip The element to work on.

void osip_set_application_context ( osip_t * osip,
void * pointer
)

Set a pointer in a osip_t element. This help to find your application layer in callbacks.

Parameters:
osip The element to work on.
pointer The element to set.

void osip_set_cb_send_message ( osip_t * cf,
int(*)(osip_transaction_t *, osip_message_t *, char *, int, int) cb
)

Register the callback used to send SIP message.

Parameters:
cf The osip element attached to the transaction.
cb The method we want to register.

int osip_set_kill_transaction_callback ( osip_t * osip,
int type,
)

Set a callback for transaction operation related to the end of transactions.

Parameters:
osip The element to work on.
type The event type to hook on.
cb The method to be called upon the event.

int osip_set_message_callback ( osip_t * osip,
int type,
)

Set a callback for each transaction operation.

Parameters:
osip The element to work on.
type The event type to hook on.
cb The method to be called upon the event.

int osip_set_transport_error_callback ( osip_t * osip,
int type,
)

Set a callback for each transaction operation related to network error.

Parameters:
osip The element to work on.
type The event type to hook on.
cb The method to be called upon the event.

void osip_start_200ok_retransmissions ( osip_t * osip,
struct osip_dialog * dialog,
osip_message_t * msg200ok,
int sock
)

Start out of fsm 200 Ok retransmissions. This is usefull for user-agents.

Parameters:
osip The osip_t structure.
dialog The dialog the 200 Ok is part of.
msg200ok The 200 ok response.
sock The socket to be used to send the message. (optional).

void osip_start_ack_retransmissions ( osip_t * osip,
struct osip_dialog * dialog,
char * dest,
int port,
int sock
)

Start out of fsm ACK retransmissions. This is usefull for user-agents.

Parameters:
osip The osip_t structure.
dialog The dialog the ACK is part of.
ack The ACK that has just been sent in response to a 200 Ok.
dest The destination host.
port The destination port.
sock The socket to be used to send the message. (optional).

struct osip_dialog* osip_stop_200ok_retransmissions ( osip_t * osip,
)

Stop the out of fsm 200 Ok retransmissions matching an incoming ACK.

Parameters:
osip The osip_t structure.
ack The ack that has just been received.

void osip_stop_retransmissions_from_dialog ( osip_t * osip,
struct osip_dialog * dialog
)

Stop out of fsm retransmissions (ACK or 200 Ok) associated to a given dialog. This function must be called before freeing a dialog if out of fsm retransmissions have been scheduled.

Parameters:
osip The osip_t structure
dialog The dialog.

void osip_timers_gettimeout ( osip_t * osip,
struct timeval * lower_tv
)

Retreive the minimum timer value to be used by an application so that the osip_timer_*_execute method don't have to be called often.

Parameters:
osip The element to work on.
lower_tv The minimum timer when the application should wake up.

void osip_timers_ict_execute ( osip_t * osip )

Check if an ict transactions needs a timer event.

Parameters:
osip The element to work on.

void osip_timers_ist_execute ( osip_t * osip )

Check if an ist transactions needs a timer event.

Parameters:
osip The element to work on.

void osip_timers_nict_execute ( osip_t * osip )

Check if a nict transactions needs a timer event.

Parameters:
osip The element to work on.

void osip_timers_nist_execute ( osip_t * osip )

Check if a nist transactions needs a timer event.

Parameters:
osip The element to work on.

int osip_transaction_add_event ( osip_transaction_t * transaction,
osip_event_t * evt
)

Add a SIP event in the fifo of a osip_transaction_t element.

Parameters:
transaction The element to work on.
evt The event to add.

int osip_transaction_execute ( osip_transaction_t * transaction,
osip_event_t * evt
)

Consume one osip_event_t element previously added in the fifo. NOTE: This method MUST NEVER be called within another call of this method. (For example, you can't call osip_transaction_execute() in a callback registered in the osip_t element.)

Parameters:
transaction The element to free.
evt The element to consume.

osip_transaction_t* osip_transaction_find ( osip_list_t * transactions,
osip_event_t * evt
)

Search for a transaction that match this event (MUST be a MESSAGE event).

Parameters:
transactions The list of transactions to work on.
evt The element representing the SIP MESSAGE.

int osip_transaction_free ( osip_transaction_t * transaction )

Free all resource in a osip_transaction_t element.

Parameters:
transaction The element to free.

int osip_transaction_free2 ( osip_transaction_t * transaction )

Free all resource in a osip_transaction_t element. This method does the same than osip_transaction_free() but it assumes that the transaction is already removed from the list of transaction in the osip stack. (to remove it use osip_xixt_remove(osip, transaction);

Parameters:
transaction The element to free.

int osip_transaction_get_destination ( osip_transaction_t * transaction,
char ** ip,
int * port
)

Get target ip and port for this request. (automaticly set by osip_transaction_init() for ict and nict)

Parameters:
transaction The element to work on.
ip The ip of host where to send initial request.
port The port where to send initial request.

void* osip_transaction_get_your_instance ( osip_transaction_t * transaction )

Get a pointer to your personal context associated with this transaction.

Parameters:
transaction The element to work on.

int osip_transaction_init ( osip_transaction_t ** transaction,
osip_fsm_type_t ctx_type,
osip_t * osip,
osip_message_t * request
)

Allocate an osip_transaction_t element.

Parameters:
transaction The element to allocate.
ctx_type The type of transaction. (ICT, IST, NICT, NIST)
osip The global instance of oSIP.
request The SIP request that initiate the transaction.

int osip_transaction_set_in_socket ( osip_transaction_t * transaction,
int sock
)

Set the socket for incoming message. NOTE: THIS HAS NEVER TESTED! Please send feedback.

Parameters:
transaction The element to work on.
sock The socket for incoming message.

int osip_transaction_set_out_socket ( osip_transaction_t * transaction,
int sock
)

Set the socket for outgoing message. NOTE: THIS HAS NEVER TESTED! Please send feedback.

Parameters:
transaction The element to work on.
sock The socket for outgoing message.

int osip_transaction_set_your_instance ( osip_transaction_t * transaction,
void * instance
)

Set a pointer to your personal context associated with this transaction. NOTE: this is a very useful method that allow you to avoid searching for your personal context inside the registered callbacks. You can initialise this pointer to your context right after the creation of the osip_transaction_t element. Then, you'll be able to get the address of your context by calling osip_transaction_get_your_instance().

Parameters:
transaction The element to work on.
instance The address of your context.

Generated on Tue Feb 22 00:59:47 2005 for libosip by doxygen 1.4.1

AltStyle によって変換されたページ (->オリジナル) /