/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SIP_MSG_H
#define _SIP_MSG_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <pthread.h>
#include <sip.h>
#ifdef __solaris__
extern int mutex_held();
#endif
/* Compare Cseq numbers */
/* List of registered sent-by values */
typedef struct sent_by_list_s {
char *sb_val;
extern sent_by_list_t *sip_sent_by;
extern int sip_sent_by_count;
extern pthread_mutex_t sip_sent_by_lock;
typedef struct sip_header {
int sip_header_state;
/* True if header was allocated */
/* Structure for the SIP message body */
typedef struct sip_content {
char *sip_content_start;
char *sip_content_end;
char *sip_content_current;
/* General definitions */
/* Two string values */
typedef struct sip_2strs {
/* An integer and a string value */
typedef struct sip_intstr {
int i;
sip_str_t s;
} sip_intstr_t;
/* Warn value */
typedef struct sip_warn {
int code;
} sip_warn_t;
/* Date value */
typedef struct sip_date {
sip_str_t t;
int d;
sip_str_t m;
int y;
} sip_date_t;
/* Authorization and authentication value */
typedef struct sip_auth {
} sip_auth_t;
/* RACK value */
typedef struct sip_rack {
int rack_resp_num;
int rack_cseq_num;
/* Cseq value */
typedef struct sip_cseq {
int num;
/* Value for Contact, From and To header */
typedef struct cftr_value {
typedef struct sip_proto_version_s {
/* Via value */
typedef struct via_value {
int sent_by_port;
typedef struct sip_hdr_value {
union {
int i;
} hdr_value;
/*
* NOTE: ALL value structs MUST have sip_value_t as the first field.
*/
/* hdr value contains two string */
/* hdr value contains one string only */
/* hdr value contain one int only */
/* hdr value contain one int, two strings */
/* hdr field value is a list of param=param_val */
/* SIP request line structure */
typedef struct sip_request {
/* SIP response line structure */
typedef struct sip_response {
int sip_response_code;
/* SIP message type - request or response */
typedef struct sip_message_type {
union {
} U;
/* This is to save old value when we use a recvd message. */
/* Increment reference count on SIP message */
(sip_msg)->sip_msg_ref_cnt++; \
}
/* Decrement reference count on SIP message */
if (--(sip_msg)->sip_msg_ref_cnt == 0) { \
} else { \
} \
}
/* SIP message structure */
typedef struct sip_message {
char *sip_msg_old_buf;
int sip_msg_len;
/* All fields synchronizes on this */
/* doubly linked list of headers */
int sip_msg_ref_cnt;
char *, char *, boolean_t);
extern int _sip_find_and_copy_all_header(_sip_msg_t *,
_sip_msg_t *, char *header_name);
_sip_header_t *);
extern _sip_header_t *sip_new_header(int);
extern void sip_destroy_msg(_sip_msg_t *);
extern void sip_free_phdr(sip_parsed_header_t *);
extern void sip_free_cftr_header(sip_parsed_header_t *);
extern int sip_parse_allow_events_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_event_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_substate_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_acpt_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_acpt_encode_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_acpt_lang_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_alert_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_allow_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_useragt_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_usupport_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_timestamp_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_support_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_subject_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_server_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_retryaft_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_require_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_replyto_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_passertedid_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_ppreferredid_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_priority_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_org_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_mimeversion_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_minexpire_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_rseq_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_inreplyto_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_privacy_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_expire_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_errorinfo_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_contentlang_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_contentencode_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_contentdis_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_callinfo_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_date_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_warn_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_cftr_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_cseq_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_cid_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_via_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_clen_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_maxf_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_ctype_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_unknown_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_ainfo_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_preq_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_author_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_pauthor_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_pauthen_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_wauthen_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_passertedid(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_ppreferredid(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_parse_privacy_header(_sip_header_t *,
sip_parsed_header_t **);
extern int sip_copy_values(char *, _sip_header_t *);
extern int sip_add_content_length(_sip_msg_t *, int);
extern int sip_delete_start_line_locked(_sip_msg_t *);
/* Useful access macros */
#ifdef __cplusplus
}
#endif
#endif /* _SIP_MSG_H */