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