libosip  4.1.0
Classes | Macros | Typedefs | Functions
oSIP dialog Handling

Classes

struct  osip_dialog

Macros

#define osip_dialog_set_instance(dialog, instance)   (dialog)->your_instance = (void*)(instance)
#define osip_dialog_get_instance(dialog)   (dialog)->your_instance

Typedefs

typedef struct osip_dialog osip_dialog_t

Functions

int osip_dialog_init_as_uac (osip_dialog_t **dialog, osip_message_t *response)
int osip_dialog_init_as_uac_with_remote_request (osip_dialog_t **dialog, osip_message_t *next_request, int local_cseq)
int osip_dialog_init_as_uas (osip_dialog_t **dialog, osip_message_t *invite, osip_message_t *response)
void osip_dialog_free (osip_dialog_t *dialog)
void osip_dialog_set_state (osip_dialog_t *dialog, state_t type)
int osip_dialog_update_route_set_as_uas (osip_dialog_t *dialog, osip_message_t *invite)
int osip_dialog_update_osip_cseq_as_uas (osip_dialog_t *dialog, osip_message_t *request)
int osip_dialog_match_as_uac (osip_dialog_t *dialog, osip_message_t *response)
int osip_dialog_update_tag_as_uac (osip_dialog_t *dialog, osip_message_t *response)
int osip_dialog_update_route_set_as_uac (osip_dialog_t *dialog, osip_message_t *response)
int osip_dialog_match_as_uas (osip_dialog_t *dialog, osip_message_t *request)
int osip_dialog_is_originator (osip_dialog_t *dialog)
int osip_dialog_is_callee (osip_dialog_t *dialog)

Detailed Description

Macro Definition Documentation

#define osip_dialog_get_instance (   dialog)    (dialog)->your_instance

Retrieve application instance from dialog

Parameters
dialogThe osip dialog
Returns
instance The application instance
#define osip_dialog_set_instance (   dialog,
  instance 
)    (dialog)->your_instance = (void*)(instance)

Link osip dialog to application

Parameters
dialogThe osip dialog
instanceThe application instance

Typedef Documentation

Structure for referencing a dialog.

Function Documentation

void osip_dialog_free ( osip_dialog_t dialog)
int osip_dialog_init_as_uac ( osip_dialog_t **  dialog,
osip_message_t response 
)

Allocate a osip_dialog_t element as a UAC. NOTE1: The dialog should be created when the first response is received. (except for a 100 Trying) NOTE2: Remote UA should be compliant! If not (not tag in the to header?) the old mechanism is used to match the request but if 2 uncompliant UA both answer 200 OK for the same transaction, they won't be detected. This is a major BUG in the old rfc.

Parameters
dialogThe element to allocate.
responseThe response containing the informations.

References osip_message::from, osip_message::to, and osip_dialog::type.

int osip_dialog_init_as_uac_with_remote_request ( osip_dialog_t **  dialog,
osip_message_t next_request,
int  local_cseq 
)

Allocate a osip_dialog_t element as a UAC.

  • This could be used to initiate dialog with a NOTIFY coming before the answer for a subscribe has reached us.
Parameters
dialogThe element to allocate.
next_requestThe response containing the informations.
local_cseqThe local cseq

References osip_message::cseq, osip_message::from, osip_cseq::number, osip_message::to, and osip_dialog::type.

int osip_dialog_init_as_uas ( osip_dialog_t **  dialog,
osip_message_t invite,
osip_message_t response 
)

Allocate a osip_dialog_t element as a UAS. NOTE1: The dialog should be created when the first response is sent. (except for a 100 Trying)

Parameters
dialogThe element to allocate.
inviteThe INVITE request containing some informations.
responseThe response containing other informations.

References osip_message::cseq, osip_message::from, osip_cseq::number, osip_message::to, and osip_dialog::type.

int osip_dialog_is_callee ( osip_dialog_t dialog)

Is dialog initiated by as CALLEE

Parameters
dialogThe element to work on.
int osip_dialog_is_originator ( osip_dialog_t dialog)

Is dialog initiated by as CALLER

Parameters
dialogThe element to work on.
int osip_dialog_match_as_uac ( osip_dialog_t dialog,
osip_message_t response 
)
int osip_dialog_match_as_uas ( osip_dialog_t dialog,
osip_message_t request 
)
void osip_dialog_set_state ( osip_dialog_t dialog,
state_t  type 
)

Set the state of the dialog. This is useful to keep information on who is the initiator of the call.

Parameters
dialogThe element to work on.
typeThe type of dialog (CALLEE or CALLER).

References osip_dialog::state.

int osip_dialog_update_osip_cseq_as_uas ( osip_dialog_t dialog,
osip_message_t request 
)

Update the CSeq (remote cseq) during a UAS transaction of a dialog. NOTE: All INCOMING transactions MUST update the remote CSeq.

Parameters
dialogThe element to work on.
requestThe request received.

References osip_message::cseq, osip_cseq::number, and osip_dialog::remote_cseq.

int osip_dialog_update_route_set_as_uac ( osip_dialog_t dialog,
osip_message_t response 
)

Update the Route-Set as UAC of a dialog. NOTE: bis-09 says that only INVITE transactions can update the route-set. NOTE: bis-09 says that updating the route-set means: update the contact field only (AND NOT THE ROUTE-SET). This method follow this behaviour. NOTE: This method should be called for each request (except 100 Trying) received for a dialog.

Parameters
dialogThe element to work on.
responseThe response received.

References osip_message::contacts, MSG_IS_STATUS_2XX, osip_contact_clone(), osip_contact_free(), osip_list_add(), osip_list_eol(), osip_list_get(), osip_list_init(), osip_list_size(), osip_list_special_free(), osip_record_route_clone, osip_record_route_free(), osip_message::record_routes, osip_dialog::remote_contact_uri, osip_dialog::route_set, and osip_dialog::state.

int osip_dialog_update_route_set_as_uas ( osip_dialog_t dialog,
osip_message_t invite 
)

Update the Route-Set as UAS of a dialog. NOTE: bis-09 says that only INVITE transactions can update the route-set. NOTE: bis-09 says that updating the route-set means: update the contact field only (AND NOT THE ROUTE-SET). This method follow this behaviour. NOTE: This method should be called for each request received for a dialog.

Parameters
dialogThe element to work on.
inviteThe invite received.

References osip_message::contacts, osip_contact_clone(), osip_contact_free(), osip_list_eol(), osip_list_get(), and osip_dialog::remote_contact_uri.

int osip_dialog_update_tag_as_uac ( osip_dialog_t dialog,
osip_message_t response 
)

Update the tag as UAC of a dialog?. (this could be needed if the 180 does not contains any tag, but the 200 contains one.

Parameters
dialogThe element to work on.
responseThe response received.

References osip_uri_param::gvalue, osip_to_get_tag, osip_dialog::remote_tag, and osip_message::to.