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*3439Svi117747 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 242882Svi117747 * Use is subject to license terms. 252882Svi117747 */ 262882Svi117747 272882Svi117747 #ifndef _SIP_MSG_H 282882Svi117747 #define _SIP_MSG_H 292882Svi117747 302882Svi117747 #pragma ident "%Z%%M% %I% %E% SMI" 312882Svi117747 322882Svi117747 #ifdef __cplusplus 332882Svi117747 extern "C" { 342882Svi117747 #endif 352882Svi117747 36*3439Svi117747 #include <pthread.h> 372882Svi117747 #include <sip.h> 38*3439Svi117747 #include <sys/types.h> 392882Svi117747 402882Svi117747 #ifdef __solaris__ 412882Svi117747 extern int mutex_held(); 422882Svi117747 #endif 432882Svi117747 442882Svi117747 extern sip_header_function_t *sip_header_function_table_external; 452882Svi117747 462882Svi117747 /* Compare Cseq numbers */ 472882Svi117747 #define SIP_CSEQ_LT(a, b) ((int32_t)((a)-(b)) < 0) 482882Svi117747 #define SIP_CSEQ_GT(a, b) ((int32_t)((a)-(b)) > 0) 492882Svi117747 #define SIP_CSEQ_GEQ(a, b) ((int32_t)((a)-(b)) >= 0) 502882Svi117747 512882Svi117747 #define SIP_HEADER_ACTIVE 0x0 522882Svi117747 #define SIP_HEADER_DELETED 0x1 532882Svi117747 #define SIP_HEADER_DELETED_VAL 0x2 542882Svi117747 552882Svi117747 /* List of registered sent-by values */ 562882Svi117747 typedef struct sent_by_list_s { 572882Svi117747 struct sent_by_list_s *sb_next; 582882Svi117747 struct sent_by_list_s *sb_prev; 592882Svi117747 char *sb_val; 602882Svi117747 } sent_by_list_t; 612882Svi117747 622882Svi117747 extern sent_by_list_t *sip_sent_by; 632882Svi117747 extern int sip_sent_by_count; 642882Svi117747 extern pthread_mutex_t sip_sent_by_lock; 652882Svi117747 662882Svi117747 typedef struct sip_header { 672882Svi117747 sip_hdr_general_t sip_hdr_general; 682882Svi117747 /* active/deleted or has deleted val */ 692882Svi117747 int sip_header_state; 702882Svi117747 struct sip_header *sip_hdr_next; 712882Svi117747 struct sip_header *sip_hdr_prev; 722882Svi117747 struct sip_message *sip_hdr_sipmsg; 732882Svi117747 /* True if header was allocated */ 742882Svi117747 boolean_t sip_hdr_allocated; 752882Svi117747 sip_header_function_t *sip_header_functions; 762882Svi117747 }_sip_header_t; 772882Svi117747 782882Svi117747 /* Structure for the SIP message body */ 792882Svi117747 typedef struct sip_content { 802882Svi117747 char *sip_content_start; 812882Svi117747 char *sip_content_end; 822882Svi117747 char *sip_content_current; 832882Svi117747 struct sip_content *sip_content_next; 842882Svi117747 boolean_t sip_content_allocated; 852882Svi117747 }sip_content_t; 862882Svi117747 872882Svi117747 882882Svi117747 /* General definitions */ 892882Svi117747 902882Svi117747 /* Two string values */ 912882Svi117747 typedef struct sip_2strs { 922882Svi117747 sip_str_t s1; 932882Svi117747 sip_str_t s2; 942882Svi117747 }sip_2strs_t; 952882Svi117747 962882Svi117747 /* An integer and a string value */ 972882Svi117747 typedef struct sip_intstr { 982882Svi117747 int i; 992882Svi117747 sip_str_t s; 1002882Svi117747 } sip_intstr_t; 1012882Svi117747 1022882Svi117747 /* Warn value */ 1032882Svi117747 typedef struct sip_warn { 1042882Svi117747 int code; 1052882Svi117747 sip_str_t agt; 1062882Svi117747 sip_str_t text; 1072882Svi117747 } sip_warn_t; 1082882Svi117747 1092882Svi117747 /* Date value */ 1102882Svi117747 typedef struct sip_date { 1112882Svi117747 sip_str_t t; 1122882Svi117747 int d; 1132882Svi117747 sip_str_t m; 1142882Svi117747 int y; 1152882Svi117747 sip_str_t tz; 1162882Svi117747 sip_str_t wd; 1172882Svi117747 } sip_date_t; 1182882Svi117747 1192882Svi117747 /* Authorization and authentication value */ 1202882Svi117747 typedef struct sip_auth { 1212882Svi117747 sip_str_t scheme; 1222882Svi117747 sip_param_t *param; 1232882Svi117747 } sip_auth_t; 1242882Svi117747 1252882Svi117747 /* RACK value */ 1262882Svi117747 typedef struct sip_rack { 1272882Svi117747 int rack_resp_num; 1282882Svi117747 int rack_cseq_num; 1292882Svi117747 sip_method_t rack_method; 1302882Svi117747 }sip_rack_t; 1312882Svi117747 1322882Svi117747 /* Cseq value */ 1332882Svi117747 typedef struct sip_cseq { 1342882Svi117747 int num; 1352882Svi117747 sip_method_t method; 1362882Svi117747 } sip_cseq_value_t; 1372882Svi117747 1382882Svi117747 /* Value for Contact, From and To header */ 1392882Svi117747 typedef struct cftr_value { 1402882Svi117747 sip_str_t *display_name; 1412882Svi117747 sip_str_t uri; 1422882Svi117747 } sip_cftr_value_t; 1432882Svi117747 1442882Svi117747 /* SIP name/version/transport value in Via */ 1452882Svi117747 typedef struct sip_proto_version_s { 1462882Svi117747 sip_str_t name; 1472882Svi117747 sip_str_t version; 1482882Svi117747 sip_str_t transport; 1492882Svi117747 }sip_proto_version_t; 1502882Svi117747 1512882Svi117747 /* Via value */ 1522882Svi117747 typedef struct via_value { 1532882Svi117747 sip_proto_version_t sent_protocol; 1542882Svi117747 sip_str_t sent_by_host; 1552882Svi117747 int sent_by_port; 1562882Svi117747 }sip_via_value_t; 1572882Svi117747 1582882Svi117747 typedef struct sip_hdr_value { 1592882Svi117747 sip_value_t sip_value; 1602882Svi117747 union { 1612882Svi117747 int i; 1622882Svi117747 sip_str_t str; 1632882Svi117747 sip_2strs_t strs; 1642882Svi117747 sip_intstr_t intstr; 1652882Svi117747 sip_warn_t warn; 1662882Svi117747 sip_date_t date; 1672882Svi117747 sip_auth_t auth; 1682882Svi117747 sip_rack_t rack; 1692882Svi117747 sip_cseq_value_t cseq; 1702882Svi117747 sip_cftr_value_t cftr; 1712882Svi117747 sip_via_value_t via; 1722882Svi117747 } hdr_value; 1732882Svi117747 } sip_hdr_value_t; 1742882Svi117747 1752882Svi117747 /* 1762882Svi117747 * NOTE: ALL value structs MUST have sip_value_t as the first field. 1772882Svi117747 */ 1782882Svi117747 #define sip_value_version sip_value.sip_value_version 1792882Svi117747 #define sip_next_value sip_value.next 1802882Svi117747 #define sip_param_list sip_value.param_list 1812882Svi117747 #define sip_value_state sip_value.value_state 1822882Svi117747 #define sip_value_header sip_value.parsed_header 1832882Svi117747 #define sip_value_start sip_value.value_start 1842882Svi117747 #define sip_value_end sip_value.value_end 1852882Svi117747 #define sip_value_parsed_uri sip_value.sip_value_parse_uri 1862882Svi117747 1872882Svi117747 #define auth_val hdr_value.auth 1882882Svi117747 #define auth_scheme_ptr hdr_value.auth.scheme.sip_str_ptr 1892882Svi117747 #define auth_scheme_len hdr_value.auth.scheme.sip_str_len 1902882Svi117747 #define auth_param hdr_value.auth.param 1912882Svi117747 #define int_val hdr_value.i 1922882Svi117747 #define str_val hdr_value.str 1932882Svi117747 #define str_val_ptr hdr_value.str.sip_str_ptr 1942882Svi117747 #define str_val_len hdr_value.str.sip_str_len 1952882Svi117747 #define strs_val hdr_value.strs 1962882Svi117747 #define strs_s1 hdr_value.strs.s1 1972882Svi117747 #define strs_s2 hdr_value.strs.s2 1982882Svi117747 #define strs1_val_ptr hdr_value.strs.s1.sip_str_ptr 1992882Svi117747 #define strs1_val_len hdr_value.strs.s1.sip_str_len 2002882Svi117747 #define strs2_val_ptr hdr_value.strs.s2.sip_str_ptr 2012882Svi117747 #define strs2_val_len hdr_value.strs.s2.sip_str_len 2022882Svi117747 #define intstr_val hdr_value.intstr 2032882Svi117747 #define intstr_int hdr_value.intstr.i 2042882Svi117747 #define intstr_str hdr_value.intstr.s 2052882Svi117747 #define intstr_str_ptr hdr_value.intstr.s.sip_str_ptr 2062882Svi117747 #define intstr_str_len hdr_value.intstr.s.sip_str_len 2072882Svi117747 #define warn_code hdr_value.warn.code 2082882Svi117747 #define warn_agt hdr_value.warn.agt 2092882Svi117747 #define warn_text hdr_value.warn.text 2102882Svi117747 #define warn_agt_ptr warn_agt.sip_str_ptr 2112882Svi117747 #define warn_agt_len warn_agt.sip_str_len 2122882Svi117747 #define warn_text_ptr warn_text.sip_str_ptr 2132882Svi117747 #define warn_text_len warn_text.sip_str_len 2142882Svi117747 #define date_t hdr_value.date.t 2152882Svi117747 #define date_d hdr_value.date.d 2162882Svi117747 #define date_m hdr_value.date.m 2172882Svi117747 #define date_y hdr_value.date.y 2182882Svi117747 #define date_tz hdr_value.date.tz 2192882Svi117747 #define date_wd hdr_value.date.wd 2202882Svi117747 #define date_t_ptr date_t.sip_str_ptr 2212882Svi117747 #define date_t_len date_t.sip_str_len 2222882Svi117747 #define date_m_ptr date_m.sip_str_ptr 2232882Svi117747 #define date_m_len date_m.sip_str_len 2242882Svi117747 #define date_tz_ptr date_tz.sip_str_ptr 2252882Svi117747 #define date_tz_len date_tz.sip_str_len 2262882Svi117747 #define date_wd_ptr date_wd.sip_str_ptr 2272882Svi117747 #define date_wd_len date_wd.sip_str_len 2282882Svi117747 #define rack_resp hdr_value.rack.rack_resp_num 2292882Svi117747 #define rack_cseq hdr_value.rack.rack_cseq_num 2302882Svi117747 #define rack_method hdr_value.rack.rack_method 2312882Svi117747 #define cftr_name hdr_value.cftr.display_name 2322882Svi117747 #define cftr_uri hdr_value.cftr.uri 2332882Svi117747 #define cseq_num hdr_value.cseq.num 2342882Svi117747 #define cseq_method hdr_value.cseq.method 2352882Svi117747 #define via_protocol hdr_value.via.sent_protocol 2362882Svi117747 #define via_protocol_name hdr_value.via.sent_protocol.name 2372882Svi117747 #define via_protocol_vers hdr_value.via.sent_protocol.version 2382882Svi117747 #define via_protocol_transport hdr_value.via.sent_protocol.transport 2392882Svi117747 #define via_sent_by_host hdr_value.via.sent_by_host 2402882Svi117747 #define via_sent_by_port hdr_value.via.sent_by_port 2412882Svi117747 2422882Svi117747 #define SIP_INT_VAL 0x01 2432882Svi117747 #define SIP_STR_VAL 0x02 2442882Svi117747 #define SIP_STRS_VAL 0x03 2452882Svi117747 #define SIP_INTSTR_VAL 0x04 2462882Svi117747 #define SIP_AUTH_VAL 0x05 2472882Svi117747 2482882Svi117747 /* hdr value contains two string */ 2492882Svi117747 typedef sip_hdr_value_t sip_acpt_value_t; 2502882Svi117747 typedef sip_hdr_value_t sip_content_type_value_t; 2512882Svi117747 2522882Svi117747 /* hdr value contains one string only */ 2532882Svi117747 typedef sip_hdr_value_t sip_acpt_lang_value_t; 2542882Svi117747 typedef sip_hdr_value_t sip_acpt_encode_value_t; 2552882Svi117747 typedef sip_hdr_value_t sip_alert_value_t; 2562882Svi117747 typedef sip_hdr_value_t sip_cl_info_value_t; 2572882Svi117747 typedef sip_hdr_value_t sip_ct_disp_value_t; 2582882Svi117747 typedef sip_hdr_value_t sip_ct_encode_value_t; 2592882Svi117747 typedef sip_hdr_value_t sip_ct_lang_value_t; 2602882Svi117747 typedef sip_hdr_value_t sip_irt_value_t; 2612882Svi117747 typedef sip_hdr_value_t sip_mime_ver_value_t; 2622882Svi117747 typedef sip_hdr_value_t sip_org_value_t; 2632882Svi117747 typedef sip_hdr_value_t sip_prio_value_t; 2642882Svi117747 typedef sip_hdr_value_t sip_reply_value_t; 2652882Svi117747 typedef sip_hdr_value_t sip_privacy_value_t; 2662882Svi117747 typedef sip_hdr_value_t sip_ppassertedid_value_t; 2672882Svi117747 typedef sip_hdr_value_t sip_ppreferredid_value_t; 2682882Svi117747 typedef sip_hdr_value_t sip_pxy_req_value_t; 2692882Svi117747 typedef sip_hdr_value_t sip_req_value_t; 2702882Svi117747 typedef sip_hdr_value_t sip_subject_value_t; 2712882Svi117747 typedef sip_hdr_value_t sip_svr_value_t; 2722882Svi117747 typedef sip_hdr_value_t sip_support_value_t; 2732882Svi117747 typedef sip_hdr_value_t sip_unsupport_value_t; 2742882Svi117747 typedef sip_hdr_value_t sip_usr_agt_value_t; 2752882Svi117747 typedef sip_hdr_value_t sip_err_info_value_t; 2762882Svi117747 typedef sip_hdr_value_t sip_date_value_t; 2772882Svi117747 typedef sip_hdr_value_t sip_allert_value_t; 2782882Svi117747 typedef sip_hdr_value_t sip_callid_value_t; 2792882Svi117747 2802882Svi117747 /* hdr value contain one int only */ 2812882Svi117747 typedef sip_hdr_value_t sip_expr_value_t; 2822882Svi117747 typedef sip_hdr_value_t sip_min_expr_value_t; 2832882Svi117747 typedef sip_hdr_value_t sip_retry_value_t; 2842882Svi117747 typedef sip_hdr_value_t sip_timestamp_value_t; 2852882Svi117747 typedef sip_hdr_value_t sip_rseq_value_t; 2862882Svi117747 typedef sip_hdr_value_t sip_content_len_value_t; 2872882Svi117747 typedef sip_hdr_value_t sip_max_forwards_value_t; 2882882Svi117747 typedef sip_hdr_value_t sip_allow_value_t; 2892882Svi117747 2902882Svi117747 /* hdr value contain one int, two strings */ 2912882Svi117747 typedef sip_hdr_value_t sip_warn_value_t; 2922882Svi117747 2932882Svi117747 /* hdr field value is a list of param=param_val */ 2942882Svi117747 typedef sip_hdr_value_t sip_authen_value_t; 2952882Svi117747 typedef sip_hdr_value_t sip_authen_info_value_t; 2962882Svi117747 typedef sip_hdr_value_t sip_pxy_authen_value_t; 2972882Svi117747 typedef sip_hdr_value_t sip_pxy_author_value_t; 2982882Svi117747 typedef sip_hdr_value_t sip_3w_authen_value_t; 2992882Svi117747 3002882Svi117747 /* SIP request line structure */ 3012882Svi117747 typedef struct sip_request { 3022882Svi117747 sip_method_t sip_request_method; 3032882Svi117747 sip_str_t sip_request_uri; 3042882Svi117747 sip_uri_t sip_parse_uri; 3052882Svi117747 } sip_request_t; 3062882Svi117747 3072882Svi117747 /* SIP response line structure */ 3082882Svi117747 typedef struct sip_response { 3092882Svi117747 int sip_response_code; 3102882Svi117747 sip_str_t sip_response_phrase; 3112882Svi117747 } sip_response_t; 3122882Svi117747 3132882Svi117747 /* SIP message type - request or response */ 3142882Svi117747 typedef struct sip_message_type { 3152882Svi117747 boolean_t is_request; 3162882Svi117747 sip_proto_version_t sip_proto_version; 3172882Svi117747 union { 3182882Svi117747 sip_request_t sip_request; 3192882Svi117747 sip_response_t sip_response; 3202882Svi117747 } U; 3212882Svi117747 /* This is to save old value when we use a recvd message. */ 3222882Svi117747 struct sip_message_type *sip_next; 3232882Svi117747 } sip_message_type_t; 3242882Svi117747 3252882Svi117747 /* Increment reference count on SIP message */ 3262882Svi117747 #define SIP_MSG_REFCNT_INCR(sip_msg) { \ 3272882Svi117747 (void) pthread_mutex_lock(&(sip_msg)->sip_msg_mutex); \ 3282882Svi117747 (sip_msg)->sip_msg_ref_cnt++; \ 3292882Svi117747 (void) pthread_mutex_unlock(&(sip_msg)->sip_msg_mutex); \ 3302882Svi117747 } 3312882Svi117747 3322882Svi117747 /* Decrement reference count on SIP message */ 3332882Svi117747 #define SIP_MSG_REFCNT_DECR(sip_msg) { \ 3342882Svi117747 (void) pthread_mutex_lock(&(sip_msg)->sip_msg_mutex); \ 3352882Svi117747 assert((sip_msg)->sip_msg_ref_cnt > 0); \ 3362882Svi117747 if (--(sip_msg)->sip_msg_ref_cnt == 0) { \ 3372882Svi117747 sip_destroy_msg(sip_msg); \ 3382882Svi117747 } else { \ 3392882Svi117747 (void) pthread_mutex_unlock(&(sip_msg)->sip_msg_mutex); \ 3402882Svi117747 } \ 3412882Svi117747 } 3422882Svi117747 3432882Svi117747 /* SIP message structure */ 3442882Svi117747 typedef struct sip_message { 3452882Svi117747 char *sip_msg_buf; /* Message */ 3462882Svi117747 char *sip_msg_old_buf; 3472882Svi117747 boolean_t sip_msg_modified; 3482882Svi117747 boolean_t sip_msg_cannot_be_modified; 3492882Svi117747 int sip_msg_len; 3502882Svi117747 size_t sip_msg_content_len; /* content length */ 3512882Svi117747 sip_content_t *sip_msg_content; 3522882Svi117747 /* All fields synchronizes on this */ 3532882Svi117747 pthread_mutex_t sip_msg_mutex; 3542882Svi117747 /* doubly linked list of headers */ 3552882Svi117747 _sip_header_t *sip_msg_headers_start; 3562882Svi117747 _sip_header_t *sip_msg_headers_end; 3572882Svi117747 _sip_header_t *sip_msg_start_line; 3582882Svi117747 sip_message_type_t *sip_msg_req_res; 3592882Svi117747 int sip_msg_ref_cnt; 3602882Svi117747 }_sip_msg_t; 3612882Svi117747 3622882Svi117747 extern char *sip_get_tcp_msg(sip_conn_object_t, char *, size_t *); 3632882Svi117747 extern char *sip_msg_to_msgbuf(_sip_msg_t *msg, int *error); 3642882Svi117747 extern char *_sip_startline_to_str(_sip_msg_t *sip_msg, int *error); 3652882Svi117747 extern int sip_adjust_msgbuf(_sip_msg_t *msg); 3662882Svi117747 extern void sip_delete_all_headers(_sip_msg_t *sip_msg); 3672882Svi117747 extern _sip_header_t *sip_dup_header(_sip_header_t *from); 3682882Svi117747 extern int _sip_copy_header(_sip_msg_t *, _sip_header_t *, char *, 3692882Svi117747 boolean_t); 3702882Svi117747 extern int _sip_find_and_copy_header(_sip_msg_t *, _sip_msg_t *, 3712882Svi117747 char *, char *, boolean_t); 3722882Svi117747 extern int _sip_find_and_copy_all_header(_sip_msg_t *, 3732882Svi117747 _sip_msg_t *, char *header_name); 3742882Svi117747 extern _sip_header_t *sip_search_for_header(_sip_msg_t *, char *, 3752882Svi117747 _sip_header_t *); 3762882Svi117747 extern void _sip_add_header(_sip_msg_t *, _sip_header_t *, 3772882Svi117747 boolean_t, boolean_t, char *); 3782882Svi117747 extern _sip_header_t *sip_new_header(int); 3792882Svi117747 extern int sip_create_nonOKack(sip_msg_t, sip_msg_t, sip_msg_t); 3802882Svi117747 extern void sip_destroy_msg(_sip_msg_t *); 3812882Svi117747 extern void sip_free_header(_sip_header_t *sip_header); 3822882Svi117747 extern void sip_free_phdr(sip_parsed_header_t *); 3832882Svi117747 extern void sip_free_cftr_header(sip_parsed_header_t *); 3842882Svi117747 3852882Svi117747 extern int sip_parse_allow_events_header(_sip_header_t *, 3862882Svi117747 sip_parsed_header_t **); 3872882Svi117747 extern int sip_parse_event_header(_sip_header_t *, 3882882Svi117747 sip_parsed_header_t **); 3892882Svi117747 extern int sip_parse_substate_header(_sip_header_t *, 3902882Svi117747 sip_parsed_header_t **); 3912882Svi117747 extern int sip_parse_acpt_header(_sip_header_t *, 3922882Svi117747 sip_parsed_header_t **); 3932882Svi117747 extern int sip_parse_acpt_encode_header(_sip_header_t *, 3942882Svi117747 sip_parsed_header_t **); 3952882Svi117747 extern int sip_parse_acpt_lang_header(_sip_header_t *, 3962882Svi117747 sip_parsed_header_t **); 3972882Svi117747 extern int sip_parse_alert_header(_sip_header_t *, 3982882Svi117747 sip_parsed_header_t **); 3992882Svi117747 extern int sip_parse_allow_header(_sip_header_t *, 4002882Svi117747 sip_parsed_header_t **); 4012882Svi117747 extern int sip_parse_useragt_header(_sip_header_t *, 4022882Svi117747 sip_parsed_header_t **); 4032882Svi117747 extern int sip_parse_usupport_header(_sip_header_t *, 4042882Svi117747 sip_parsed_header_t **); 4052882Svi117747 extern int sip_parse_timestamp_header(_sip_header_t *, 4062882Svi117747 sip_parsed_header_t **); 4072882Svi117747 extern int sip_parse_support_header(_sip_header_t *, 4082882Svi117747 sip_parsed_header_t **); 4092882Svi117747 extern int sip_parse_subject_header(_sip_header_t *, 4102882Svi117747 sip_parsed_header_t **); 4112882Svi117747 extern int sip_parse_server_header(_sip_header_t *, 4122882Svi117747 sip_parsed_header_t **); 4132882Svi117747 extern int sip_parse_retryaft_header(_sip_header_t *, 4142882Svi117747 sip_parsed_header_t **); 4152882Svi117747 extern int sip_parse_require_header(_sip_header_t *, 4162882Svi117747 sip_parsed_header_t **); 4172882Svi117747 extern int sip_parse_replyto_header(_sip_header_t *, 4182882Svi117747 sip_parsed_header_t **); 4192882Svi117747 extern int sip_parse_passertedid_header(_sip_header_t *, 4202882Svi117747 sip_parsed_header_t **); 4212882Svi117747 extern int sip_parse_ppreferredid_header(_sip_header_t *, 4222882Svi117747 sip_parsed_header_t **); 4232882Svi117747 extern int sip_parse_priority_header(_sip_header_t *, 4242882Svi117747 sip_parsed_header_t **); 4252882Svi117747 extern int sip_parse_org_header(_sip_header_t *, 4262882Svi117747 sip_parsed_header_t **); 4272882Svi117747 extern int sip_parse_mimeversion_header(_sip_header_t *, 4282882Svi117747 sip_parsed_header_t **); 4292882Svi117747 extern int sip_parse_minexpire_header(_sip_header_t *, 4302882Svi117747 sip_parsed_header_t **); 4312882Svi117747 extern int sip_parse_rseq_header(_sip_header_t *, 4322882Svi117747 sip_parsed_header_t **); 4332882Svi117747 extern int sip_parse_inreplyto_header(_sip_header_t *, 4342882Svi117747 sip_parsed_header_t **); 4352882Svi117747 extern int sip_parse_privacy_header(_sip_header_t *, 4362882Svi117747 sip_parsed_header_t **); 4372882Svi117747 extern int sip_parse_expire_header(_sip_header_t *, 4382882Svi117747 sip_parsed_header_t **); 4392882Svi117747 extern int sip_parse_errorinfo_header(_sip_header_t *, 4402882Svi117747 sip_parsed_header_t **); 4412882Svi117747 extern int sip_parse_contentlang_header(_sip_header_t *, 4422882Svi117747 sip_parsed_header_t **); 4432882Svi117747 extern int sip_parse_contentencode_header(_sip_header_t *, 4442882Svi117747 sip_parsed_header_t **); 4452882Svi117747 extern int sip_parse_contentdis_header(_sip_header_t *, 4462882Svi117747 sip_parsed_header_t **); 4472882Svi117747 extern int sip_parse_callinfo_header(_sip_header_t *, 4482882Svi117747 sip_parsed_header_t **); 4492882Svi117747 extern int sip_parse_date_header(_sip_header_t *, 4502882Svi117747 sip_parsed_header_t **); 4512882Svi117747 extern int sip_parse_warn_header(_sip_header_t *, 4522882Svi117747 sip_parsed_header_t **); 4532882Svi117747 extern int sip_parse_cftr_header(_sip_header_t *, 4542882Svi117747 sip_parsed_header_t **); 4552882Svi117747 extern int sip_parse_cseq_header(_sip_header_t *, 4562882Svi117747 sip_parsed_header_t **); 4572882Svi117747 extern int sip_parse_cid_header(_sip_header_t *, 4582882Svi117747 sip_parsed_header_t **); 4592882Svi117747 extern int sip_parse_via_header(_sip_header_t *, 4602882Svi117747 sip_parsed_header_t **); 4612882Svi117747 extern int sip_parse_clen_header(_sip_header_t *, 4622882Svi117747 sip_parsed_header_t **); 4632882Svi117747 extern int sip_parse_maxf_header(_sip_header_t *, 4642882Svi117747 sip_parsed_header_t **); 4652882Svi117747 extern int sip_parse_ctype_header(_sip_header_t *, 4662882Svi117747 sip_parsed_header_t **); 4672882Svi117747 extern int sip_parse_unknown_header(_sip_header_t *, 4682882Svi117747 sip_parsed_header_t **); 4692882Svi117747 extern int sip_parse_ainfo_header(_sip_header_t *, 4702882Svi117747 sip_parsed_header_t **); 4712882Svi117747 extern int sip_parse_preq_header(_sip_header_t *, 4722882Svi117747 sip_parsed_header_t **); 4732882Svi117747 extern int sip_parse_author_header(_sip_header_t *, 4742882Svi117747 sip_parsed_header_t **); 4752882Svi117747 extern int sip_parse_pauthor_header(_sip_header_t *, 4762882Svi117747 sip_parsed_header_t **); 4772882Svi117747 extern int sip_parse_pauthen_header(_sip_header_t *, 4782882Svi117747 sip_parsed_header_t **); 4792882Svi117747 extern int sip_parse_wauthen_header(_sip_header_t *, 4802882Svi117747 sip_parsed_header_t **); 4812882Svi117747 extern int sip_parse_rseq(_sip_header_t *, sip_parsed_header_t **); 4822882Svi117747 extern int sip_parse_rack(_sip_header_t *, sip_parsed_header_t **); 4832882Svi117747 extern int sip_parse_passertedid(_sip_header_t *, 4842882Svi117747 sip_parsed_header_t **); 4852882Svi117747 extern int sip_parse_ppreferredid(_sip_header_t *, 4862882Svi117747 sip_parsed_header_t **); 4872882Svi117747 extern int sip_parse_privacy_header(_sip_header_t *, 4882882Svi117747 sip_parsed_header_t **); 4892882Svi117747 4902882Svi117747 extern sip_param_t *sip_get_param_from_list(sip_param_t *, char *); 4912882Svi117747 extern int sip_copy_values(char *, _sip_header_t *); 4922882Svi117747 extern int sip_add_content_length(_sip_msg_t *, int); 4932882Svi117747 extern int sip_delete_start_line_locked(_sip_msg_t *); 4942882Svi117747 4952882Svi117747 /* Useful access macros */ 4962882Svi117747 #define sip_resp_phrase_len U.sip_response.sip_response_phrase.sip_str_len 4972882Svi117747 #define sip_resp_phrase_ptr U.sip_response.sip_response_phrase.sip_str_ptr 4982882Svi117747 4992882Svi117747 #define sip_resp_code U.sip_response.sip_response_code 5002882Svi117747 #define sip_resp_phrase U.sip_response.sip_response_phrase 5012882Svi117747 5022882Svi117747 #define sip_req_method U.sip_request.sip_request_method 5032882Svi117747 #define sip_req_uri U.sip_request.sip_request_uri 5042882Svi117747 #define sip_req_uri_ptr U.sip_request.sip_request_uri.sip_str_ptr 5052882Svi117747 #define sip_req_uri_len U.sip_request.sip_request_uri.sip_str_ptr 5062882Svi117747 #define sip_req_parse_uri U.sip_request.sip_parse_uri 5072882Svi117747 5082882Svi117747 #define sip_header_parse sip_header_functions->header_parse_func 5092882Svi117747 #define sip_header_name sip_header_functions->header_name 5102882Svi117747 5112882Svi117747 #define sip_hdr_start sip_hdr_general.sip_hdr_start 5122882Svi117747 #define sip_hdr_end sip_hdr_general.sip_hdr_end 5132882Svi117747 #define sip_hdr_current sip_hdr_general.sip_hdr_current 5142882Svi117747 #define sip_hdr_parsed sip_hdr_general.sip_hdr_parsed 5152882Svi117747 5162882Svi117747 #ifdef __cplusplus 5172882Svi117747 } 5182882Svi117747 #endif 5192882Svi117747 5202882Svi117747 #endif /* _SIP_MSG_H */ 521