xref: /onnv-gate/usr/src/lib/libsip/common/sip.h (revision 5842:e93f793783f6)
12882Svi117747 /*
22882Svi117747  * CDDL HEADER START
32882Svi117747  *
42882Svi117747  * The contents of this file are subject to the terms of the
52882Svi117747  * Common Development and Distribution License (the "License").
62882Svi117747  * You may not use this file except in compliance with the License.
72882Svi117747  *
82882Svi117747  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
92882Svi117747  * or http://www.opensolaris.org/os/licensing.
102882Svi117747  * See the License for the specific language governing permissions
112882Svi117747  * and limitations under the License.
122882Svi117747  *
132882Svi117747  * When distributing Covered Code, include this CDDL HEADER in each
142882Svi117747  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
152882Svi117747  * If applicable, add the following below this CDDL HEADER, with the
162882Svi117747  * fields enclosed by brackets "[]" replaced with your own identifying
172882Svi117747  * information: Portions Copyright [yyyy] [name of copyright owner]
182882Svi117747  *
192882Svi117747  * CDDL HEADER END
202882Svi117747  */
212882Svi117747 
222882Svi117747 /*
23*5842Sgm209912  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
242882Svi117747  * Use is subject to license terms.
252882Svi117747  */
262882Svi117747 
272882Svi117747 #ifndef	_SIP_H
282882Svi117747 #define	_SIP_H
292882Svi117747 
302882Svi117747 #pragma ident	"%Z%%M%	%I%	%E% SMI"
312882Svi117747 
322882Svi117747 #ifdef	__cplusplus
332882Svi117747 extern "C" {
342882Svi117747 #endif
352882Svi117747 
362882Svi117747 #include <sys/types.h>
372882Svi117747 #include <netinet/in.h>
38*5842Sgm209912 #include <stdio.h>
392882Svi117747 
402882Svi117747 /* Send a SIP message statefully */
412882Svi117747 #define	SIP_SEND_STATEFUL	0x0001
422882Svi117747 
432882Svi117747 /* Enable multiple dialogs if a request is forked */
442882Svi117747 #define	SIP_DIALOG_ON_FORK	0x0010
452882Svi117747 
462882Svi117747 #define	SIP_CRLF 		"\r\n"
472882Svi117747 #define	SKIP_CRLF(msg_ptr)	(msg_ptr = msg_ptr + 2)
482882Svi117747 #define	SIP_VERSION		"SIP/2.0"
492882Svi117747 #define	SIP			"SIP"
502882Svi117747 
512882Svi117747 /* SIP headers */
522882Svi117747 #define	SIP_TO				"TO"
532882Svi117747 #define	SIP_FROM			"FROM"
542882Svi117747 #define	SIP_TAG				"TAG="
552882Svi117747 #define	SIP_CONTENT_LENGTH		"CONTENT-LENGTH"
562882Svi117747 #define	SIP_CONTENT_TYPE		"CONTENT-TYPE"
572882Svi117747 #define	SIP_CALL_ID			"CALL-ID"
582882Svi117747 #define	SIP_CSEQ			"CSEQ"
592882Svi117747 #define	SIP_MAX_FORWARDS		"MAX-FORWARDS"
602882Svi117747 #define	SIP_CONTACT			"CONTACT"
612882Svi117747 #define	SIP_VIA				"Via"
622882Svi117747 #define	SIP_RECORD_ROUTE		"RECORD-ROUTE"
632882Svi117747 #define	SIP_ROUTE			"ROUTE"
642882Svi117747 #define	SIP_ACCEPT			"ACCEPT"
652882Svi117747 #define	SIP_ACCEPT_ENCODE		"ACCEPT-ENCODING"
662882Svi117747 #define	SIP_ACCEPT_LANG			"ACCEPT-LANGUAGE"
672882Svi117747 #define	SIP_ALERT_INFO			"ALERT-INFO"
682882Svi117747 #define	SIP_ALLOW			"ALLOW"
692882Svi117747 #define	SIP_CALL_INFO			"CALL-INFO"
702882Svi117747 #define	SIP_CONTENT_DIS			"CONTENT-DISPOSITION"
712882Svi117747 #define	SIP_CONTENT_ENCODE		"CONTENT-ENCODING"
722882Svi117747 #define	SIP_CONTENT_LANG		"CONTENT-LANGUAGE"
732882Svi117747 #define	SIP_DATE			"DATE"
742882Svi117747 #define	SIP_ERROR_INFO			"ERROR-INFO"
752882Svi117747 #define	SIP_EXPIRE			"EXPIRES"
762882Svi117747 #define	SIP_IN_REPLY_TO			"IN-REPLY-TO"
772882Svi117747 #define	SIP_MIN_EXPIRE			"MIN-EXPIRES"
782882Svi117747 #define	SIP_MIME_VERSION		"MIME-VERSION"
792882Svi117747 #define	SIP_ORGANIZATION		"ORGANIZATION"
802882Svi117747 #define	SIP_PRIORITY			"PRIORITY"
812882Svi117747 #define	SIP_REQUIRE			"REQUIRE"
822882Svi117747 #define	SIP_REPLYTO			"REPLY-TO"
832882Svi117747 #define	SIP_RETRY_AFTER			"RETRY-AFTER"
842882Svi117747 #define	SIP_SERVER			"SERVER"
852882Svi117747 #define	SIP_SUBJECT			"SUBJECT"
862882Svi117747 #define	SIP_SUPPORT			"SUPPORTED"
872882Svi117747 #define	SIP_TIMESTAMP			"TIMESTAMP"
882882Svi117747 #define	SIP_UNSUPPORT			"UNSUPPORTED"
892882Svi117747 #define	SIP_USER_AGENT			"USER-AGENT"
902882Svi117747 #define	SIP_WARNING			"WARNING"
912882Svi117747 #define	SIP_ALLOW_EVENTS		"ALLOW-EVENTS"
922882Svi117747 #define	SIP_EVENT			"EVENT"
932882Svi117747 #define	SIP_SUBSCRIPTION_STATE		"SUBSCRIPTION-STATE"
942882Svi117747 #define	SIP_WWW_AUTHEN			"WWW-AUTHENTICATE"
952882Svi117747 #define	SIP_AUTHOR			"AUTHORIZATION"
962882Svi117747 #define	SIP_AUTHEN_INFO			"AUTHENTICATION-INFO"
972882Svi117747 #define	SIP_PROXY_AUTHOR		"PROXY-AUTHORIZATION"
982882Svi117747 #define	SIP_PROXY_AUTHEN		"PROXY-AUTHENTICATE"
992882Svi117747 #define	SIP_PROXY_REQ			"PROXY-REQUIRE"
1002882Svi117747 #define	SIP_PASSERTEDID			"P-ASSERTED-IDENTITY"
1012882Svi117747 #define	SIP_PPREFERREDID		"P-PREFERRED-IDENTITY"
1022882Svi117747 #define	SIP_PRIVACY			"PRIVACY"
1032882Svi117747 #define	SIP_RACK			"RACK"
1042882Svi117747 #define	SIP_RSEQ			"RSEQ"
1052882Svi117747 
1062882Svi117747 /* SIP Response Codes */
1072882Svi117747 
1082882Svi117747 /* 1XX - Provisional */
1092882Svi117747 #define	SIP_TRYING			100
1102882Svi117747 #define	SIP_RINGING			180
1112882Svi117747 #define	SIP_CALL_IS_BEING_FORWARDED 	181
1122882Svi117747 #define	SIP_QUEUED			182
1132882Svi117747 #define	SIP_SESSION_PROGRESS		183
1142882Svi117747 
1152882Svi117747 /* 2XX - Success */
1162882Svi117747 #define	SIP_OK				200
1172882Svi117747 #define	SIP_ACCEPTED			202
1182882Svi117747 
1192882Svi117747 /* 3XX - Redirection */
1202882Svi117747 #define	SIP_MULTIPLE_CHOICES		300
1212882Svi117747 #define	SIP_MOVED_PERMANENTLY		301
1222882Svi117747 #define	SIP_MOVED_TEMPORARILY		302
1232882Svi117747 #define	SIP_USE_PROXY			303
1242882Svi117747 #define	SIP_ALTERNATIVE_SERVICE		304
1252882Svi117747 
1262882Svi117747 /* 4XX - Request Failed */
1272882Svi117747 #define	SIP_BAD_REQUEST			400
1282882Svi117747 #define	SIP_UNAUTHORIZED		401
1292882Svi117747 #define	SIP_PAYMENT_REQUIRED		402
1302882Svi117747 #define	SIP_FORBIDDEN			403
1312882Svi117747 #define	SIP_NOT_FOUND			404
1322882Svi117747 #define	SIP_METHOD_NOT_ALLOWED		405
1332882Svi117747 #define	SIP_NOT_ACCEPTABLE		406
1342882Svi117747 #define	SIP_PROXY_AUTH_REQUIRED		407
1352882Svi117747 #define	SIP_REQUEST_TIMEOUT		408
1362882Svi117747 #define	SIP_GONE			410
1372882Svi117747 #define	SIP_REQUEST_ENTITY_2_LARGE	413
1382882Svi117747 #define	SIP_REQUEST_URI_2_LONG		414
1392882Svi117747 #define	SIP_UNSUPPORTED_MEDIA_TYPE	415
1402882Svi117747 #define	SIP_UNSUPPORTED_URI_SCHEME	416
1412882Svi117747 #define	SIP_BAD_EXTENSION		420
1422882Svi117747 #define	SIP_EXTENSION_REQUIRED		421
1432882Svi117747 #define	SIP_INTERVAL_2_BRIEF		423
1442882Svi117747 #define	SIP_TEMPORARILY_UNAVAIL		480
1452882Svi117747 #define	SIP_CALL_NON_EXISTANT		481
1462882Svi117747 #define	SIP_LOOP_DETECTED		482
1472882Svi117747 #define	SIP_TOO_MANY_HOOPS		483
1482882Svi117747 #define	SIP_ADDRESS_INCOMPLETE		484
1492882Svi117747 #define	SIP_AMBIGUOUS			485
1502882Svi117747 #define	SIP_BUSY_HERE			486
1512882Svi117747 #define	SIP_REQUEST_TERMINATED		487
1522882Svi117747 #define	SIP_NOT_ACCEPTABLE_HERE		488
1532882Svi117747 #define	SIP_BAD_EVENT			489
1542882Svi117747 #define	SIP_REQUEST_PENDING		491
1552882Svi117747 #define	SIP_UNDECIPHERABLE		493
1562882Svi117747 
1572882Svi117747 /* 5XX - Server Failure */
1582882Svi117747 #define	SIP_SERVER_INTERNAL_ERROR	500
1592882Svi117747 #define	SIP_NOT_IMPLEMENTED		501
1602882Svi117747 #define	SIP_BAD_GATEWAY			502
1612882Svi117747 #define	SIP_SERVICE_UNAVAILABLE		503
1622882Svi117747 #define	SIP_SERVER_TIMEOUT		504
1632882Svi117747 #define	SIP_VERSION_NOT_SUPPORTED	505
1642882Svi117747 #define	SIP_MESSAGE_2_LARGE		513
1652882Svi117747 
1662882Svi117747 /* 6XX - Global Failures */
1672882Svi117747 #define	SIP_BUSY_EVERYWHERE		600
1682882Svi117747 #define	SIP_DECLINE			601
1692882Svi117747 #define	SIP_DOES_NOT_EXIST_ANYWHERE 	604
1702882Svi117747 #define	SIP_NOT_ACCEPTABLE_ANYWHERE	606
1712882Svi117747 
1722882Svi117747 /* Response error types */
1732882Svi117747 #define	SIP_PROVISIONAL_RESP(resp)	((resp) >= 100 && (resp) < 200)
1742882Svi117747 #define	SIP_FINAL_RESP(resp)		((resp) >= 200 && (resp) < 700)
1752882Svi117747 #define	SIP_OK_RESP(resp)		((resp) >= 200 && (resp) < 300)
1762882Svi117747 #define	SIP_NONOK_FINAL_RESP(resp)	((resp) >= 300 && (resp) < 700)
1772882Svi117747 #define	SIP_REDIRECT_RESP(resp)		((resp) >= 300 && (resp) < 400)
1782882Svi117747 #define	SIP_REQFAIL_RESP(resp)		((resp) >= 400 && (resp) < 500)
1792882Svi117747 #define	SIP_SRVFAIL_RESP(resp)		((resp) >= 500 && (resp) < 600)
1802882Svi117747 #define	SIP_GLOBFAIL_RESP(resp)		((resp) >= 600 && (resp) < 700)
1812882Svi117747 
1822882Svi117747 /* Types of transactions */
1832882Svi117747 #define	SIP_CLIENT_TRANSACTION		1
1842882Svi117747 #define	SIP_SERVER_TRANSACTION		2
1852882Svi117747 
1862882Svi117747 /* Transaction states */
1872882Svi117747 #define	SIP_NEW_TRANSACTION		0
1882882Svi117747 
1892882Svi117747 /* Client Transaction States */
1902882Svi117747 #define	SIP_CLNT_CALLING		1
1912882Svi117747 #define	SIP_CLNT_INV_PROCEEDING 	2
1922882Svi117747 #define	SIP_CLNT_INV_TERMINATED 	3
1932882Svi117747 #define	SIP_CLNT_INV_COMPLETED		4
1942882Svi117747 #define	SIP_CLNT_TRYING		5
1952882Svi117747 #define	SIP_CLNT_NONINV_PROCEEDING 	6
1962882Svi117747 #define	SIP_CLNT_NONINV_TERMINATED 	7
1972882Svi117747 #define	SIP_CLNT_NONINV_COMPLETED	8
1982882Svi117747 
1992882Svi117747 /* Server Transaction States */
2002882Svi117747 #define	SIP_SRV_INV_PROCEEDING		9
2012882Svi117747 #define	SIP_SRV_INV_COMPLETED		10
2022882Svi117747 #define	SIP_SRV_CONFIRMED		11
2032882Svi117747 #define	SIP_SRV_INV_TERMINATED		12
2042882Svi117747 #define	SIP_SRV_TRYING			13
2052882Svi117747 #define	SIP_SRV_NONINV_PROCEEDING	14
2062882Svi117747 #define	SIP_SRV_NONINV_COMPLETED	15
2072882Svi117747 #define	SIP_SRV_NONINV_TERMINATED	16
2082882Svi117747 
2092882Svi117747 /* Dialog types */
2102882Svi117747 #define	SIP_UAC_DIALOG			1
2112882Svi117747 #define	SIP_UAS_DIALOG			2
2122882Svi117747 
2132882Svi117747 /* Dialog state */
2142882Svi117747 typedef enum dialog_state {
2152882Svi117747 	SIP_DLG_NEW = 0,	/* New dialog, no reply received yet */
2162882Svi117747 	SIP_DLG_EARLY,		/* Early dialog, provisional reply received */
2172882Svi117747 	SIP_DLG_CONFIRMED,	/* Confirmed dialog, 2xx reply received */
2182882Svi117747 	SIP_DLG_DESTROYED	/* Destroyed dialog */
2192882Svi117747 } dialog_state_t;
2202882Svi117747 
2212882Svi117747 /* SIP URI parse errors */
2222882Svi117747 #define	SIP_URIERR_SCHEME	0x00000001 /* invalid URL SCHEME name */
2232882Svi117747 #define	SIP_URIERR_USER		0x00000002 /* invalid user name */
2242882Svi117747 #define	SIP_URIERR_PASS		0x00000004 /* invalid password  */
2252882Svi117747 #define	SIP_URIERR_HOST		0x00000008 /* invalid domain name */
2262882Svi117747 #define	SIP_URIERR_PORT		0x00000010 /* invalid port number */
2272882Svi117747 #define	SIP_URIERR_PARAM	0x00000020 /* parameter specific error */
2282882Svi117747 #define	SIP_URIERR_HEADER	0x00000040 /* headers specific error */
2292882Svi117747 #define	SIP_URIERR_OPAQUE	0x00000080 /* opaque specific error */
2302882Svi117747 #define	SIP_URIERR_QUERY	0x00000100 /* query specific error */
2312882Svi117747 #define	SIP_URIERR_PATH		0x00000200 /* path specific error */
2322882Svi117747 #define	SIP_URIERR_REGNAME	0x00000400 /* reg-name specific error */
2332882Svi117747 #define	SIP_URIERR_NOURI	0x00000800 /* No URI */
2342882Svi117747 #define	SIP_URIERR_MEMORY	0x00001000 /* out of memory */
2352882Svi117747 
236*5842Sgm209912 /* SIP traffic counters */
237*5842Sgm209912 typedef enum sip_traffic_counter_names {
238*5842Sgm209912 	SIP_TOTAL_BYTES_RCVD = 0,
239*5842Sgm209912 	SIP_TOTAL_BYTES_SENT,
240*5842Sgm209912 	SIP_TOTAL_REQ_RCVD,
241*5842Sgm209912 	SIP_TOTAL_REQ_SENT,
242*5842Sgm209912 	SIP_TOTAL_RESP_RCVD,
243*5842Sgm209912 	SIP_TOTAL_RESP_SENT,
244*5842Sgm209912 	SIP_ACK_REQ_RCVD,
245*5842Sgm209912 	SIP_ACK_REQ_SENT,
246*5842Sgm209912 	SIP_BYE_REQ_RCVD,
247*5842Sgm209912 	SIP_BYE_REQ_SENT,
248*5842Sgm209912 	SIP_CANCEL_REQ_RCVD,
249*5842Sgm209912 	SIP_CANCEL_REQ_SENT,
250*5842Sgm209912 	SIP_INFO_REQ_RCVD,
251*5842Sgm209912 	SIP_INFO_REQ_SENT,
252*5842Sgm209912 	SIP_INVITE_REQ_RCVD,
253*5842Sgm209912 	SIP_INVITE_REQ_SENT,
254*5842Sgm209912 	SIP_NOTIFY_REQ_RCVD,
255*5842Sgm209912 	SIP_NOTIFY_REQ_SENT,
256*5842Sgm209912 	SIP_OPTIONS_REQ_RCVD,
257*5842Sgm209912 	SIP_OPTIONS_REQ_SENT,
258*5842Sgm209912 	SIP_PRACK_REQ_RCVD,
259*5842Sgm209912 	SIP_PRACK_REQ_SENT,
260*5842Sgm209912 	SIP_REFER_REQ_RCVD,
261*5842Sgm209912 	SIP_REFER_REQ_SENT,
262*5842Sgm209912 	SIP_REGISTER_REQ_RCVD,
263*5842Sgm209912 	SIP_REGISTER_REQ_SENT,
264*5842Sgm209912 	SIP_SUBSCRIBE_REQ_RCVD,
265*5842Sgm209912 	SIP_SUBSCRIBE_REQ_SENT,
266*5842Sgm209912 	SIP_UPDATE_REQ_RCVD,
267*5842Sgm209912 	SIP_UPDATE_REQ_SENT,
268*5842Sgm209912 	SIP_1XX_RESP_RCVD,
269*5842Sgm209912 	SIP_1XX_RESP_SENT,
270*5842Sgm209912 	SIP_2XX_RESP_RCVD,
271*5842Sgm209912 	SIP_2XX_RESP_SENT,
272*5842Sgm209912 	SIP_3XX_RESP_RCVD,
273*5842Sgm209912 	SIP_3XX_RESP_SENT,
274*5842Sgm209912 	SIP_4XX_RESP_RCVD,
275*5842Sgm209912 	SIP_4XX_RESP_SENT,
276*5842Sgm209912 	SIP_5XX_RESP_RCVD,
277*5842Sgm209912 	SIP_5XX_RESP_SENT,
278*5842Sgm209912 	SIP_6XX_RESP_RCVD,
279*5842Sgm209912 	SIP_6xx_RESP_SENT,
280*5842Sgm209912 	SIP_COUNTER_START_TIME,
281*5842Sgm209912 	SIP_COUNTER_STOP_TIME
282*5842Sgm209912 } sip_traffic_counter_names_t;
283*5842Sgm209912 
284*5842Sgm209912 /* SIP Traffic counter group */
285*5842Sgm209912 #define	SIP_TRAFFIC_COUNTERS	0x0001	/* measures end to end SIP traffic */
286*5842Sgm209912 
287*5842Sgm209912 /* SIP Logging Levels */
288*5842Sgm209912 #define	SIP_DETAIL_LOGGING	0x0001	/* logs the entire sip message */
289*5842Sgm209912 
2902882Svi117747 #ifdef		__linux__
2912882Svi117747 #define		B_FALSE		0
2922882Svi117747 #define		B_TRUE		1
2932882Svi117747 
2942882Svi117747 typedef int		boolean_t;
2952882Svi117747 typedef unsigned char	uchar_t;
2962882Svi117747 typedef unsigned int	uint_t;
2972882Svi117747 typedef unsigned int	uint32_t;
2982882Svi117747 #endif
2992882Svi117747 
3002882Svi117747 typedef struct sip_message	*sip_msg_t;
3012882Svi117747 typedef struct sip_header	*sip_header_t;
3022882Svi117747 typedef struct sip_value	*sip_header_value_t;
3032882Svi117747 typedef struct sip_dialog	*sip_dialog_t;
3042882Svi117747 typedef struct sip_uri		*sip_uri_t;
3052882Svi117747 typedef struct sip_conn_object	*sip_conn_object_t;
3062882Svi117747 typedef	struct sip_xaction	*sip_transaction_t;
3072882Svi117747 
3082882Svi117747 typedef struct sip_str {
3092882Svi117747 	char	*sip_str_ptr;
3102882Svi117747 	int	sip_str_len;
3112882Svi117747 }sip_str_t;
3122882Svi117747 
3132882Svi117747 
3142882Svi117747 /* SIP parameter */
3152882Svi117747 typedef struct sip_param {
3162882Svi117747 	sip_str_t	param_name;
3172882Svi117747 	sip_str_t	param_value;
3182882Svi117747 	struct sip_param *param_next;
3192882Svi117747 }sip_param_t;
3202882Svi117747 
3212882Svi117747 
3222882Svi117747 /* Parsed header structure */
3232882Svi117747 typedef struct sip_parsed_header {
3242882Svi117747 	int		 sip_parsed_header_version;
3252882Svi117747 	struct sip_value *value;
3262882Svi117747 	sip_header_t	sip_header;
3272882Svi117747 }sip_parsed_header_t;
3282882Svi117747 
3292882Svi117747 #define	SIP_PARSED_HEADER_VERSION_1	1
3302882Svi117747 
3312882Svi117747 /* Value states */
3322882Svi117747 typedef enum {
3332882Svi117747 	SIP_VALUE_ACTIVE = 0,
3342882Svi117747 	SIP_VALUE_BAD,
3352882Svi117747 	SIP_VALUE_DELETED
3362882Svi117747 }sip_value_state_t;
3372882Svi117747 
3382882Svi117747 /* SIP header value */
3392882Svi117747 typedef struct sip_value {
3402882Svi117747 	int			sip_value_version;
3412882Svi117747 	void			*next;
3422882Svi117747 	sip_param_t		*param_list;
3432882Svi117747 	sip_value_state_t	value_state; /* Active/Deleted */
3442882Svi117747 	sip_parsed_header_t	*parsed_header;
3452882Svi117747 	char			*value_start;
3462882Svi117747 	char			*value_end;
3472882Svi117747 	sip_str_t		*sip_value_uri_str;
3482882Svi117747 	sip_uri_t		sip_value_parse_uri;
3492882Svi117747 }sip_value_t;
3502882Svi117747 
3512882Svi117747 #define	SIP_VALUE_VERSION_1	1
3522882Svi117747 
3532882Svi117747 typedef struct sip_header_general {
3542882Svi117747 	char			*sip_hdr_start;
3552882Svi117747 	char			*sip_hdr_end;
3562882Svi117747 	char			*sip_hdr_current;
3572882Svi117747 	sip_parsed_header_t	*sip_hdr_parsed;
3582882Svi117747 }sip_hdr_general_t;
3592882Svi117747 
3602882Svi117747 /* SIP methods */
3612882Svi117747 typedef enum {
3622882Svi117747 	UNKNOWN = 0,
3632882Svi117747 	INVITE,
3642882Svi117747 	ACK,
3652882Svi117747 	OPTIONS,
3662882Svi117747 	BYE,
3672882Svi117747 	CANCEL,
3682882Svi117747 	REGISTER,
3692882Svi117747 	REFER,
3702882Svi117747 	INFO,
3712882Svi117747 	SUBSCRIBE,
3722882Svi117747 	NOTIFY,
3732882Svi117747 	PRACK
3742882Svi117747 }sip_method_t;
3752882Svi117747 
3762882Svi117747 #define	MAX_SIP_METHODS	12
3772882Svi117747 
3782882Svi117747 typedef struct sip_methods {
3792882Svi117747 	char *name;	/* Name of the method */
3802882Svi117747 	int  len;	/* Length for comparison */
3812882Svi117747 }sip_methods_t;
3822882Svi117747 
3832882Svi117747 extern sip_methods_t sip_methods[];
3842882Svi117747 
3852882Svi117747 /* SIP header function table */
3862882Svi117747 typedef struct header_function_table {
3872882Svi117747 	char		*header_name;
3882882Svi117747 	char		*header_short_name;
3892882Svi117747 	int		(*header_parse_func)(struct sip_header *,
3902882Svi117747 			    struct sip_parsed_header **);
3912882Svi117747 	boolean_t	(*header_check_compliance)(struct sip_parsed_header *);
3922882Svi117747 	boolean_t	(*header_is_equal)(struct sip_parsed_header *,
3932882Svi117747 			    struct sip_parsed_header *);
3942882Svi117747 	void		(*header_free)(struct sip_parsed_header *);
3952882Svi117747 }sip_header_function_t;
3962882Svi117747 
3972882Svi117747 /* Connection Manager interface */
3982882Svi117747 typedef struct sip_io_pointers_s {
3992882Svi117747 	int	(*sip_conn_send)(const sip_conn_object_t, char *, int);
4002882Svi117747 	void	(*sip_hold_conn_object)(sip_conn_object_t);
4012882Svi117747 	void	(*sip_rel_conn_object)(sip_conn_object_t);
4022882Svi117747 	boolean_t	(*sip_conn_is_stream)(sip_conn_object_t);
4032882Svi117747 	boolean_t	(*sip_conn_is_reliable)(sip_conn_object_t);
4042882Svi117747 	int 	(*sip_conn_remote_address)(sip_conn_object_t, struct sockaddr *,
4052882Svi117747 		    socklen_t *);
4062882Svi117747 	int 	(*sip_conn_local_address)(sip_conn_object_t, struct sockaddr *,
4072882Svi117747 		    socklen_t *);
4082882Svi117747 	int	(*sip_conn_transport)(sip_conn_object_t);
4092882Svi117747 	int	(*sip_conn_timer1)(sip_conn_object_t);
4102882Svi117747 	int	(*sip_conn_timer2)(sip_conn_object_t);
4112882Svi117747 	int	(*sip_conn_timer4)(sip_conn_object_t);
4122882Svi117747 	int	(*sip_conn_timerd)(sip_conn_object_t);
4132882Svi117747 }sip_io_pointers_t;
4142882Svi117747 
4152882Svi117747 /* Upper layer registerations */
4162882Svi117747 typedef struct sip_ulp_pointers_s {
4172882Svi117747 	void		(*sip_ulp_recv)(const sip_conn_object_t,
4182882Svi117747 			    sip_msg_t, const sip_dialog_t);
4192882Svi117747 	uint_t		(*sip_ulp_timeout)(void *, void (*func)(void *),
4202882Svi117747 			    struct timeval *);
4212882Svi117747 	boolean_t	(*sip_ulp_untimeout)(uint_t);
4222882Svi117747 	int		(*sip_ulp_trans_error)(sip_transaction_t, int, void *);
4232882Svi117747 	void		(*sip_ulp_dlg_del)(sip_dialog_t, sip_msg_t, void *);
4242882Svi117747 	void		(*sip_ulp_trans_state_cb)(sip_transaction_t,
4252882Svi117747 			    sip_msg_t, int, int);
4262882Svi117747 	void		(*sip_ulp_dlg_state_cb)(sip_dialog_t, sip_msg_t, int,
4272882Svi117747 			    int);
4282882Svi117747 }sip_ulp_pointers_t;
4292882Svi117747 
4302882Svi117747 /* SIP stack initialization structure */
4312882Svi117747 typedef struct sip_stack_init_s {
4322882Svi117747 	int			sip_version;
4332882Svi117747 	int			sip_stack_flags;
4342882Svi117747 	sip_io_pointers_t	*sip_io_pointers;
4352882Svi117747 	sip_ulp_pointers_t	*sip_ulp_pointers;
4362882Svi117747 	sip_header_function_t	*sip_function_table;
4372882Svi117747 }sip_stack_init_t;
4382882Svi117747 
4392882Svi117747 /* SIP stack version */
4402882Svi117747 #define	SIP_STACK_VERSION		1
4412882Svi117747 
4422882Svi117747 /* Flags for sip_stack_flags */
4432882Svi117747 #define	SIP_STACK_DIALOGS		0x0001
4442882Svi117747 
4452882Svi117747 extern int		sip_init_conn_object(sip_conn_object_t);
4462882Svi117747 extern void		sip_clear_stale_data(sip_conn_object_t);
4472882Svi117747 extern void		sip_conn_destroyed(sip_conn_object_t);
4482882Svi117747 
4492882Svi117747 extern int		(*sip_stack_send)(const sip_conn_object_t, char *, int);
4502882Svi117747 extern void		(*sip_refhold_conn)(sip_conn_object_t);
4512882Svi117747 extern void		(*sip_refrele_conn)(sip_conn_object_t);
4522882Svi117747 extern boolean_t	(*sip_is_conn_stream)(sip_conn_object_t);
4532882Svi117747 extern boolean_t	(*sip_is_conn_reliable)(sip_conn_object_t);
4542882Svi117747 extern int 		(*sip_conn_rem_addr)(sip_conn_object_t,
4552882Svi117747 			    struct sockaddr *, socklen_t *);
4562882Svi117747 extern int		(*sip_conn_local_addr)(sip_conn_object_t,
4572882Svi117747 			    struct sockaddr *, socklen_t *);
4582882Svi117747 extern int		(*sip_conn_transport)(sip_conn_object_t);
4592882Svi117747 extern int		(*sip_conn_timer1)(sip_conn_object_t);
4602882Svi117747 extern int		(*sip_conn_timer2)(sip_conn_object_t);
4612882Svi117747 extern int		(*sip_conn_timer4)(sip_conn_object_t);
4622882Svi117747 extern int		(*sip_conn_timerd)(sip_conn_object_t);
4632882Svi117747 
4642882Svi117747 extern uint_t		(*sip_stack_timeout)(void *, void (*func)(void *),
4652882Svi117747 			    struct timeval *);
4662882Svi117747 extern boolean_t	(*sip_stack_untimeout)(uint_t);
4672882Svi117747 
4682882Svi117747 extern sip_msg_t	sip_new_msg();
4692882Svi117747 extern void		sip_free_msg(sip_msg_t);
4702882Svi117747 extern void		sip_hold_msg(sip_msg_t);
4712882Svi117747 extern int		sip_stack_init(sip_stack_init_t *);
4722882Svi117747 extern int		sip_sendmsg(sip_conn_object_t, sip_msg_t, sip_dialog_t,
4732882Svi117747 			    uint32_t);
4742882Svi117747 extern void		sip_process_new_packet(sip_conn_object_t, void *,
4752882Svi117747 			    size_t);
4762882Svi117747 extern char 		*sip_guid();
4772882Svi117747 extern char		*sip_sent_by_to_str(int *);
4782882Svi117747 extern int		sip_register_sent_by(char *);
4792882Svi117747 extern void		sip_unregister_sent_by(char *);
4802882Svi117747 extern void		sip_unregister_all_sent_by();
4812882Svi117747 extern char 		*sip_branchid(sip_msg_t);
4822882Svi117747 extern uint32_t		sip_get_cseq();
4832882Svi117747 extern uint32_t		sip_get_rseq();
4842882Svi117747 extern int		sip_get_num_via(sip_msg_t, int *);
4852882Svi117747 
4862882Svi117747 extern int 		sip_add_from(sip_msg_t, char *, char *, char *,
4872882Svi117747 			    boolean_t, char *);
4882882Svi117747 extern int 		sip_add_to(sip_msg_t, char *, char *, char *,
4892882Svi117747 			    boolean_t, char *);
4902882Svi117747 extern int 		sip_add_response_line(sip_msg_t, int, char *);
4912882Svi117747 extern int 		sip_add_request_line(sip_msg_t, sip_method_t, char *);
4922882Svi117747 extern int 		sip_add_via(sip_msg_t, char *, char *, int, char *);
4932882Svi117747 extern int 		sip_add_maxforward(sip_msg_t, uint_t);
4942882Svi117747 extern int 		sip_add_callid(sip_msg_t, char *);
4952882Svi117747 extern int 		sip_add_cseq(sip_msg_t, sip_method_t, uint32_t);
4962882Svi117747 extern int 		sip_add_content_type(sip_msg_t, char *, char *);
4972882Svi117747 extern int 		sip_add_content(sip_msg_t, char *);
4982882Svi117747 extern int 		sip_add_contact(sip_msg_t, char *, char *, boolean_t,
4992882Svi117747 			    char *);
5002882Svi117747 extern int 		sip_add_route(sip_msg_t, char *, char *, char *);
5012882Svi117747 extern int 		sip_add_record_route(sip_msg_t, char *, char *, char *);
5022882Svi117747 extern int 		sip_add_branchid_to_via(sip_msg_t, char *);
5032882Svi117747 extern int 		sip_add_accept(sip_msg_t, char *, char *, char *,
5042882Svi117747 			    char *);
5052882Svi117747 extern int		sip_add_author(sip_msg_t, char *,  char *);
5062882Svi117747 extern int		sip_add_authen_info(sip_msg_t, char *);
5072882Svi117747 extern int		sip_add_proxy_authen(sip_msg_t, char *,  char *);
5082882Svi117747 extern int		sip_add_proxy_author(sip_msg_t, char *, char *);
5092882Svi117747 extern int		sip_add_proxy_require(sip_msg_t, char *);
5102882Svi117747 extern int		sip_add_www_authen(sip_msg_t, char *, char *);
5112882Svi117747 extern int		sip_add_accept_enc(sip_msg_t, char *, char *);
5122882Svi117747 extern int		sip_add_accept_lang(sip_msg_t, char *, char *);
5132882Svi117747 extern int		sip_add_alert_info(sip_msg_t, char *, char *);
5142882Svi117747 extern int		sip_add_allow(sip_msg_t, sip_method_t);
5152882Svi117747 extern int		sip_add_call_info(sip_msg_t, char *, char *);
5162882Svi117747 extern int		sip_add_content_disp(sip_msg_t, char *, char *);
5172882Svi117747 extern int		sip_add_content_enc(sip_msg_t, char *);
5182882Svi117747 extern int		sip_add_content_lang(sip_msg_t, char *);
5192882Svi117747 extern int		sip_add_date(sip_msg_t, char *);
5202882Svi117747 extern int		sip_add_error_info(sip_msg_t, char *, char *);
5212882Svi117747 extern int		sip_add_expires(sip_msg_t, int);
5222882Svi117747 extern int		sip_add_in_reply_to(sip_msg_t, char *);
5232882Svi117747 extern int		sip_add_mime_version(sip_msg_t, char *);
5242882Svi117747 extern int		sip_add_min_expires(sip_msg_t, int);
5252882Svi117747 extern int		sip_add_org(sip_msg_t, char *);
5262882Svi117747 extern int		sip_add_priority(sip_msg_t, char *);
5272882Svi117747 extern int		sip_add_reply_to(sip_msg_t, char *, char *, char *,
5282882Svi117747 			    boolean_t);
5292882Svi117747 extern int		sip_add_require(sip_msg_t, char *);
5302882Svi117747 extern int		sip_add_retry_after(sip_msg_t, int, char *, char *);
5312882Svi117747 extern int		sip_add_server(sip_msg_t, char *);
5322882Svi117747 extern int		sip_add_subject(sip_msg_t, char *);
5332882Svi117747 extern int		sip_add_supported(sip_msg_t, char *);
5342882Svi117747 extern int		sip_add_tstamp(sip_msg_t, char *, char *);
5352882Svi117747 extern int		sip_add_unsupported(sip_msg_t, char *);
5362882Svi117747 extern int		sip_add_user_agent(sip_msg_t, char *);
5372882Svi117747 extern int		sip_add_warning(sip_msg_t, int, char *, char *);
5382882Svi117747 extern int		sip_add_allow_events(sip_msg_t, char *);
5392882Svi117747 extern int		sip_add_event(sip_msg_t, char *, char *);
5402882Svi117747 extern int		sip_add_substate(sip_msg_t, char *, char *);
5412882Svi117747 extern int		sip_add_privacy(sip_msg_t, char *);
5422882Svi117747 extern int		sip_add_passertedid(sip_msg_t, char *, char *,
5432882Svi117747 			    boolean_t);
5442882Svi117747 extern int		sip_add_ppreferredid(sip_msg_t, char *, char *,
5452882Svi117747 			    boolean_t);
5462882Svi117747 extern int		sip_add_rack(sip_msg_t, int, int, sip_method_t);
5472882Svi117747 extern int		sip_add_rseq(sip_msg_t, int);
5482882Svi117747 extern const sip_str_t *sip_get_author_scheme(sip_msg_t, int *);
5492882Svi117747 extern const sip_str_t *sip_get_author_param(sip_msg_t, char *, int *);
5502882Svi117747 extern const sip_str_t *sip_get_authen_info(sip_header_value_t, int *);
5512882Svi117747 extern const sip_str_t *sip_get_proxy_authen_scheme(sip_msg_t, int *);
5522882Svi117747 extern const sip_str_t *sip_get_proxy_authen_param(sip_msg_t, char *, int *);
5532882Svi117747 extern const sip_str_t *sip_get_proxy_author_scheme(sip_msg_t, int *);
5542882Svi117747 extern const sip_str_t *sip_get_proxy_author_param(sip_msg_t, char *, int *);
5552882Svi117747 extern const sip_str_t *sip_get_proxy_require(sip_header_value_t, int *);
5562882Svi117747 extern const sip_str_t *sip_get_www_authen_scheme(sip_msg_t, int *);
5572882Svi117747 extern const sip_str_t *sip_get_www_authen_param(sip_msg_t, char *, int *);
5582882Svi117747 extern const sip_str_t	*sip_get_allow_events(sip_header_value_t, int *);
5592882Svi117747 extern const sip_str_t	*sip_get_event(sip_msg_t, int *);
5602882Svi117747 extern const sip_str_t	*sip_get_substate(sip_msg_t, int *);
5612882Svi117747 extern const sip_str_t	*sip_get_accept_type(sip_header_value_t, int *);
5622882Svi117747 extern const sip_str_t	*sip_get_accept_sub_type(sip_header_value_t, int *);
5632882Svi117747 extern const sip_str_t	*sip_get_accept_enc(sip_header_value_t, int *);
5642882Svi117747 extern const sip_str_t	*sip_get_accept_lang(sip_header_value_t, int *);
5652882Svi117747 extern const sip_str_t	*sip_get_alert_info_uri(sip_header_value_t, int *);
5662882Svi117747 extern sip_method_t	sip_get_allow_method(sip_header_value_t, int *);
5672882Svi117747 extern int		sip_get_min_expires(sip_msg_t, int *);
5682882Svi117747 extern const sip_str_t	*sip_get_mime_version(sip_msg_t, int *);
5692882Svi117747 extern const sip_str_t	*sip_get_org(sip_msg_t, int *);
5702882Svi117747 extern const sip_str_t	*sip_get_priority(sip_msg_t, int *);
5712882Svi117747 extern const sip_str_t	*sip_get_replyto_display_name(sip_msg_t, int *);
5722882Svi117747 extern const sip_str_t	*sip_get_replyto_uri_str(sip_msg_t, int *);
5732882Svi117747 extern const sip_str_t	*sip_get_date_time(sip_msg_t, int *);
5742882Svi117747 extern int		sip_get_date_day(sip_msg_t, int *);
5752882Svi117747 extern const sip_str_t	*sip_get_date_month(sip_msg_t, int *);
5762882Svi117747 extern const sip_str_t	*sip_get_date_wkday(sip_msg_t, int *);
5772882Svi117747 extern int		sip_get_date_year(sip_msg_t, int *);
5782882Svi117747 extern const sip_str_t	*sip_get_date_timezone(sip_msg_t, int *);
5792882Svi117747 extern const sip_str_t	*sip_get_content_disp(sip_msg_t, int *);
5802882Svi117747 extern const sip_str_t	*sip_get_content_lang(sip_header_value_t, int *);
5812882Svi117747 extern const sip_str_t	*sip_get_content_enc(sip_header_value_t, int *);
5822882Svi117747 extern const sip_str_t	*sip_get_error_info_uri(sip_header_value_t, int *);
5832882Svi117747 extern int		sip_get_expires(sip_msg_t, int *);
5842882Svi117747 extern const sip_str_t	*sip_get_require(sip_header_value_t, int *);
5852882Svi117747 extern const sip_str_t	*sip_get_subject(sip_msg_t, int *);
5862882Svi117747 extern const sip_str_t	*sip_get_supported(sip_header_value_t, int *);
5872882Svi117747 extern const sip_str_t	*sip_get_tstamp_delay(sip_msg_t, int *);
5882882Svi117747 extern const sip_str_t	*sip_get_tstamp_value(sip_msg_t, int *);
5892882Svi117747 extern const sip_str_t	*sip_get_unsupported(sip_header_value_t, int *);
5902882Svi117747 extern const sip_str_t	*sip_get_server(sip_msg_t, int *);
5912882Svi117747 extern const sip_str_t	*sip_get_user_agent(sip_msg_t, int *);
5922882Svi117747 extern int		sip_get_warning_code(sip_header_value_t, int *);
5932882Svi117747 extern const sip_str_t	*sip_get_warning_agent(sip_header_value_t, int *);
5942882Svi117747 extern const sip_str_t	*sip_get_warning_text(sip_header_value_t, int *);
5952882Svi117747 extern const sip_str_t	*sip_get_call_info_uri(sip_header_value_t, int *);
5962882Svi117747 extern const sip_str_t	*sip_get_in_reply_to(sip_header_value_t, int *);
5972882Svi117747 extern int		sip_get_retry_after_time(sip_msg_t, int *);
5982882Svi117747 extern const sip_str_t	*sip_get_retry_after_cmts(sip_msg_t, int *);
5992882Svi117747 extern const sip_str_t	*sip_get_passertedid_display_name(sip_header_value_t,
6002882Svi117747 			    int *);
6012882Svi117747 extern const sip_str_t	*sip_get_passertedid_uri_str(sip_header_value_t,
6022882Svi117747 			    int *);
6032882Svi117747 extern const sip_str_t	*sip_get_ppreferredid_display_name(sip_header_value_t,
6042882Svi117747 			    int *);
6052882Svi117747 extern const sip_str_t	*sip_get_ppreferredid_uri_str(sip_header_value_t,
6062882Svi117747 			    int *);
6072882Svi117747 extern const sip_str_t	*sip_get_priv_value(sip_header_value_t, int *);
6082882Svi117747 extern int		sip_get_rack_resp_num(sip_msg_t, int *);
6092882Svi117747 extern int		sip_get_rack_cseq_num(sip_msg_t, int *);
6102882Svi117747 extern sip_method_t	sip_get_rack_method(sip_msg_t, int *);
6112882Svi117747 extern int		sip_get_rseq_resp_num(sip_msg_t, int *);
6122882Svi117747 
6132882Svi117747 extern int		sip_copy_start_line(sip_msg_t, sip_msg_t);
6142882Svi117747 extern int		sip_delete_start_line(sip_msg_t sip_msg);
6152882Svi117747 extern int		sip_copy_header(sip_msg_t, sip_header_t, char *);
6162882Svi117747 extern int		sip_copy_header_by_name(sip_msg_t, sip_msg_t, char *,
6172882Svi117747 			    char *);
6182882Svi117747 extern int		sip_copy_all_headers(sip_msg_t, sip_msg_t);
6192882Svi117747 extern int		sip_delete_header_by_name(sip_msg_t, char *);
6202882Svi117747 extern int		sip_add_header(sip_msg_t, char *);
6212882Svi117747 extern sip_header_t	sip_add_param(sip_header_t, char *, int *);
6222882Svi117747 extern int		sip_delete_header(sip_header_t);
6232882Svi117747 extern int		sip_delete_value(sip_header_t, sip_header_value_t);
6242882Svi117747 extern sip_msg_t	sip_clone_msg(const sip_msg_t);
6252882Svi117747 extern sip_msg_t	sip_create_response(const sip_msg_t, int, char *,
6262882Svi117747 			    char *, char *);
6272882Svi117747 extern int		sip_create_OKack(const sip_msg_t, sip_msg_t, char *,
6282882Svi117747 			    char *, int, char *);
6292882Svi117747 extern char 		*sip_get_resp_desc(int);
6302882Svi117747 extern char		*sip_get_branchid(const sip_msg_t, int *);
6312882Svi117747 
6322882Svi117747 extern const struct sip_header	*sip_get_header(sip_msg_t, char *, sip_header_t,
6332882Svi117747 				    int *);
6342882Svi117747 extern const struct sip_value	*sip_get_header_value(
6352882Svi117747 				    const struct sip_header *, int *);
6362882Svi117747 extern const struct sip_value	*sip_get_next_value(sip_header_value_t, int *);
6372882Svi117747 extern const sip_str_t		*sip_get_param_value(sip_header_value_t,
6382882Svi117747 				    char *, int *);
6392882Svi117747 extern const sip_param_t	*sip_get_params(sip_header_value_t, int *);
6402882Svi117747 extern boolean_t		sip_is_param_present(const sip_param_t *,
6412882Svi117747 				    char *, int);
6422882Svi117747 
6432882Svi117747 extern char		*sip_msg_to_str(sip_msg_t, int *);
6442882Svi117747 extern char		*sip_hdr_to_str(sip_header_t, int *);
6452882Svi117747 extern char		*sip_reqline_to_str(sip_msg_t, int *);
6462882Svi117747 extern char		*sip_respline_to_str(sip_msg_t, int *);
6472882Svi117747 extern boolean_t	sip_msg_is_request(const sip_msg_t, int *);
6482882Svi117747 extern boolean_t	sip_msg_is_response(const sip_msg_t, int *);
6492882Svi117747 extern sip_method_t	sip_get_request_method(const sip_msg_t, int *);
6502882Svi117747 extern const sip_str_t	*sip_get_request_uri_str(sip_msg_t, int *);
6512882Svi117747 extern int		sip_get_response_code(sip_msg_t, int *);
6522882Svi117747 extern const sip_str_t	*sip_get_response_phrase(sip_msg_t, int *);
6532882Svi117747 extern const sip_str_t	*sip_get_sip_version(sip_msg_t, int *);
6542882Svi117747 extern int		sip_get_msg_len(sip_msg_t, int *);
6552882Svi117747 extern const sip_str_t	*sip_get_route_uri_str(sip_header_value_t, int *);
6562882Svi117747 extern const sip_str_t	*sip_get_route_display_name(sip_header_value_t, int *);
6572882Svi117747 extern const sip_str_t	*sip_get_contact_uri_str(sip_header_value_t, int *);
6582882Svi117747 extern const sip_str_t	*sip_get_contact_display_name(sip_header_value_t,
6592882Svi117747 			    int *);
6602882Svi117747 extern const sip_str_t	*sip_get_from_uri_str(sip_msg_t, int *);
6612882Svi117747 extern const sip_str_t	*sip_get_from_display_name(sip_msg_t, int *);
6622882Svi117747 extern const sip_str_t	*sip_get_from_tag(sip_msg_t, int *);
6632882Svi117747 extern const sip_str_t	*sip_get_to_uri_str(sip_msg_t, int *);
6642882Svi117747 extern const sip_str_t	*sip_get_to_display_name(sip_msg_t, int *);
6652882Svi117747 extern const sip_str_t	*sip_get_to_tag(sip_msg_t, int *);
6662882Svi117747 extern const sip_str_t	*sip_get_callid(sip_msg_t, int *);
6672882Svi117747 extern int		sip_get_callseq_num(sip_msg_t, int *);
6682882Svi117747 extern sip_method_t	sip_get_callseq_method(sip_msg_t, int *);
6692882Svi117747 extern const sip_str_t	*sip_get_via_sent_by_host(sip_header_value_t, int *);
6702882Svi117747 extern int		sip_get_via_sent_by_port(sip_header_value_t, int *);
6712882Svi117747 extern const sip_str_t	*sip_get_via_sent_protocol_version(sip_header_value_t,
6722882Svi117747 			    int *);
6732882Svi117747 extern const sip_str_t	*sip_get_via_sent_protocol_name(sip_header_value_t,
6742882Svi117747 			    int *);
6752882Svi117747 extern const sip_str_t	*sip_get_via_sent_transport(sip_header_value_t,
6762882Svi117747 			    int *);
6772882Svi117747 extern int 		sip_get_maxforward(sip_msg_t, int *);
6782882Svi117747 extern int 		sip_get_content_length(sip_msg_t, int *);
6792882Svi117747 extern const sip_str_t	*sip_get_content_type(sip_msg_t, int *);
6802882Svi117747 extern const sip_str_t	*sip_get_content_sub_type(sip_msg_t, int *);
6812882Svi117747 extern char		*sip_get_content(sip_msg_t, int *);
6822882Svi117747 extern sip_msg_t	sip_create_dialog_req(sip_method_t, sip_dialog_t,
6832882Svi117747 			    char *, char *, int, char *, uint32_t, int);
6845092Sgm209912 extern sip_msg_t	sip_create_dialog_req_nocontact(sip_method_t,
6855092Sgm209912 			    sip_dialog_t, char *, char *, int, char *,
6865092Sgm209912 			    uint32_t, int);
6872882Svi117747 extern int			sip_get_dialog_state(sip_dialog_t, int *);
6882882Svi117747 extern int			sip_get_dialog_method(sip_dialog_t, int *);
689*5842Sgm209912 extern int			sip_get_dialog_msgcnt(sip_dialog_t, int *);
6902882Svi117747 extern const sip_str_t		*sip_get_dialog_callid(sip_dialog_t, int *);
6912882Svi117747 extern const sip_str_t		*sip_get_dialog_local_tag(sip_dialog_t, int *);
6922882Svi117747 extern const sip_str_t		*sip_get_dialog_remote_tag(sip_dialog_t, int *);
6932882Svi117747 extern const struct sip_uri	*sip_get_dialog_local_uri(sip_dialog_t, int *);
6942882Svi117747 extern const struct sip_uri	*sip_get_dialog_remote_uri(sip_dialog_t, int *);
6952882Svi117747 extern const struct sip_uri	*sip_get_dialog_remote_target_uri(sip_dialog_t,
6962882Svi117747 				    int *);
6975092Sgm209912 extern const struct sip_uri	*sip_get_dialog_local_contact_uri(sip_dialog_t,
6985092Sgm209912 				    int *);
6992882Svi117747 extern const sip_str_t		*sip_get_dialog_route_set(sip_dialog_t, int *);
7002882Svi117747 extern boolean_t		sip_is_dialog_secure(sip_dialog_t, int *);
7012882Svi117747 extern uint32_t			sip_get_dialog_local_cseq(sip_dialog_t, int *);
7022882Svi117747 extern uint32_t			sip_get_dialog_remote_cseq(sip_dialog_t, int *);
7032882Svi117747 extern int			sip_get_dialog_type(sip_dialog_t dialog, int *);
7042882Svi117747 
7052882Svi117747 extern void			sip_hold_dialog(sip_dialog_t);
7062882Svi117747 extern void			sip_release_dialog(sip_dialog_t);
7072882Svi117747 extern void			sip_delete_dialog(sip_dialog_t);
7082882Svi117747 
7092882Svi117747 extern sip_uri_t		sip_parse_uri(sip_str_t *, int *);
7102882Svi117747 extern void			sip_free_parsed_uri(sip_uri_t);
7112882Svi117747 extern boolean_t		sip_is_sipuri(const struct sip_uri *);
7122882Svi117747 extern const sip_str_t		*sip_get_uri_scheme(const struct sip_uri *,
7132882Svi117747 				    int *);
7142882Svi117747 extern const sip_str_t		*sip_get_uri_user(const struct sip_uri *,
7152882Svi117747 				    int *);
7162882Svi117747 extern const sip_str_t		*sip_get_uri_password(const struct sip_uri *,
7172882Svi117747 				    int *);
7182882Svi117747 extern const sip_str_t		*sip_get_uri_host(const struct sip_uri *,
7192882Svi117747 				    int *);
7202882Svi117747 extern int			sip_get_uri_port(const struct sip_uri *,
7212882Svi117747 				    int *error);
7222882Svi117747 extern const sip_param_t	*sip_get_uri_params(const struct sip_uri *,
7232882Svi117747 				    int *);
7242882Svi117747 extern const sip_str_t		*sip_get_uri_headers(const struct sip_uri *,
7252882Svi117747 				    int *);
7262882Svi117747 extern const sip_str_t		*sip_get_uri_opaque(const struct sip_uri *,
7272882Svi117747 				    int *);
7282882Svi117747 extern const sip_str_t		*sip_get_uri_query(const struct sip_uri *,
7292882Svi117747 				    int *);
7302882Svi117747 extern const sip_str_t		*sip_get_uri_path(const struct sip_uri *,
7312882Svi117747 				    int *);
7322882Svi117747 extern const sip_str_t		*sip_get_uri_regname(const struct sip_uri *,
7332882Svi117747 				    int *);
7342882Svi117747 extern boolean_t		sip_is_uri_teluser(const struct sip_uri *);
7352882Svi117747 extern int			sip_get_uri_errflags(const struct sip_uri *,
7362882Svi117747 				    int *);
7372882Svi117747 extern char			*sip_uri_errflags_to_str(int);
7382882Svi117747 
7392882Svi117747 extern const struct sip_uri	*sip_get_request_uri(sip_msg_t, int *);
7402882Svi117747 extern const struct sip_uri	*sip_get_uri_parsed(sip_header_value_t, int *);
7412882Svi117747 
7422882Svi117747 /* Transaction functions */
7432882Svi117747 extern const struct sip_xaction	*sip_get_trans(sip_msg_t, int, int *);
7442882Svi117747 extern char 			*sip_get_trans_branchid(sip_transaction_t,
7452882Svi117747 				    int *);
7462882Svi117747 extern sip_method_t		sip_get_trans_method(sip_transaction_t,
7472882Svi117747 				    int *);
7482882Svi117747 extern int			sip_get_trans_state(sip_transaction_t, int *);
7492882Svi117747 extern const struct sip_message	*sip_get_trans_resp_msg(sip_transaction_t,
7502882Svi117747 				    int *);
7512882Svi117747 extern const struct sip_message	*sip_get_trans_orig_msg(sip_transaction_t,
7522882Svi117747 				    int *);
7532882Svi117747 extern void			sip_hold_trans(sip_transaction_t);
7542882Svi117747 extern void			sip_release_trans(sip_transaction_t);
7552882Svi117747 extern const struct sip_conn_object	*sip_get_trans_conn_obj(
7562882Svi117747 					    sip_transaction_t, int *);
757*5842Sgm209912 
758*5842Sgm209912 /* Logging functions */
759*5842Sgm209912 extern int			sip_enable_trans_logging(FILE *, int);
760*5842Sgm209912 extern int			sip_enable_dialog_logging(FILE *, int);
761*5842Sgm209912 extern void			sip_disable_trans_logging();
762*5842Sgm209912 extern void			sip_disable_dialog_logging();
763*5842Sgm209912 
764*5842Sgm209912 /* Traffic measurement functions */
765*5842Sgm209912 extern int		sip_get_counter_value(int, int, void *, size_t);
766*5842Sgm209912 extern int		sip_enable_counters(int);
767*5842Sgm209912 extern int		sip_disable_counters(int);
768*5842Sgm209912 
769*5842Sgm209912 
7702882Svi117747 #ifdef	__cplusplus
7712882Svi117747 }
7722882Svi117747 #endif
7732882Svi117747 
7742882Svi117747 #endif	/* _SIP_H */
775