/usr/include/osip2/osip_dialog.h is in libosip2-dev 3.3.0-1ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | /*
The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)
Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Aymeric MOIZARD jack@atosc.org
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _DIALOG_H_
#define _DIALOG_H_
#include <osip2/osip.h>
/**
* @file osip_dialog.h
* @brief oSIP dialog Routines
*
*/
/**
* @defgroup oSIP_DIALOG oSIP dialog Handling
* @{
*/
#ifdef __cplusplus
extern "C"
{
#endif
#ifndef DOXYGEN
typedef enum _osip_dialog_type_t
{
CALLER,
CALLEE
}
osip_dialog_type_t;
#endif
/**
* Structure for referencing a dialog.
* @var osip_dialog_t
*/
typedef struct osip_dialog osip_dialog_t;
/**
* Structure for referencing a dialog.
* @struct osip_dialog
*/
struct osip_dialog
{
char *call_id; /**< Call-ID*/
char *local_tag; /**< local tag */
char *remote_tag; /**< remote tag */
osip_list_t route_set; /**< route set */
int local_cseq; /**< last local cseq */
int remote_cseq; /**< last remote cseq*/
osip_to_t *remote_uri; /**< remote_uri */
osip_from_t *local_uri; /**< local_uri */
osip_contact_t *remote_contact_uri; /**< remote contact_uri */
int secure; /**< use secure transport layer */
osip_dialog_type_t type; /**< type of dialog (CALLEE or CALLER) */
state_t state; /**< DIALOG_EARLY || DIALOG_CONFIRMED || DIALOG_CLOSED */
void *your_instance; /**< for application data reference */
};
/**
* Link osip dialog to application
* @param dialog The osip dialog
* @param instance The application instance
*/
#define osip_dialog_set_instance(dialog,instance) (dialog)->your_instance = (void*)(instance)
/**
* Retrieve application instance from dialog
* @param dialog The osip dialog
* @param instance The application instance
*/
#define osip_dialog_get_instance(dialog) (dialog)->your_instance
/**
* 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.
* @param dialog The element to allocate.
* @param response The response containing the informations.
*/
int osip_dialog_init_as_uac (osip_dialog_t ** dialog, osip_message_t * response);
/**
* Allocate a osip_dialog_t element as a UAC.
* <UL><LI>This could be used to initiate dialog with a NOTIFY coming
* before the answer for a subscribe has reached us.</LI></UL>
* @param dialog The element to allocate.
* @param next_request The response containing the informations.
* @param local_cseq The local cseq
*/
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 UAS.
* NOTE1: The dialog should be created when the first response is sent.
* (except for a 100 Trying)
* @param dialog The element to allocate.
* @param invite The INVITE request containing some informations.
* @param response The response containing other informations.
*/
int osip_dialog_init_as_uas (osip_dialog_t ** dialog,
osip_message_t * invite, osip_message_t * response);
/**
* Free all resource in a osip_dialog_t element.
* @param dialog The element to free.
*/
void osip_dialog_free (osip_dialog_t * dialog);
/**
* Set the state of the dialog.
* This is useful to keep information on who is the initiator of the call.
* @param dialog The element to work on.
* @param type The type of dialog (CALLEE or CALLER).
*/
void osip_dialog_set_state (osip_dialog_t * dialog, state_t type);
/**
* 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.
* @param dialog The element to work on.
* @param invite The invite received.
*/
int osip_dialog_update_route_set_as_uas (osip_dialog_t * dialog,
osip_message_t * invite);
/**
* Update the CSeq (remote cseq) during a UAS transaction of a dialog.
* NOTE: All INCOMING transactions MUST update the remote CSeq.
* @param dialog The element to work on.
* @param request The request received.
*/
int osip_dialog_update_osip_cseq_as_uas (osip_dialog_t * dialog,
osip_message_t * request);
/**
* Match a response received with a dialog.
* @param dialog The element to work on.
* @param response The response received.
*/
int osip_dialog_match_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.
* @param dialog The element to work on.
* @param response The response received.
*/
int osip_dialog_update_tag_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.
* @param dialog The element to work on.
* @param response The response received.
*/
int osip_dialog_update_route_set_as_uac (osip_dialog_t * dialog,
osip_message_t * response);
/**
* Match a request (response sent?) received with a dialog.
* @param dialog The element to work on.
* @param request The request received.
*/
int osip_dialog_match_as_uas (osip_dialog_t * dialog, osip_message_t * request);
/**
* @internal
* Is dialog initiated by as CALLER
* @param dialog The element to work on.
*/
int osip_dialog_is_originator (osip_dialog_t * dialog);
/**
* @internal
* Is dialog initiated by as CALLEE
* @param dialog The element to work on.
*/
int osip_dialog_is_callee (osip_dialog_t * dialog);
#ifdef __cplusplus
}
#endif
/** @} */
#endif
|