sip.h revision df4705eab9c873eae60bada4f2138e6f22a76e11
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * CDDL HEADER START
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * The contents of this file are subject to the terms of the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Common Development and Distribution License (the "License").
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * You may not use this file except in compliance with the License.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * See the License for the specific language governing permissions
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * and limitations under the License.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * When distributing Covered Code, include this CDDL HEADER in each
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * If applicable, add the following below this CDDL HEADER, with the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * fields enclosed by brackets "[]" replaced with your own identifying
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * information: Portions Copyright [yyyy] [name of copyright owner]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * CDDL HEADER END
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Use is subject to license terms.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma ident "%Z%%M% %I% %E% SMI"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern "C" {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Send a SIP message statefully */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Enable multiple dialogs if a request is forked */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP headers */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP Response Codes */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* 1XX - Provisional */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* 2XX - Success */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* 3XX - Redirection */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* 4XX - Request Failed */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* 5XX - Server Failure */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* 6XX - Global Failures */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Response error types */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_PROVISIONAL_RESP(resp) ((resp) >= 100 && (resp) < 200)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_FINAL_RESP(resp) ((resp) >= 200 && (resp) < 700)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_OK_RESP(resp) ((resp) >= 200 && (resp) < 300)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_NONOK_FINAL_RESP(resp) ((resp) >= 300 && (resp) < 700)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_REDIRECT_RESP(resp) ((resp) >= 300 && (resp) < 400)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_REQFAIL_RESP(resp) ((resp) >= 400 && (resp) < 500)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_SRVFAIL_RESP(resp) ((resp) >= 500 && (resp) < 600)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_GLOBFAIL_RESP(resp) ((resp) >= 600 && (resp) < 700)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Types of transactions */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Transaction states */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Client Transaction States */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Server Transaction States */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Dialog types */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Dialog state */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef enum dialog_state {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin SIP_DLG_NEW = 0, /* New dialog, no reply received yet */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin SIP_DLG_EARLY, /* Early dialog, provisional reply received */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin SIP_DLG_CONFIRMED, /* Confirmed dialog, 2xx reply received */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP URI parse errors */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_SCHEME 0x00000001 /* invalid URL SCHEME name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_USER 0x00000002 /* invalid user name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_PASS 0x00000004 /* invalid password */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_HOST 0x00000008 /* invalid domain name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_PORT 0x00000010 /* invalid port number */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_PARAM 0x00000020 /* parameter specific error */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_HEADER 0x00000040 /* headers specific error */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_OPAQUE 0x00000080 /* opaque specific error */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_QUERY 0x00000100 /* query specific error */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_PATH 0x00000200 /* path specific error */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_REGNAME 0x00000400 /* reg-name specific error */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SIP_URIERR_MEMORY 0x00001000 /* out of memory */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef unsigned char uchar_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef unsigned int uint_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef unsigned int uint32_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_str {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP parameter */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_param {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Parsed header structure */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_parsed_header {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Value states */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef enum {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP header value */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_value {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_header_general {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP methods */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef enum {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_methods {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP header function table */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct header_function_table {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin boolean_t (*header_check_compliance)(struct sip_parsed_header *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin boolean_t (*header_is_equal)(struct sip_parsed_header *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Connection Manager interface */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_io_pointers_s {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int (*sip_conn_send)(const sip_conn_object_t, char *, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int (*sip_conn_remote_address)(sip_conn_object_t, struct sockaddr *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int (*sip_conn_local_address)(sip_conn_object_t, struct sockaddr *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Upper layer registerations */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_ulp_pointers_s {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin uint_t (*sip_ulp_timeout)(void *, void (*func)(void *),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int (*sip_ulp_trans_error)(sip_transaction_t, int, void *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin void (*sip_ulp_dlg_del)(sip_dialog_t, sip_msg_t, void *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin void (*sip_ulp_dlg_state_cb)(sip_dialog_t, sip_msg_t, int,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP stack initialization structure */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sip_stack_init_s {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* SIP stack version */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Flags for sip_stack_flags */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int (*sip_stack_send)(const sip_conn_object_t, char *, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern boolean_t (*sip_is_conn_stream)(sip_conn_object_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern boolean_t (*sip_is_conn_reliable)(sip_conn_object_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern uint_t (*sip_stack_timeout)(void *, void (*func)(void *),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_sendmsg(sip_conn_object_t, sip_msg_t, sip_dialog_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sip_process_new_packet(sip_conn_object_t, void *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *sip_guid();
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *sip_sent_by_to_str(int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_register_sent_by(char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sip_unregister_sent_by(char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_from(sip_msg_t, char *, char *, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_to(sip_msg_t, char *, char *, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_response_line(sip_msg_t, int, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_request_line(sip_msg_t, sip_method_t, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_via(sip_msg_t, char *, char *, int, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_cseq(sip_msg_t, sip_method_t, uint32_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_content_type(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_contact(sip_msg_t, char *, char *, boolean_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_route(sip_msg_t, char *, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_record_route(sip_msg_t, char *, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_accept(sip_msg_t, char *, char *, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_proxy_authen(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_proxy_author(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_www_authen(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_accept_enc(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_accept_lang(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_alert_info(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_call_info(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_content_disp(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_error_info(sip_msg_t, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_reply_to(sip_msg_t, char *, char *, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_retry_after(sip_msg_t, int, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_warning(sip_msg_t, int, char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_passertedid(sip_msg_t, char *, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_ppreferredid(sip_msg_t, char *, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_add_rack(sip_msg_t, int, int, sip_method_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_author_scheme(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_author_param(sip_msg_t, char *, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_authen_info(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_proxy_authen_scheme(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_proxy_authen_param(sip_msg_t, char *, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_proxy_author_scheme(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_proxy_author_param(sip_msg_t, char *, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_proxy_require(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_www_authen_scheme(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_www_authen_param(sip_msg_t, char *, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_allow_events(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_event(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_substate(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_accept_type(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_accept_sub_type(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_accept_enc(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_accept_lang(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_alert_info_uri(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_method_t sip_get_allow_method(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_mime_version(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_priority(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_replyto_display_name(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_replyto_uri_str(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_date_time(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_date_month(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_date_wkday(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_date_timezone(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_content_disp(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_content_lang(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_content_enc(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_error_info_uri(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_require(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_subject(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_supported(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_tstamp_delay(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_tstamp_value(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_unsupported(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_server(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_user_agent(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_get_warning_code(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_warning_agent(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_warning_text(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_call_info_uri(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_in_reply_to(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_retry_after_cmts(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_passertedid_display_name(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_passertedid_uri_str(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_ppreferredid_display_name(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_ppreferredid_uri_str(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_priv_value(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_method_t sip_get_rack_method(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_copy_header(sip_msg_t, sip_header_t, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_copy_header_by_name(sip_msg_t, sip_msg_t, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_delete_header_by_name(sip_msg_t, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_header_t sip_add_param(sip_header_t, char *, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_delete_value(sip_header_t, sip_header_value_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_msg_t sip_create_response(const sip_msg_t, int, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_create_OKack(const sip_msg_t, sip_msg_t, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *, int, char *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *sip_get_resp_desc(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_header *sip_get_header(sip_msg_t, char *, sip_header_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const struct sip_header *, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_value *sip_get_next_value(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_param_value(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_param_t *sip_get_params(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern boolean_t sip_is_param_present(const sip_param_t *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern boolean_t sip_msg_is_request(const sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern boolean_t sip_msg_is_response(const sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_method_t sip_get_request_method(const sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_request_uri_str(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_response_phrase(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_sip_version(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_route_uri_str(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_route_display_name(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_contact_uri_str(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_contact_display_name(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_from_uri_str(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_from_display_name(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_from_tag(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_to_uri_str(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_to_display_name(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_to_tag(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_callid(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_method_t sip_get_callseq_method(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_via_sent_by_host(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_get_via_sent_by_port(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_via_sent_protocol_version(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_via_sent_protocol_name(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_via_sent_transport(sip_header_value_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_content_type(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_content_sub_type(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_msg_t sip_create_dialog_req(sip_method_t, sip_dialog_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *, char *, int, char *, uint32_t, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_msg_t sip_create_dialog_req_nocontact(sip_method_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sip_dialog_t, char *, char *, int, char *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_dialog_callid(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_dialog_local_tag(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_dialog_remote_tag(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_uri *sip_get_dialog_local_uri(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_uri *sip_get_dialog_remote_uri(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_uri *sip_get_dialog_remote_target_uri(sip_dialog_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_uri *sip_get_dialog_local_contact_uri(sip_dialog_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_dialog_route_set(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern boolean_t sip_is_dialog_secure(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern uint32_t sip_get_dialog_local_cseq(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern uint32_t sip_get_dialog_remote_cseq(sip_dialog_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_get_dialog_type(sip_dialog_t dialog, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_scheme(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_user(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_password(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_host(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_param_t *sip_get_uri_params(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_headers(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_opaque(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_query(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_path(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const sip_str_t *sip_get_uri_regname(const struct sip_uri *,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern boolean_t sip_is_uri_teluser(const struct sip_uri *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *sip_uri_errflags_to_str(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_uri *sip_get_request_uri(sip_msg_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_uri *sip_get_uri_parsed(sip_header_value_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Transaction functions */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_xaction *sip_get_trans(sip_msg_t, int, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern sip_method_t sip_get_trans_method(sip_transaction_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sip_get_trans_state(sip_transaction_t, int *);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_message *sip_get_trans_resp_msg(sip_transaction_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_message *sip_get_trans_orig_msg(sip_transaction_t,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const struct sip_conn_object *sip_get_trans_conn_obj(
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* _SIP_H */