40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/*
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * CDDL HEADER START
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi *
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * The contents of this file are subject to the terms of the
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * Common Development and Distribution License (the "License").
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * You may not use this file except in compliance with the License.
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi *
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * or http://www.opensolaris.org/os/licensing.
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * See the License for the specific language governing permissions
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * and limitations under the License.
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi *
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * When distributing Covered Code, include this CDDL HEADER in each
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * If applicable, add the following below this CDDL HEADER, with the
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * fields enclosed by brackets "[]" replaced with your own identifying
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * information: Portions Copyright [yyyy] [name of copyright owner]
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi *
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * CDDL HEADER END
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/*
2c2c41837e330b002c4220a39638150db504fe0evi * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * Use is subject to license terms.
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#ifndef _SIP_MSG_H
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define _SIP_MSG_H
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#pragma ident "%Z%%M% %I% %E% SMI"
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#ifdef __cplusplus
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern "C" {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#endif
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
2c2c41837e330b002c4220a39638150db504fe0evi#include <pthread.h>
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#include <sip.h>
2c2c41837e330b002c4220a39638150db504fe0evi#include <sys/types.h>
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#ifdef __solaris__
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int mutex_held();
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#endif
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern sip_header_function_t *sip_header_function_table_external;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Compare Cseq numbers */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_CSEQ_LT(a, b) ((int32_t)((a)-(b)) < 0)
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_CSEQ_GT(a, b) ((int32_t)((a)-(b)) > 0)
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_CSEQ_GEQ(a, b) ((int32_t)((a)-(b)) >= 0)
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_HEADER_ACTIVE 0x0
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_HEADER_DELETED 0x1
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_HEADER_DELETED_VAL 0x2
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* List of registered sent-by values */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sent_by_list_s {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi struct sent_by_list_s *sb_next;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi struct sent_by_list_s *sb_prev;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi char *sb_val;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sent_by_list_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern sent_by_list_t *sip_sent_by;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_sent_by_count;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern pthread_mutex_t sip_sent_by_lock;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_header {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_hdr_general_t sip_hdr_general;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi /* active/deleted or has deleted val */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int sip_header_state;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi struct sip_header *sip_hdr_next;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi struct sip_header *sip_hdr_prev;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi struct sip_message *sip_hdr_sipmsg;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi /* True if header was allocated */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi boolean_t sip_hdr_allocated;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_header_function_t *sip_header_functions;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}_sip_header_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Structure for the SIP message body */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_content {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi char *sip_content_start;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi char *sip_content_end;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi char *sip_content_current;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi struct sip_content *sip_content_next;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi boolean_t sip_content_allocated;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}sip_content_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* General definitions */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Two string values */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_2strs {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t s1;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t s2;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}sip_2strs_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* An integer and a string value */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_intstr {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int i;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t s;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_intstr_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Warn value */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_warn {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int code;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t agt;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t text;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_warn_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Date value */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_date {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int d;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t m;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int y;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t tz;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t wd;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_date_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Authorization and authentication value */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_auth {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t scheme;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_param_t *param;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_auth_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* RACK value */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_rack {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int rack_resp_num;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int rack_cseq_num;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_method_t rack_method;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}sip_rack_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Cseq value */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_cseq {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int num;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_method_t method;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_cseq_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Value for Contact, From and To header */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct cftr_value {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t *display_name;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t uri;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_cftr_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* SIP name/version/transport value in Via */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_proto_version_s {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t name;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t version;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t transport;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}sip_proto_version_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Via value */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct via_value {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_proto_version_t sent_protocol;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t sent_by_host;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int sent_by_port;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}sip_via_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_hdr_value {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_value_t sip_value;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi union {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int i;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t str;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_2strs_t strs;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_intstr_t intstr;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_warn_t warn;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_date_t date;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_auth_t auth;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_rack_t rack;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_cseq_value_t cseq;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_cftr_value_t cftr;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_via_value_t via;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi } hdr_value;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_hdr_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/*
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi * NOTE: ALL value structs MUST have sip_value_t as the first field.
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_value_version sip_value.sip_value_version
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_next_value sip_value.next
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_param_list sip_value.param_list
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_value_state sip_value.value_state
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_value_header sip_value.parsed_header
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_value_start sip_value.value_start
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_value_end sip_value.value_end
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_value_parsed_uri sip_value.sip_value_parse_uri
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define auth_val hdr_value.auth
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define auth_scheme_ptr hdr_value.auth.scheme.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define auth_scheme_len hdr_value.auth.scheme.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define auth_param hdr_value.auth.param
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define int_val hdr_value.i
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define str_val hdr_value.str
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define str_val_ptr hdr_value.str.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define str_val_len hdr_value.str.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define strs_val hdr_value.strs
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define strs_s1 hdr_value.strs.s1
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define strs_s2 hdr_value.strs.s2
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define strs1_val_ptr hdr_value.strs.s1.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define strs1_val_len hdr_value.strs.s1.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define strs2_val_ptr hdr_value.strs.s2.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define strs2_val_len hdr_value.strs.s2.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define intstr_val hdr_value.intstr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define intstr_int hdr_value.intstr.i
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define intstr_str hdr_value.intstr.s
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define intstr_str_ptr hdr_value.intstr.s.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define intstr_str_len hdr_value.intstr.s.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define warn_code hdr_value.warn.code
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define warn_agt hdr_value.warn.agt
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define warn_text hdr_value.warn.text
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define warn_agt_ptr warn_agt.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define warn_agt_len warn_agt.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define warn_text_ptr warn_text.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define warn_text_len warn_text.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_t hdr_value.date.t
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_d hdr_value.date.d
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_m hdr_value.date.m
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_y hdr_value.date.y
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_tz hdr_value.date.tz
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_wd hdr_value.date.wd
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_t_ptr date_t.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_t_len date_t.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_m_ptr date_m.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_m_len date_m.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_tz_ptr date_tz.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_tz_len date_tz.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_wd_ptr date_wd.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define date_wd_len date_wd.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define rack_resp hdr_value.rack.rack_resp_num
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define rack_cseq hdr_value.rack.rack_cseq_num
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define rack_method hdr_value.rack.rack_method
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define cftr_name hdr_value.cftr.display_name
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define cftr_uri hdr_value.cftr.uri
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define cseq_num hdr_value.cseq.num
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define cseq_method hdr_value.cseq.method
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define via_protocol hdr_value.via.sent_protocol
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define via_protocol_name hdr_value.via.sent_protocol.name
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define via_protocol_vers hdr_value.via.sent_protocol.version
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define via_protocol_transport hdr_value.via.sent_protocol.transport
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define via_sent_by_host hdr_value.via.sent_by_host
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define via_sent_by_port hdr_value.via.sent_by_port
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_INT_VAL 0x01
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_STR_VAL 0x02
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_STRS_VAL 0x03
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_INTSTR_VAL 0x04
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_AUTH_VAL 0x05
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* hdr value contains two string */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_acpt_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_content_type_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* hdr value contains one string only */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_acpt_lang_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_acpt_encode_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_alert_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_cl_info_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_ct_disp_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_ct_encode_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_ct_lang_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_irt_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_mime_ver_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_org_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_prio_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_reply_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_privacy_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_ppassertedid_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_ppreferredid_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_pxy_req_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_req_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_subject_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_svr_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_support_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_unsupport_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_usr_agt_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_err_info_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_date_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_allert_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_callid_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* hdr value contain one int only */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_expr_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_min_expr_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_retry_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_timestamp_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_rseq_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_content_len_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_max_forwards_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_allow_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* hdr value contain one int, two strings */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_warn_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* hdr field value is a list of param=param_val */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_authen_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_authen_info_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_pxy_authen_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_pxy_author_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef sip_hdr_value_t sip_3w_authen_value_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* SIP request line structure */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_request {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_method_t sip_request_method;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t sip_request_uri;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_uri_t sip_parse_uri;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_request_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* SIP response line structure */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_response {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int sip_response_code;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_str_t sip_response_phrase;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_response_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* SIP message type - request or response */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_message_type {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi boolean_t is_request;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_proto_version_t sip_proto_version;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi union {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_request_t sip_request;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_response_t sip_response;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi } U;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi /* This is to save old value when we use a recvd message. */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi struct sip_message_type *sip_next;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi} sip_message_type_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Increment reference count on SIP message */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_MSG_REFCNT_INCR(sip_msg) { \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi (void) pthread_mutex_lock(&(sip_msg)->sip_msg_mutex); \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi (sip_msg)->sip_msg_ref_cnt++; \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi (void) pthread_mutex_unlock(&(sip_msg)->sip_msg_mutex); \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Decrement reference count on SIP message */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define SIP_MSG_REFCNT_DECR(sip_msg) { \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi (void) pthread_mutex_lock(&(sip_msg)->sip_msg_mutex); \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi assert((sip_msg)->sip_msg_ref_cnt > 0); \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi if (--(sip_msg)->sip_msg_ref_cnt == 0) { \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_destroy_msg(sip_msg); \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi } else { \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi (void) pthread_mutex_unlock(&(sip_msg)->sip_msg_mutex); \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi } \
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* SIP message structure */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vitypedef struct sip_message {
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi char *sip_msg_buf; /* Message */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi char *sip_msg_old_buf;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi boolean_t sip_msg_modified;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi boolean_t sip_msg_cannot_be_modified;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int sip_msg_len;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi size_t sip_msg_content_len; /* content length */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_content_t *sip_msg_content;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi /* All fields synchronizes on this */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi pthread_mutex_t sip_msg_mutex;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi /* doubly linked list of headers */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi _sip_header_t *sip_msg_headers_start;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi _sip_header_t *sip_msg_headers_end;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi _sip_header_t *sip_msg_start_line;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_message_type_t *sip_msg_req_res;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi int sip_msg_ref_cnt;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}_sip_msg_t;
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern char *sip_get_tcp_msg(sip_conn_object_t, char *, size_t *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern char *sip_msg_to_msgbuf(_sip_msg_t *msg, int *error);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern char *_sip_startline_to_str(_sip_msg_t *sip_msg, int *error);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_adjust_msgbuf(_sip_msg_t *msg);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern void sip_delete_all_headers(_sip_msg_t *sip_msg);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern _sip_header_t *sip_dup_header(_sip_header_t *from);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int _sip_copy_header(_sip_msg_t *, _sip_header_t *, char *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi boolean_t);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int _sip_find_and_copy_header(_sip_msg_t *, _sip_msg_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi char *, char *, boolean_t);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int _sip_find_and_copy_all_header(_sip_msg_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi _sip_msg_t *, char *header_name);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern _sip_header_t *sip_search_for_header(_sip_msg_t *, char *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi _sip_header_t *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern void _sip_add_header(_sip_msg_t *, _sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi boolean_t, boolean_t, char *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern _sip_header_t *sip_new_header(int);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_create_nonOKack(sip_msg_t, sip_msg_t, sip_msg_t);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern void sip_destroy_msg(_sip_msg_t *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern void sip_free_header(_sip_header_t *sip_header);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern void sip_free_phdr(sip_parsed_header_t *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern void sip_free_cftr_header(sip_parsed_header_t *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_allow_events_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_event_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_substate_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_acpt_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_acpt_encode_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_acpt_lang_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_alert_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_allow_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_useragt_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_usupport_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_timestamp_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_support_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_subject_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_server_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_retryaft_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_require_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_replyto_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_passertedid_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_ppreferredid_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_priority_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_org_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_mimeversion_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_minexpire_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_rseq_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_inreplyto_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_privacy_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_expire_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_errorinfo_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_contentlang_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_contentencode_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_contentdis_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_callinfo_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_date_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_warn_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_cftr_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_cseq_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_cid_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_via_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_clen_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_maxf_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_ctype_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_unknown_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_ainfo_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_preq_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_author_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_pauthor_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_pauthen_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_wauthen_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_rseq(_sip_header_t *, sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_rack(_sip_header_t *, sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_passertedid(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_ppreferredid(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_parse_privacy_header(_sip_header_t *,
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi sip_parsed_header_t **);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern sip_param_t *sip_get_param_from_list(sip_param_t *, char *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_copy_values(char *, _sip_header_t *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_add_content_length(_sip_msg_t *, int);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331viextern int sip_delete_start_line_locked(_sip_msg_t *);
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi/* Useful access macros */
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_resp_phrase_len U.sip_response.sip_response_phrase.sip_str_len
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_resp_phrase_ptr U.sip_response.sip_response_phrase.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_resp_code U.sip_response.sip_response_code
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_resp_phrase U.sip_response.sip_response_phrase
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_req_method U.sip_request.sip_request_method
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_req_uri U.sip_request.sip_request_uri
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_req_uri_ptr U.sip_request.sip_request_uri.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_req_uri_len U.sip_request.sip_request_uri.sip_str_ptr
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_req_parse_uri U.sip_request.sip_parse_uri
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_header_parse sip_header_functions->header_parse_func
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_header_name sip_header_functions->header_name
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_hdr_start sip_hdr_general.sip_hdr_start
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_hdr_end sip_hdr_general.sip_hdr_end
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_hdr_current sip_hdr_general.sip_hdr_current
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#define sip_hdr_parsed sip_hdr_general.sip_hdr_parsed
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#ifdef __cplusplus
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi}
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#endif
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi
40cb5e5daa7b80bb70fcf8dadfb20f9281566331vi#endif /* _SIP_MSG_H */