sip.h revision df4705eab9c873eae60bada4f2138e6f22a76e11
0N/A/*
0N/A * CDDL HEADER START
0N/A *
0N/A * The contents of this file are subject to the terms of the
0N/A * Common Development and Distribution License (the "License").
0N/A * You may not use this file except in compliance with the License.
0N/A *
0N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0N/A * or http://www.opensolaris.org/os/licensing.
0N/A * See the License for the specific language governing permissions
0N/A * and limitations under the License.
0N/A *
0N/A * When distributing Covered Code, include this CDDL HEADER in each
0N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0N/A * If applicable, add the following below this CDDL HEADER, with the
0N/A * fields enclosed by brackets "[]" replaced with your own identifying
0N/A * information: Portions Copyright [yyyy] [name of copyright owner]
0N/A *
0N/A * CDDL HEADER END
0N/A */
119N/A
0N/A/*
0N/A * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
0N/A * Use is subject to license terms.
65N/A */
0N/A
125N/A#ifndef _SIP_H
125N/A#define _SIP_H
125N/A
125N/A#pragma ident "%Z%%M% %I% %E% SMI"
58N/A
77N/A#ifdef __cplusplus
125N/Aextern "C" {
125N/A#endif
125N/A
125N/A#include <sys/types.h>
261N/A#include <netinet/in.h>
261N/A
312N/A/* Send a SIP message statefully */
312N/A#define SIP_SEND_STATEFUL 0x0001
126N/A
58N/A/* Enable multiple dialogs if a request is forked */
8N/A#define SIP_DIALOG_ON_FORK 0x0010
30N/A
77N/A#define SIP_CRLF "\r\n"
0N/A#define SKIP_CRLF(msg_ptr) (msg_ptr = msg_ptr + 2)
0N/A#define SIP_VERSION "SIP/2.0"
0N/A#define SIP "SIP"
0N/A
0N/A/* SIP headers */
0N/A#define SIP_TO "TO"
0N/A#define SIP_FROM "FROM"
312N/A#define SIP_TAG "TAG="
312N/A#define SIP_CONTENT_LENGTH "CONTENT-LENGTH"
320N/A#define SIP_CONTENT_TYPE "CONTENT-TYPE"
312N/A#define SIP_CALL_ID "CALL-ID"
312N/A#define SIP_CSEQ "CSEQ"
312N/A#define SIP_MAX_FORWARDS "MAX-FORWARDS"
312N/A#define SIP_CONTACT "CONTACT"
65N/A#define SIP_VIA "Via"
65N/A#define SIP_RECORD_ROUTE "RECORD-ROUTE"
65N/A#define SIP_ROUTE "ROUTE"
65N/A#define SIP_ACCEPT "ACCEPT"
0N/A#define SIP_ACCEPT_ENCODE "ACCEPT-ENCODING"
30N/A#define SIP_ACCEPT_LANG "ACCEPT-LANGUAGE"
58N/A#define SIP_ALERT_INFO "ALERT-INFO"
312N/A#define SIP_ALLOW "ALLOW"
312N/A#define SIP_CALL_INFO "CALL-INFO"
260N/A#define SIP_CONTENT_DIS "CONTENT-DISPOSITION"
112N/A#define SIP_CONTENT_ENCODE "CONTENT-ENCODING"
0N/A#define SIP_CONTENT_LANG "CONTENT-LANGUAGE"
376N/A#define SIP_DATE "DATE"
376N/A#define SIP_ERROR_INFO "ERROR-INFO"
0N/A#define SIP_EXPIRE "EXPIRES"
11N/A#define SIP_IN_REPLY_TO "IN-REPLY-TO"
0N/A#define SIP_MIN_EXPIRE "MIN-EXPIRES"
240N/A#define SIP_MIME_VERSION "MIME-VERSION"
58N/A#define SIP_ORGANIZATION "ORGANIZATION"
58N/A#define SIP_PRIORITY "PRIORITY"
58N/A#define SIP_REQUIRE "REQUIRE"
58N/A#define SIP_REPLYTO "REPLY-TO"
77N/A#define SIP_RETRY_AFTER "RETRY-AFTER"
207N/A#define SIP_SERVER "SERVER"
207N/A#define SIP_SUBJECT "SUBJECT"
261N/A#define SIP_SUPPORT "SUPPORTED"
260N/A#define SIP_TIMESTAMP "TIMESTAMP"
77N/A#define SIP_UNSUPPORT "UNSUPPORTED"
260N/A#define SIP_USER_AGENT "USER-AGENT"
112N/A#define SIP_WARNING "WARNING"
77N/A#define SIP_ALLOW_EVENTS "ALLOW-EVENTS"
77N/A#define SIP_EVENT "EVENT"
77N/A#define SIP_SUBSCRIPTION_STATE "SUBSCRIPTION-STATE"
77N/A#define SIP_WWW_AUTHEN "WWW-AUTHENTICATE"
260N/A#define SIP_AUTHOR "AUTHORIZATION"
77N/A#define SIP_AUTHEN_INFO "AUTHENTICATION-INFO"
77N/A#define SIP_PROXY_AUTHOR "PROXY-AUTHORIZATION"
77N/A#define SIP_PROXY_AUTHEN "PROXY-AUTHENTICATE"
0N/A#define SIP_PROXY_REQ "PROXY-REQUIRE"
77N/A#define SIP_PASSERTEDID "P-ASSERTED-IDENTITY"
111N/A#define SIP_PPREFERREDID "P-PREFERRED-IDENTITY"
111N/A#define SIP_PRIVACY "PRIVACY"
111N/A#define SIP_RACK "RACK"
111N/A#define SIP_RSEQ "RSEQ"
111N/A
111N/A/* SIP Response Codes */
111N/A
111N/A/* 1XX - Provisional */
111N/A#define SIP_TRYING 100
111N/A#define SIP_RINGING 180
111N/A#define SIP_CALL_IS_BEING_FORWARDED 181
111N/A#define SIP_QUEUED 182
77N/A#define SIP_SESSION_PROGRESS 183
77N/A
77N/A/* 2XX - Success */
207N/A#define SIP_OK 200
207N/A#define SIP_ACCEPTED 202
77N/A
77N/A/* 3XX - Redirection */
99N/A#define SIP_MULTIPLE_CHOICES 300
77N/A#define SIP_MOVED_PERMANENTLY 301
77N/A#define SIP_MOVED_TEMPORARILY 302
77N/A#define SIP_USE_PROXY 303
77N/A#define SIP_ALTERNATIVE_SERVICE 304
77N/A
77N/A/* 4XX - Request Failed */
77N/A#define SIP_BAD_REQUEST 400
77N/A#define SIP_UNAUTHORIZED 401
0N/A#define SIP_PAYMENT_REQUIRED 402
77N/A#define SIP_FORBIDDEN 403
77N/A#define SIP_NOT_FOUND 404
77N/A#define SIP_METHOD_NOT_ALLOWED 405
77N/A#define SIP_NOT_ACCEPTABLE 406
77N/A#define SIP_PROXY_AUTH_REQUIRED 407
77N/A#define SIP_REQUEST_TIMEOUT 408
77N/A#define SIP_GONE 410
77N/A#define SIP_REQUEST_ENTITY_2_LARGE 413
77N/A#define SIP_REQUEST_URI_2_LONG 414
77N/A#define SIP_UNSUPPORTED_MEDIA_TYPE 415
77N/A#define SIP_UNSUPPORTED_URI_SCHEME 416
111N/A#define SIP_BAD_EXTENSION 420
111N/A#define SIP_EXTENSION_REQUIRED 421
77N/A#define SIP_INTERVAL_2_BRIEF 423
77N/A#define SIP_TEMPORARILY_UNAVAIL 480
77N/A#define SIP_CALL_NON_EXISTANT 481
240N/A#define SIP_LOOP_DETECTED 482
173N/A#define SIP_TOO_MANY_HOOPS 483
173N/A#define SIP_ADDRESS_INCOMPLETE 484
173N/A#define SIP_AMBIGUOUS 485
173N/A#define SIP_BUSY_HERE 486
254N/A#define SIP_REQUEST_TERMINATED 487
173N/A#define SIP_NOT_ACCEPTABLE_HERE 488
173N/A#define SIP_BAD_EVENT 489
173N/A#define SIP_REQUEST_PENDING 491
254N/A#define SIP_UNDECIPHERABLE 493
173N/A
173N/A/* 5XX - Server Failure */
173N/A#define SIP_SERVER_INTERNAL_ERROR 500
253N/A#define SIP_NOT_IMPLEMENTED 501
312N/A#define SIP_BAD_GATEWAY 502
253N/A#define SIP_SERVICE_UNAVAILABLE 503
253N/A#define SIP_SERVER_TIMEOUT 504
253N/A#define SIP_VERSION_NOT_SUPPORTED 505
253N/A#define SIP_MESSAGE_2_LARGE 513
253N/A
253N/A/* 6XX - Global Failures */
253N/A#define SIP_BUSY_EVERYWHERE 600
253N/A#define SIP_DECLINE 601
253N/A#define SIP_DOES_NOT_EXIST_ANYWHERE 604
312N/A#define SIP_NOT_ACCEPTABLE_ANYWHERE 606
312N/A
312N/A/* Response error types */
253N/A#define SIP_PROVISIONAL_RESP(resp) ((resp) >= 100 && (resp) < 200)
253N/A#define SIP_FINAL_RESP(resp) ((resp) >= 200 && (resp) < 700)
99N/A#define SIP_OK_RESP(resp) ((resp) >= 200 && (resp) < 300)
77N/A#define SIP_NONOK_FINAL_RESP(resp) ((resp) >= 300 && (resp) < 700)
77N/A#define SIP_REDIRECT_RESP(resp) ((resp) >= 300 && (resp) < 400)
77N/A#define SIP_REQFAIL_RESP(resp) ((resp) >= 400 && (resp) < 500)
77N/A#define SIP_SRVFAIL_RESP(resp) ((resp) >= 500 && (resp) < 600)
77N/A#define SIP_GLOBFAIL_RESP(resp) ((resp) >= 600 && (resp) < 700)
0N/A
0N/A/* Types of transactions */
77N/A#define SIP_CLIENT_TRANSACTION 1
125N/A#define SIP_SERVER_TRANSACTION 2
77N/A
77N/A/* Transaction states */
205N/A#define SIP_NEW_TRANSACTION 0
205N/A
205N/A/* Client Transaction States */
112N/A#define SIP_CLNT_CALLING 1
112N/A#define SIP_CLNT_INV_PROCEEDING 2
112N/A#define SIP_CLNT_INV_TERMINATED 3
77N/A#define SIP_CLNT_INV_COMPLETED 4
106N/A#define SIP_CLNT_TRYING 5
119N/A#define SIP_CLNT_NONINV_PROCEEDING 6
106N/A#define SIP_CLNT_NONINV_TERMINATED 7
119N/A#define SIP_CLNT_NONINV_COMPLETED 8
106N/A
119N/A/* Server Transaction States */
119N/A#define SIP_SRV_INV_PROCEEDING 9
119N/A#define SIP_SRV_INV_COMPLETED 10
119N/A#define SIP_SRV_CONFIRMED 11
106N/A#define SIP_SRV_INV_TERMINATED 12
106N/A#define SIP_SRV_TRYING 13
106N/A#define SIP_SRV_NONINV_PROCEEDING 14
99N/A#define SIP_SRV_NONINV_COMPLETED 15
99N/A#define SIP_SRV_NONINV_TERMINATED 16
99N/A
99N/A/* Dialog types */
99N/A#define SIP_UAC_DIALOG 1
99N/A#define SIP_UAS_DIALOG 2
99N/A
99N/A/* Dialog state */
99N/Atypedef enum dialog_state {
125N/A SIP_DLG_NEW = 0, /* New dialog, no reply received yet */
125N/A SIP_DLG_EARLY, /* Early dialog, provisional reply received */
125N/A SIP_DLG_CONFIRMED, /* Confirmed dialog, 2xx reply received */
125N/A SIP_DLG_DESTROYED /* Destroyed dialog */
125N/A} dialog_state_t;
125N/A
125N/A/* SIP URI parse errors */
125N/A#define SIP_URIERR_SCHEME 0x00000001 /* invalid URL SCHEME name */
125N/A#define SIP_URIERR_USER 0x00000002 /* invalid user name */
126N/A#define SIP_URIERR_PASS 0x00000004 /* invalid password */
125N/A#define SIP_URIERR_HOST 0x00000008 /* invalid domain name */
125N/A#define SIP_URIERR_PORT 0x00000010 /* invalid port number */
125N/A#define SIP_URIERR_PARAM 0x00000020 /* parameter specific error */
126N/A#define SIP_URIERR_HEADER 0x00000040 /* headers specific error */
126N/A#define SIP_URIERR_OPAQUE 0x00000080 /* opaque specific error */
126N/A#define SIP_URIERR_QUERY 0x00000100 /* query specific error */
126N/A#define SIP_URIERR_PATH 0x00000200 /* path specific error */
126N/A#define SIP_URIERR_REGNAME 0x00000400 /* reg-name specific error */
126N/A#define SIP_URIERR_NOURI 0x00000800 /* No URI */
126N/A#define SIP_URIERR_MEMORY 0x00001000 /* out of memory */
126N/A
126N/A#ifdef __linux__
126N/A#define B_FALSE 0
126N/A#define B_TRUE 1
126N/A
126N/Atypedef int boolean_t;
126N/Atypedef unsigned char uchar_t;
126N/Atypedef unsigned int uint_t;
126N/Atypedef unsigned int uint32_t;
126N/A#endif
126N/A
126N/Atypedef struct sip_message *sip_msg_t;
210N/Atypedef struct sip_header *sip_header_t;
210N/Atypedef struct sip_value *sip_header_value_t;
210N/Atypedef struct sip_dialog *sip_dialog_t;
210N/Atypedef struct sip_uri *sip_uri_t;
210N/Atypedef struct sip_conn_object *sip_conn_object_t;
210N/Atypedef struct sip_xaction *sip_transaction_t;
210N/A
126N/Atypedef struct sip_str {
126N/A char *sip_str_ptr;
126N/A int sip_str_len;
126N/A}sip_str_t;
144N/A
144N/A
144N/A/* SIP parameter */
261N/Atypedef struct sip_param {
261N/A sip_str_t param_name;
261N/A sip_str_t param_value;
261N/A struct sip_param *param_next;
261N/A}sip_param_t;
261N/A
261N/A
261N/A/* Parsed header structure */
296N/Atypedef struct sip_parsed_header {
296N/A int sip_parsed_header_version;
296N/A struct sip_value *value;
296N/A sip_header_t sip_header;
296N/A}sip_parsed_header_t;
296N/A
296N/A#define SIP_PARSED_HEADER_VERSION_1 1
296N/A
296N/A/* Value states */
296N/Atypedef enum {
296N/A SIP_VALUE_ACTIVE = 0,
293N/A SIP_VALUE_BAD,
293N/A SIP_VALUE_DELETED
293N/A}sip_value_state_t;
293N/A
293N/A/* SIP header value */
77N/Atypedef struct sip_value {
293N/A int sip_value_version;
0N/A void *next;
0N/A sip_param_t *param_list;
0N/A sip_value_state_t value_state; /* Active/Deleted */
77N/A sip_parsed_header_t *parsed_header;
77N/A char *value_start;
205N/A char *value_end;
77N/A sip_str_t *sip_value_uri_str;
77N/A sip_uri_t sip_value_parse_uri;
77N/A}sip_value_t;
77N/A
77N/A#define SIP_VALUE_VERSION_1 1
58N/A
312N/Atypedef struct sip_header_general {
312N/A char *sip_hdr_start;
312N/A char *sip_hdr_end;
312N/A char *sip_hdr_current;
312N/A sip_parsed_header_t *sip_hdr_parsed;
312N/A}sip_hdr_general_t;
312N/A
312N/A/* SIP methods */
312N/Atypedef enum {
312N/A UNKNOWN = 0,
312N/A INVITE,
312N/A ACK,
312N/A OPTIONS,
312N/A BYE,
312N/A CANCEL,
312N/A REGISTER,
312N/A REFER,
312N/A INFO,
312N/A SUBSCRIBE,
312N/A NOTIFY,
312N/A PRACK
312N/A}sip_method_t;
312N/A
312N/A#define MAX_SIP_METHODS 12
312N/A
312N/Atypedef struct sip_methods {
312N/A char *name; /* Name of the method */
312N/A int len; /* Length for comparison */
312N/A}sip_methods_t;
312N/A
312N/Aextern sip_methods_t sip_methods[];
312N/A
312N/A/* SIP header function table */
312N/Atypedef struct header_function_table {
58N/A char *header_name;
312N/A char *header_short_name;
0N/A int (*header_parse_func)(struct sip_header *,
77N/A struct sip_parsed_header **);
58N/A boolean_t (*header_check_compliance)(struct sip_parsed_header *);
58N/A boolean_t (*header_is_equal)(struct sip_parsed_header *,
58N/A struct sip_parsed_header *);
0N/A void (*header_free)(struct sip_parsed_header *);
0N/A}sip_header_function_t;
0N/A
58N/A/* Connection Manager interface */
0N/Atypedef struct sip_io_pointers_s {
0N/A int (*sip_conn_send)(const sip_conn_object_t, char *, int);
0N/A void (*sip_hold_conn_object)(sip_conn_object_t);
0N/A void (*sip_rel_conn_object)(sip_conn_object_t);
58N/A boolean_t (*sip_conn_is_stream)(sip_conn_object_t);
312N/A boolean_t (*sip_conn_is_reliable)(sip_conn_object_t);
0N/A int (*sip_conn_remote_address)(sip_conn_object_t, struct sockaddr *,
58N/A socklen_t *);
77N/A int (*sip_conn_local_address)(sip_conn_object_t, struct sockaddr *,
58N/A socklen_t *);
312N/A int (*sip_conn_transport)(sip_conn_object_t);
0N/A int (*sip_conn_timer1)(sip_conn_object_t);
0N/A int (*sip_conn_timer2)(sip_conn_object_t);
77N/A int (*sip_conn_timer4)(sip_conn_object_t);
99N/A int (*sip_conn_timerd)(sip_conn_object_t);
0N/A}sip_io_pointers_t;
0N/A
77N/A/* Upper layer registerations */
11N/Atypedef struct sip_ulp_pointers_s {
99N/A void (*sip_ulp_recv)(const sip_conn_object_t,
99N/A sip_msg_t, const sip_dialog_t);
99N/A uint_t (*sip_ulp_timeout)(void *, void (*func)(void *),
99N/A struct timeval *);
11N/A boolean_t (*sip_ulp_untimeout)(uint_t);
290N/A int (*sip_ulp_trans_error)(sip_transaction_t, int, void *);
11N/A void (*sip_ulp_dlg_del)(sip_dialog_t, sip_msg_t, void *);
99N/A void (*sip_ulp_trans_state_cb)(sip_transaction_t,
99N/A sip_msg_t, int, int);
99N/A void (*sip_ulp_dlg_state_cb)(sip_dialog_t, sip_msg_t, int,
11N/A int);
77N/A}sip_ulp_pointers_t;
58N/A
77N/A/* SIP stack initialization structure */
70N/Atypedef struct sip_stack_init_s {
70N/A int sip_version;
58N/A int sip_stack_flags;
77N/A sip_io_pointers_t *sip_io_pointers;
70N/A sip_ulp_pointers_t *sip_ulp_pointers;
58N/A sip_header_function_t *sip_function_table;
58N/A}sip_stack_init_t;
77N/A
77N/A/* SIP stack version */
99N/A#define SIP_STACK_VERSION 1
99N/A
99N/A/* Flags for sip_stack_flags */
99N/A#define SIP_STACK_DIALOGS 0x0001
77N/A
77N/Aextern int sip_init_conn_object(sip_conn_object_t);
77N/Aextern void sip_clear_stale_data(sip_conn_object_t);
77N/Aextern void sip_conn_destroyed(sip_conn_object_t);
77N/A
77N/Aextern int (*sip_stack_send)(const sip_conn_object_t, char *, int);
77N/Aextern void (*sip_refhold_conn)(sip_conn_object_t);
77N/Aextern void (*sip_refrele_conn)(sip_conn_object_t);
77N/Aextern boolean_t (*sip_is_conn_stream)(sip_conn_object_t);
77N/Aextern boolean_t (*sip_is_conn_reliable)(sip_conn_object_t);
58N/Aextern int (*sip_conn_rem_addr)(sip_conn_object_t,
77N/A struct sockaddr *, socklen_t *);
77N/Aextern int (*sip_conn_local_addr)(sip_conn_object_t,
77N/A struct sockaddr *, socklen_t *);
77N/Aextern int (*sip_conn_transport)(sip_conn_object_t);
77N/Aextern int (*sip_conn_timer1)(sip_conn_object_t);
77N/Aextern int (*sip_conn_timer2)(sip_conn_object_t);
77N/Aextern int (*sip_conn_timer4)(sip_conn_object_t);
77N/Aextern int (*sip_conn_timerd)(sip_conn_object_t);
77N/A
99N/Aextern uint_t (*sip_stack_timeout)(void *, void (*func)(void *),
58N/A struct timeval *);
99N/Aextern boolean_t (*sip_stack_untimeout)(uint_t);
99N/A
99N/Aextern sip_msg_t sip_new_msg();
99N/Aextern void sip_free_msg(sip_msg_t);
58N/Aextern void sip_hold_msg(sip_msg_t);
99N/Aextern int sip_stack_init(sip_stack_init_t *);
99N/Aextern int sip_sendmsg(sip_conn_object_t, sip_msg_t, sip_dialog_t,
99N/A uint32_t);
99N/Aextern void sip_process_new_packet(sip_conn_object_t, void *,
58N/A size_t);
112N/Aextern char *sip_guid();
58N/Aextern char *sip_sent_by_to_str(int *);
203N/Aextern int sip_register_sent_by(char *);
352N/Aextern void sip_unregister_sent_by(char *);
240N/Aextern void sip_unregister_all_sent_by();
58N/Aextern char *sip_branchid(sip_msg_t);
58N/Aextern uint32_t sip_get_cseq();
207N/Aextern uint32_t sip_get_rseq();
207N/Aextern int sip_get_num_via(sip_msg_t, int *);
207N/A
207N/Aextern int sip_add_from(sip_msg_t, char *, char *, char *,
207N/A boolean_t, char *);
207N/Aextern int sip_add_to(sip_msg_t, char *, char *, char *,
207N/A boolean_t, char *);
312N/Aextern int sip_add_response_line(sip_msg_t, int, char *);
312N/Aextern int sip_add_request_line(sip_msg_t, sip_method_t, char *);
312N/Aextern int sip_add_via(sip_msg_t, char *, char *, int, char *);
312N/Aextern int sip_add_maxforward(sip_msg_t, uint_t);
312N/Aextern int sip_add_callid(sip_msg_t, char *);
312N/Aextern int sip_add_cseq(sip_msg_t, sip_method_t, uint32_t);
312N/Aextern int sip_add_content_type(sip_msg_t, char *, char *);
312N/Aextern int sip_add_content(sip_msg_t, char *);
312N/Aextern int sip_add_contact(sip_msg_t, char *, char *, boolean_t,
207N/A char *);
270N/Aextern int sip_add_route(sip_msg_t, char *, char *, char *);
312N/Aextern int sip_add_record_route(sip_msg_t, char *, char *, char *);
352N/Aextern int sip_add_branchid_to_via(sip_msg_t, char *);
312N/Aextern int sip_add_accept(sip_msg_t, char *, char *, char *,
264N/A char *);
270N/Aextern int sip_add_author(sip_msg_t, char *, char *);
270N/Aextern int sip_add_authen_info(sip_msg_t, char *);
270N/Aextern int sip_add_proxy_authen(sip_msg_t, char *, char *);
270N/Aextern int sip_add_proxy_author(sip_msg_t, char *, char *);
274N/Aextern int sip_add_proxy_require(sip_msg_t, char *);
274N/Aextern int sip_add_www_authen(sip_msg_t, char *, char *);
270N/Aextern int sip_add_accept_enc(sip_msg_t, char *, char *);
270N/Aextern int sip_add_accept_lang(sip_msg_t, char *, char *);
297N/Aextern int sip_add_alert_info(sip_msg_t, char *, char *);
270N/Aextern int sip_add_allow(sip_msg_t, sip_method_t);
270N/Aextern int sip_add_call_info(sip_msg_t, char *, char *);
297N/Aextern int sip_add_content_disp(sip_msg_t, char *, char *);
297N/Aextern int sip_add_content_enc(sip_msg_t, char *);
297N/Aextern int sip_add_content_lang(sip_msg_t, char *);
297N/Aextern int sip_add_date(sip_msg_t, char *);
297N/Aextern int sip_add_error_info(sip_msg_t, char *, char *);
297N/Aextern int sip_add_expires(sip_msg_t, int);
274N/Aextern int sip_add_in_reply_to(sip_msg_t, char *);
274N/Aextern int sip_add_mime_version(sip_msg_t, char *);
274N/Aextern int sip_add_min_expires(sip_msg_t, int);
274N/Aextern int sip_add_org(sip_msg_t, char *);
274N/Aextern int sip_add_priority(sip_msg_t, char *);
274N/Aextern int sip_add_reply_to(sip_msg_t, char *, char *, char *,
274N/A boolean_t);
274N/Aextern int sip_add_require(sip_msg_t, char *);
274N/Aextern int sip_add_retry_after(sip_msg_t, int, char *, char *);
274N/Aextern int sip_add_server(sip_msg_t, char *);
274N/Aextern int sip_add_subject(sip_msg_t, char *);
274N/Aextern int sip_add_supported(sip_msg_t, char *);
274N/Aextern int sip_add_tstamp(sip_msg_t, char *, char *);
274N/Aextern int sip_add_unsupported(sip_msg_t, char *);
274N/Aextern int sip_add_user_agent(sip_msg_t, char *);
274N/Aextern int sip_add_warning(sip_msg_t, int, char *, char *);
270N/Aextern int sip_add_allow_events(sip_msg_t, char *);
270N/Aextern int sip_add_event(sip_msg_t, char *, char *);
270N/Aextern int sip_add_substate(sip_msg_t, char *, char *);
261N/Aextern int sip_add_privacy(sip_msg_t, char *);
270N/Aextern int sip_add_passertedid(sip_msg_t, char *, char *,
270N/A boolean_t);
270N/Aextern int sip_add_ppreferredid(sip_msg_t, char *, char *,
264N/A boolean_t);
270N/Aextern int sip_add_rack(sip_msg_t, int, int, sip_method_t);
270N/Aextern int sip_add_rseq(sip_msg_t, int);
261N/Aextern const sip_str_t *sip_get_author_scheme(sip_msg_t, int *);
270N/Aextern const sip_str_t *sip_get_author_param(sip_msg_t, char *, int *);
270N/Aextern const sip_str_t *sip_get_authen_info(sip_header_value_t, int *);
264N/Aextern const sip_str_t *sip_get_proxy_authen_scheme(sip_msg_t, int *);
270N/Aextern const sip_str_t *sip_get_proxy_authen_param(sip_msg_t, char *, int *);
274N/Aextern const sip_str_t *sip_get_proxy_author_scheme(sip_msg_t, int *);
270N/Aextern const sip_str_t *sip_get_proxy_author_param(sip_msg_t, char *, int *);
270N/Aextern const sip_str_t *sip_get_proxy_require(sip_header_value_t, int *);
270N/Aextern const sip_str_t *sip_get_www_authen_scheme(sip_msg_t, int *);
270N/Aextern const sip_str_t *sip_get_www_authen_param(sip_msg_t, char *, int *);
270N/Aextern const sip_str_t *sip_get_allow_events(sip_header_value_t, int *);
270N/Aextern const sip_str_t *sip_get_event(sip_msg_t, int *);
270N/Aextern const sip_str_t *sip_get_substate(sip_msg_t, int *);
270N/Aextern const sip_str_t *sip_get_accept_type(sip_header_value_t, int *);
270N/Aextern const sip_str_t *sip_get_accept_sub_type(sip_header_value_t, int *);
264N/Aextern const sip_str_t *sip_get_accept_enc(sip_header_value_t, int *);
264N/Aextern const sip_str_t *sip_get_accept_lang(sip_header_value_t, int *);
312N/Aextern const sip_str_t *sip_get_alert_info_uri(sip_header_value_t, int *);
58N/Aextern sip_method_t sip_get_allow_method(sip_header_value_t, int *);
312N/Aextern int sip_get_min_expires(sip_msg_t, int *);
312N/Aextern const sip_str_t *sip_get_mime_version(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_org(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_priority(sip_msg_t, int *);
99N/Aextern const sip_str_t *sip_get_replyto_display_name(sip_msg_t, int *);
312N/Aextern const sip_str_t *sip_get_replyto_uri_str(sip_msg_t, int *);
99N/Aextern const sip_str_t *sip_get_date_time(sip_msg_t, int *);
58N/Aextern int sip_get_date_day(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_date_month(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_date_wkday(sip_msg_t, int *);
58N/Aextern int sip_get_date_year(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_date_timezone(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_content_disp(sip_msg_t, int *);
312N/Aextern const sip_str_t *sip_get_content_lang(sip_header_value_t, int *);
312N/Aextern const sip_str_t *sip_get_content_enc(sip_header_value_t, int *);
58N/Aextern const sip_str_t *sip_get_error_info_uri(sip_header_value_t, int *);
58N/Aextern int sip_get_expires(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_require(sip_header_value_t, int *);
58N/Aextern const sip_str_t *sip_get_subject(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_supported(sip_header_value_t, int *);
58N/Aextern const sip_str_t *sip_get_tstamp_delay(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_tstamp_value(sip_msg_t, int *);
58N/Aextern const sip_str_t *sip_get_unsupported(sip_header_value_t, int *);
99N/Aextern const sip_str_t *sip_get_server(sip_msg_t, int *);
312N/Aextern const sip_str_t *sip_get_user_agent(sip_msg_t, int *);
99N/Aextern int sip_get_warning_code(sip_header_value_t, int *);
312N/Aextern const sip_str_t *sip_get_warning_agent(sip_header_value_t, int *);
0N/Aextern const sip_str_t *sip_get_warning_text(sip_header_value_t, int *);
260N/Aextern const sip_str_t *sip_get_call_info_uri(sip_header_value_t, int *);
260N/Aextern const sip_str_t *sip_get_in_reply_to(sip_header_value_t, int *);
260N/Aextern int sip_get_retry_after_time(sip_msg_t, int *);
0N/Aextern const sip_str_t *sip_get_retry_after_cmts(sip_msg_t, int *);
extern const sip_str_t *sip_get_passertedid_display_name(sip_header_value_t,
int *);
extern const sip_str_t *sip_get_passertedid_uri_str(sip_header_value_t,
int *);
extern const sip_str_t *sip_get_ppreferredid_display_name(sip_header_value_t,
int *);
extern const sip_str_t *sip_get_ppreferredid_uri_str(sip_header_value_t,
int *);
extern const sip_str_t *sip_get_priv_value(sip_header_value_t, int *);
extern int sip_get_rack_resp_num(sip_msg_t, int *);
extern int sip_get_rack_cseq_num(sip_msg_t, int *);
extern sip_method_t sip_get_rack_method(sip_msg_t, int *);
extern int sip_get_rseq_resp_num(sip_msg_t, int *);
extern int sip_copy_start_line(sip_msg_t, sip_msg_t);
extern int sip_delete_start_line(sip_msg_t sip_msg);
extern int sip_copy_header(sip_msg_t, sip_header_t, char *);
extern int sip_copy_header_by_name(sip_msg_t, sip_msg_t, char *,
char *);
extern int sip_copy_all_headers(sip_msg_t, sip_msg_t);
extern int sip_delete_header_by_name(sip_msg_t, char *);
extern int sip_add_header(sip_msg_t, char *);
extern sip_header_t sip_add_param(sip_header_t, char *, int *);
extern int sip_delete_header(sip_header_t);
extern int sip_delete_value(sip_header_t, sip_header_value_t);
extern sip_msg_t sip_clone_msg(const sip_msg_t);
extern sip_msg_t sip_create_response(const sip_msg_t, int, char *,
char *, char *);
extern int sip_create_OKack(const sip_msg_t, sip_msg_t, char *,
char *, int, char *);
extern char *sip_get_resp_desc(int);
extern char *sip_get_branchid(const sip_msg_t, int *);
extern const struct sip_header *sip_get_header(sip_msg_t, char *, sip_header_t,
int *);
extern const struct sip_value *sip_get_header_value(
const struct sip_header *, int *);
extern const struct sip_value *sip_get_next_value(sip_header_value_t, int *);
extern const sip_str_t *sip_get_param_value(sip_header_value_t,
char *, int *);
extern const sip_param_t *sip_get_params(sip_header_value_t, int *);
extern boolean_t sip_is_param_present(const sip_param_t *,
char *, int);
extern char *sip_msg_to_str(sip_msg_t, int *);
extern char *sip_hdr_to_str(sip_header_t, int *);
extern char *sip_reqline_to_str(sip_msg_t, int *);
extern char *sip_respline_to_str(sip_msg_t, int *);
extern boolean_t sip_msg_is_request(const sip_msg_t, int *);
extern boolean_t sip_msg_is_response(const sip_msg_t, int *);
extern sip_method_t sip_get_request_method(const sip_msg_t, int *);
extern const sip_str_t *sip_get_request_uri_str(sip_msg_t, int *);
extern int sip_get_response_code(sip_msg_t, int *);
extern const sip_str_t *sip_get_response_phrase(sip_msg_t, int *);
extern const sip_str_t *sip_get_sip_version(sip_msg_t, int *);
extern int sip_get_msg_len(sip_msg_t, int *);
extern const sip_str_t *sip_get_route_uri_str(sip_header_value_t, int *);
extern const sip_str_t *sip_get_route_display_name(sip_header_value_t, int *);
extern const sip_str_t *sip_get_contact_uri_str(sip_header_value_t, int *);
extern const sip_str_t *sip_get_contact_display_name(sip_header_value_t,
int *);
extern const sip_str_t *sip_get_from_uri_str(sip_msg_t, int *);
extern const sip_str_t *sip_get_from_display_name(sip_msg_t, int *);
extern const sip_str_t *sip_get_from_tag(sip_msg_t, int *);
extern const sip_str_t *sip_get_to_uri_str(sip_msg_t, int *);
extern const sip_str_t *sip_get_to_display_name(sip_msg_t, int *);
extern const sip_str_t *sip_get_to_tag(sip_msg_t, int *);
extern const sip_str_t *sip_get_callid(sip_msg_t, int *);
extern int sip_get_callseq_num(sip_msg_t, int *);
extern sip_method_t sip_get_callseq_method(sip_msg_t, int *);
extern const sip_str_t *sip_get_via_sent_by_host(sip_header_value_t, int *);
extern int sip_get_via_sent_by_port(sip_header_value_t, int *);
extern const sip_str_t *sip_get_via_sent_protocol_version(sip_header_value_t,
int *);
extern const sip_str_t *sip_get_via_sent_protocol_name(sip_header_value_t,
int *);
extern const sip_str_t *sip_get_via_sent_transport(sip_header_value_t,
int *);
extern int sip_get_maxforward(sip_msg_t, int *);
extern int sip_get_content_length(sip_msg_t, int *);
extern const sip_str_t *sip_get_content_type(sip_msg_t, int *);
extern const sip_str_t *sip_get_content_sub_type(sip_msg_t, int *);
extern char *sip_get_content(sip_msg_t, int *);
extern sip_msg_t sip_create_dialog_req(sip_method_t, sip_dialog_t,
char *, char *, int, char *, uint32_t, int);
extern sip_msg_t sip_create_dialog_req_nocontact(sip_method_t,
sip_dialog_t, char *, char *, int, char *,
uint32_t, int);
extern int sip_get_dialog_state(sip_dialog_t, int *);
extern int sip_get_dialog_method(sip_dialog_t, int *);
extern const sip_str_t *sip_get_dialog_callid(sip_dialog_t, int *);
extern const sip_str_t *sip_get_dialog_local_tag(sip_dialog_t, int *);
extern const sip_str_t *sip_get_dialog_remote_tag(sip_dialog_t, int *);
extern const struct sip_uri *sip_get_dialog_local_uri(sip_dialog_t, int *);
extern const struct sip_uri *sip_get_dialog_remote_uri(sip_dialog_t, int *);
extern const struct sip_uri *sip_get_dialog_remote_target_uri(sip_dialog_t,
int *);
extern const struct sip_uri *sip_get_dialog_local_contact_uri(sip_dialog_t,
int *);
extern const sip_str_t *sip_get_dialog_route_set(sip_dialog_t, int *);
extern boolean_t sip_is_dialog_secure(sip_dialog_t, int *);
extern uint32_t sip_get_dialog_local_cseq(sip_dialog_t, int *);
extern uint32_t sip_get_dialog_remote_cseq(sip_dialog_t, int *);
extern int sip_get_dialog_type(sip_dialog_t dialog, int *);
extern void sip_hold_dialog(sip_dialog_t);
extern void sip_release_dialog(sip_dialog_t);
extern void sip_delete_dialog(sip_dialog_t);
extern sip_uri_t sip_parse_uri(sip_str_t *, int *);
extern void sip_free_parsed_uri(sip_uri_t);
extern boolean_t sip_is_sipuri(const struct sip_uri *);
extern const sip_str_t *sip_get_uri_scheme(const struct sip_uri *,
int *);
extern const sip_str_t *sip_get_uri_user(const struct sip_uri *,
int *);
extern const sip_str_t *sip_get_uri_password(const struct sip_uri *,
int *);
extern const sip_str_t *sip_get_uri_host(const struct sip_uri *,
int *);
extern int sip_get_uri_port(const struct sip_uri *,
int *error);
extern const sip_param_t *sip_get_uri_params(const struct sip_uri *,
int *);
extern const sip_str_t *sip_get_uri_headers(const struct sip_uri *,
int *);
extern const sip_str_t *sip_get_uri_opaque(const struct sip_uri *,
int *);
extern const sip_str_t *sip_get_uri_query(const struct sip_uri *,
int *);
extern const sip_str_t *sip_get_uri_path(const struct sip_uri *,
int *);
extern const sip_str_t *sip_get_uri_regname(const struct sip_uri *,
int *);
extern boolean_t sip_is_uri_teluser(const struct sip_uri *);
extern int sip_get_uri_errflags(const struct sip_uri *,
int *);
extern char *sip_uri_errflags_to_str(int);
extern const struct sip_uri *sip_get_request_uri(sip_msg_t, int *);
extern const struct sip_uri *sip_get_uri_parsed(sip_header_value_t, int *);
/* Transaction functions */
extern const struct sip_xaction *sip_get_trans(sip_msg_t, int, int *);
extern char *sip_get_trans_branchid(sip_transaction_t,
int *);
extern sip_method_t sip_get_trans_method(sip_transaction_t,
int *);
extern int sip_get_trans_state(sip_transaction_t, int *);
extern const struct sip_message *sip_get_trans_resp_msg(sip_transaction_t,
int *);
extern const struct sip_message *sip_get_trans_orig_msg(sip_transaction_t,
int *);
extern void sip_hold_trans(sip_transaction_t);
extern void sip_release_trans(sip_transaction_t);
extern const struct sip_conn_object *sip_get_trans_conn_obj(
sip_transaction_t, int *);
#ifdef __cplusplus
}
#endif
#endif /* _SIP_H */