/*
* 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
*/
/*
*/
#ifndef _SIP_H
#define _SIP_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
/* Send a SIP message statefully */
/* Enable multiple dialogs if a request is forked */
/* SIP headers */
/* SIP Response Codes */
/* 1XX - Provisional */
/* 2XX - Success */
/* 3XX - Redirection */
/* 4XX - Request Failed */
/* 5XX - Server Failure */
/* 6XX - Global Failures */
/* Response error types */
/* Types of transactions */
/* Transaction states */
#define SIP_NEW_TRANSACTION 0
/* Client Transaction States */
/* Server Transaction States */
/* Dialog types */
/* Dialog state */
typedef enum dialog_state {
/* SIP URI parse errors */
/* SIP traffic counters */
typedef enum sip_traffic_counter_names {
SIP_TOTAL_BYTES_RCVD = 0,
/* SIP Traffic counter group */
/* SIP Logging Levels */
#ifdef __linux__
#define B_FALSE 0
typedef int boolean_t;
typedef unsigned char uchar_t;
typedef unsigned int uint_t;
typedef unsigned int uint32_t;
#endif
typedef struct sip_str {
char *sip_str_ptr;
int sip_str_len;
/* SIP parameter */
typedef struct sip_param {
/* Parsed header structure */
typedef struct sip_parsed_header {
/* Value states */
typedef enum {
SIP_VALUE_ACTIVE = 0,
/* SIP header value */
typedef struct sip_value {
int sip_value_version;
void *next;
char *value_start;
char *value_end;
typedef struct sip_header_general {
char *sip_hdr_start;
char *sip_hdr_end;
char *sip_hdr_current;
/* SIP methods */
typedef enum {
UNKNOWN = 0,
ACK,
BYE,
INFO,
typedef struct sip_methods {
extern sip_methods_t sip_methods[];
/* SIP header function table */
typedef struct header_function_table {
char *header_name;
char *header_short_name;
struct sip_parsed_header **);
struct sip_parsed_header *);
/* Connection Manager interface */
typedef struct sip_io_pointers_s {
socklen_t *);
socklen_t *);
/* Upper layer registerations */
typedef struct sip_ulp_pointers_s {
sip_msg_t, const sip_dialog_t);
struct timeval *);
sip_msg_t, int, int);
int);
/* SIP stack initialization structure */
typedef struct sip_stack_init_s {
int sip_version;
int sip_stack_flags;
/* SIP stack version */
/* Flags for sip_stack_flags */
extern int sip_init_conn_object(sip_conn_object_t);
extern void sip_clear_stale_data(sip_conn_object_t);
extern void sip_conn_destroyed(sip_conn_object_t);
extern int (*sip_stack_send)(const sip_conn_object_t, char *, int);
extern void (*sip_refhold_conn)(sip_conn_object_t);
extern void (*sip_refrele_conn)(sip_conn_object_t);
extern int (*sip_conn_rem_addr)(sip_conn_object_t,
extern int (*sip_conn_local_addr)(sip_conn_object_t,
extern int (*sip_conn_transport)(sip_conn_object_t);
extern int (*sip_conn_timer1)(sip_conn_object_t);
extern int (*sip_conn_timer2)(sip_conn_object_t);
extern int (*sip_conn_timer4)(sip_conn_object_t);
extern int (*sip_conn_timerd)(sip_conn_object_t);
struct timeval *);
extern sip_msg_t sip_new_msg(void);
extern void sip_free_msg(sip_msg_t);
extern void sip_hold_msg(sip_msg_t);
extern int sip_stack_init(sip_stack_init_t *);
uint32_t);
extern void sip_process_new_packet(sip_conn_object_t, void *,
size_t);
extern char *sip_guid(void);
extern char *sip_sent_by_to_str(int *);
extern int sip_register_sent_by(char *);
extern void sip_unregister_sent_by(char *);
extern void sip_unregister_all_sent_by(void);
extern char *sip_branchid(sip_msg_t);
extern uint32_t sip_get_cseq(void);
extern uint32_t sip_get_rseq(void);
extern int sip_get_num_via(sip_msg_t, int *);
extern int sip_add_from(sip_msg_t, char *, char *, char *,
boolean_t, char *);
extern int sip_add_to(sip_msg_t, char *, char *, char *,
boolean_t, char *);
extern int sip_add_response_line(sip_msg_t, int, char *);
extern int sip_add_via(sip_msg_t, char *, char *, int, char *);
extern int sip_add_callid(sip_msg_t, char *);
extern int sip_add_content_type(sip_msg_t, char *, char *);
extern int sip_add_content(sip_msg_t, char *);
char *);
extern int sip_add_route(sip_msg_t, char *, char *, char *);
extern int sip_add_record_route(sip_msg_t, char *, char *, char *);
extern int sip_add_branchid_to_via(sip_msg_t, char *);
extern int sip_add_accept(sip_msg_t, char *, char *, char *,
char *);
extern int sip_add_author(sip_msg_t, char *, char *);
extern int sip_add_authen_info(sip_msg_t, char *);
extern int sip_add_proxy_authen(sip_msg_t, char *, char *);
extern int sip_add_proxy_author(sip_msg_t, char *, char *);
extern int sip_add_proxy_require(sip_msg_t, char *);
extern int sip_add_www_authen(sip_msg_t, char *, char *);
extern int sip_add_accept_enc(sip_msg_t, char *, char *);
extern int sip_add_accept_lang(sip_msg_t, char *, char *);
extern int sip_add_alert_info(sip_msg_t, char *, char *);
extern int sip_add_call_info(sip_msg_t, char *, char *);
extern int sip_add_content_disp(sip_msg_t, char *, char *);
extern int sip_add_content_enc(sip_msg_t, char *);
extern int sip_add_content_lang(sip_msg_t, char *);
extern int sip_add_date(sip_msg_t, char *);
extern int sip_add_error_info(sip_msg_t, char *, char *);
extern int sip_add_expires(sip_msg_t, int);
extern int sip_add_in_reply_to(sip_msg_t, char *);
extern int sip_add_mime_version(sip_msg_t, char *);
extern int sip_add_min_expires(sip_msg_t, int);
extern int sip_add_org(sip_msg_t, char *);
extern int sip_add_priority(sip_msg_t, char *);
extern int sip_add_reply_to(sip_msg_t, char *, char *, char *,
extern int sip_add_require(sip_msg_t, char *);
extern int sip_add_retry_after(sip_msg_t, int, char *, char *);
extern int sip_add_server(sip_msg_t, char *);
extern int sip_add_subject(sip_msg_t, char *);
extern int sip_add_supported(sip_msg_t, char *);
extern int sip_add_tstamp(sip_msg_t, char *, char *);
extern int sip_add_unsupported(sip_msg_t, char *);
extern int sip_add_user_agent(sip_msg_t, char *);
extern int sip_add_warning(sip_msg_t, int, char *, char *);
extern int sip_add_allow_events(sip_msg_t, char *);
extern int sip_add_event(sip_msg_t, char *, char *);
extern int sip_add_substate(sip_msg_t, char *, char *);
extern int sip_add_privacy(sip_msg_t, char *);
extern int sip_add_passertedid(sip_msg_t, char *, char *,
extern int sip_add_ppreferredid(sip_msg_t, char *, char *,
extern int sip_add_rseq(sip_msg_t, int);
extern int sip_get_min_expires(sip_msg_t, int *);
extern int sip_get_date_day(sip_msg_t, int *);
extern int sip_get_date_year(sip_msg_t, int *);
extern int sip_get_expires(sip_msg_t, int *);
extern int sip_get_warning_code(sip_header_value_t, int *);
extern int sip_get_retry_after_time(sip_msg_t, int *);
int *);
int *);
int *);
int *);
extern int sip_get_rack_resp_num(sip_msg_t, int *);
extern int sip_get_rack_cseq_num(sip_msg_t, int *);
extern int sip_get_rseq_resp_num(sip_msg_t, int *);
char *);
extern int sip_delete_header_by_name(sip_msg_t, char *);
extern int sip_add_header(sip_msg_t, char *);
extern int sip_delete_header(sip_header_t);
char *, char *);
char *, int, char *);
extern char *sip_get_resp_desc(int);
extern char *sip_get_branchid(const sip_msg_t, int *);
int *);
extern const struct sip_value *sip_get_header_value(
const struct sip_header *, int *);
char *, int *);
char *, int);
extern char *sip_msg_to_str(sip_msg_t, int *);
extern char *sip_hdr_to_str(sip_header_t, int *);
extern char *sip_reqline_to_str(sip_msg_t, int *);
extern char *sip_respline_to_str(sip_msg_t, int *);
extern int sip_get_response_code(sip_msg_t, int *);
extern int sip_get_msg_len(sip_msg_t, int *);
int *);
extern int sip_get_callseq_num(sip_msg_t, int *);
extern int sip_get_via_sent_by_port(sip_header_value_t, int *);
int *);
int *);
int *);
extern int sip_get_maxforward(sip_msg_t, int *);
extern int sip_get_content_length(sip_msg_t, int *);
extern char *sip_get_content(sip_msg_t, int *);
char *, char *, int, char *, uint32_t, int);
sip_dialog_t, char *, char *, int, char *,
uint32_t, int);
extern int sip_get_dialog_state(sip_dialog_t, int *);
extern int sip_get_dialog_method(sip_dialog_t, int *);
extern int sip_get_dialog_msgcnt(sip_dialog_t, int *);
int *);
int *);
extern void sip_hold_dialog(sip_dialog_t);
extern void sip_release_dialog(sip_dialog_t);
extern void sip_delete_dialog(sip_dialog_t);
extern void sip_free_parsed_uri(sip_uri_t);
int *);
int *);
int *);
int *);
extern int sip_get_uri_port(const struct sip_uri *,
int *error);
int *);
int *);
int *);
int *);
int *);
int *);
extern int sip_get_uri_errflags(const struct sip_uri *,
int *);
extern char *sip_uri_errflags_to_str(int);
/* Transaction functions */
extern char *sip_get_trans_branchid(sip_transaction_t,
int *);
int *);
extern int sip_get_trans_state(sip_transaction_t, int *);
int *);
int *);
extern void sip_hold_trans(sip_transaction_t);
extern void sip_release_trans(sip_transaction_t);
extern const struct sip_conn_object *sip_get_trans_conn_obj(
sip_transaction_t, int *);
/* Logging functions */
extern int sip_enable_trans_logging(FILE *, int);
extern int sip_enable_dialog_logging(FILE *, int);
extern void sip_disable_trans_logging(void);
extern void sip_disable_dialog_logging(void);
/* Traffic measurement functions */
extern int sip_get_counter_value(int, int, void *, size_t);
extern int sip_enable_counters(int);
extern int sip_disable_counters(int);
#ifdef __cplusplus
}
#endif
#endif /* _SIP_H */