⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sip.h

📁 VoIP use SIP protocol interface
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * 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 * or http://www.opensolaris.org/os/licensing. * 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 2006 Sun Microsystems, Inc.  All rights reserved. * Use is subject to license terms. */#ifndef	_SIP_H#define	_SIP_H#pragma ident	"@(#)sip.h	1.39	06/08/17 SMI"#ifdef	__cplusplusextern "C" {#endif#define	_XPG4_2#define	__EXTENSIONS__#ifndef	DEBUG#define	NDEBUG	1#endif#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <strings.h>#include <assert.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <pthread.h>#include <errno.h>#include <unistd.h>#include <signal.h>/* Send a SIP message statefully */#define	SIP_SEND_STATEFUL	0x0001/* Enable multiple dialogs if a request is forked */#define	SIP_DIALOG_ON_FORK	0x0010#define	SIP_CRLF 		"\r\n"#define	SKIP_CRLF(msg_ptr)	(msg_ptr = msg_ptr + 2)#define	SIP_VERSION		"SIP/2.0"#define	SIP			"SIP"/* SIP headers */#define	SIP_TO				"TO"#define	SIP_FROM			"FROM"#define	SIP_TAG				"TAG="#define	SIP_CONTENT_LENGTH		"CONTENT-LENGTH"#define	SIP_CONTENT_TYPE		"CONTENT-TYPE"#define	SIP_CALL_ID			"CALL-ID"#define	SIP_CSEQ			"CSEQ"#define	SIP_MAX_FORWARDS		"MAX-FORWARDS"#define	SIP_CONTACT			"CONTACT"#define	SIP_VIA				"Via"#define	SIP_RECORD_ROUTE		"RECORD-ROUTE"#define	SIP_ROUTE			"ROUTE"#define	SIP_ACCEPT			"ACCEPT"#define	SIP_ACCEPT_ENCODE		"ACCEPT-ENCODING"#define	SIP_ACCEPT_LANG			"ACCEPT-LANGUAGE"#define	SIP_ALERT_INFO			"ALERT-INFO"#define	SIP_ALLOW			"ALLOW"#define	SIP_CALL_INFO			"CALL-INFO"#define	SIP_CONTENT_DIS			"CONTENT-DISPOSITION"#define	SIP_CONTENT_ENCODE		"CONTENT-ENCODING"#define	SIP_CONTENT_LANG		"CONTENT-LANGUAGE"#define	SIP_DATE			"DATE"#define	SIP_ERROR_INFO			"ERROR-INFO"#define	SIP_EXPIRE			"EXPIRES"#define	SIP_IN_REPLY_TO			"IN-REPLY-TO"#define	SIP_MIN_EXPIRE			"MIN-EXPIRES"#define	SIP_MIME_VERSION		"MIME-VERSION"#define	SIP_ORGANIZATION		"ORGANIZATION"#define	SIP_PRIORITY			"PRIORITY"#define	SIP_REQUIRE			"REQUIRE"#define	SIP_REPLYTO			"REPLY-TO"#define	SIP_RETRY_AFTER			"RETRY-AFTER"#define	SIP_SERVER			"SERVER"#define	SIP_SUBJECT			"SUBJECT"#define	SIP_SUPPORT			"SUPPORTED"#define	SIP_TIMESTAMP			"TIMESTAMP"#define	SIP_UNSUPPORT			"UNSUPPORTED"#define	SIP_USER_AGENT			"USER-AGENT"#define	SIP_WARNING			"WARNING"#define	SIP_ALLOW_EVENTS		"ALLOW-EVENTS"#define	SIP_EVENT			"EVENT"#define	SIP_SUBSCRIPTION_STATE		"SUBSCRIPTION-STATE"#define	SIP_WWW_AUTHEN			"WWW-AUTHENTICATE"#define	SIP_AUTHOR			"AUTHORIZATION"#define	SIP_AUTHEN_INFO			"AUTHENTICATION-INFO"#define	SIP_PROXY_AUTHOR		"PROXY-AUTHORIZATION"#define	SIP_PROXY_AUTHEN		"PROXY-AUTHENTICATE"#define	SIP_PROXY_REQ			"PROXY-REQUIRE"#define	SIP_PASSERTEDID			"P-ASSERTED-IDENTITY"#define	SIP_PPREFERREDID		"P-PREFERRED-IDENTITY"#define	SIP_PRIVACY			"PRIVACY"#define	SIP_RACK			"RACK"#define	SIP_RSEQ			"RSEQ"/* SIP Response Codes *//* 1XX - Provisional */#define	SIP_TRYING			100#define	SIP_RINGING			180#define	SIP_CALL_IS_BEING_FORWARDED 	181#define	SIP_QUEUED			182#define	SIP_SESSION_PROGRESS		183/* 2XX - Success */#define	SIP_OK				200#define	SIP_ACCEPTED			202/* 3XX - Redirection */#define	SIP_MULTIPLE_CHOICES		300#define	SIP_MOVED_PERMANENTLY		301#define	SIP_MOVED_TEMPORARILY		302#define	SIP_USE_PROXY			303#define	SIP_ALTERNATIVE_SERVICE		304/* 4XX - Request Failed */#define	SIP_BAD_REQUEST			400#define	SIP_UNAUTHORIZED		401#define	SIP_PAYMENT_REQUIRED		402#define	SIP_FORBIDDEN			403#define	SIP_NOT_FOUND			404#define	SIP_METHOD_NOT_ALLOWED		405#define	SIP_NOT_ACCEPTABLE		406#define	SIP_PROXY_AUTH_REQUIRED		407#define	SIP_REQUEST_TIMEOUT		408#define	SIP_GONE			410#define	SIP_REQUEST_ENTITY_2_LARGE	413#define	SIP_REQUEST_URI_2_LONG		414#define	SIP_UNSUPPORTED_MEDIA_TYPE	415#define	SIP_UNSUPPORTED_URI_SCHEME	416#define	SIP_BAD_EXTENSION		420#define	SIP_EXTENSION_REQUIRED		421#define	SIP_INTERVAL_2_BRIEF		423#define	SIP_TEMPORARILY_UNAVAIL		480#define	SIP_CALL_NON_EXISTANT		481#define	SIP_LOOP_DETECTED		482#define	SIP_TOO_MANY_HOOPS		483#define	SIP_ADDRESS_INCOMPLETE		484#define	SIP_AMBIGUOUS			485#define	SIP_BUSY_HERE			486#define	SIP_REQUEST_TERMINATED		487#define	SIP_NOT_ACCEPTABLE_HERE		488#define	SIP_BAD_EVENT			489#define	SIP_REQUEST_PENDING		491#define	SIP_UNDECIPHERABLE		493/* 5XX - Server Failure */#define	SIP_SERVER_INTERNAL_ERROR	500#define	SIP_NOT_IMPLEMENTED		501#define	SIP_BAD_GATEWAY			502#define	SIP_SERVICE_UNAVAILABLE		503#define	SIP_SERVER_TIMEOUT		504#define	SIP_VERSION_NOT_SUPPORTED	505#define	SIP_MESSAGE_2_LARGE		513/* 6XX - Global Failures */#define	SIP_BUSY_EVERYWHERE		600#define	SIP_DECLINE			601#define	SIP_DOES_NOT_EXIST_ANYWHERE 	604#define	SIP_NOT_ACCEPTABLE_ANYWHERE	606/* Response error types */#define	SIP_PROVISIONAL_RESP(resp)	((resp) >= 100 && (resp) < 200)#define	SIP_FINAL_RESP(resp)		((resp) >= 200 && (resp) < 700)#define	SIP_OK_RESP(resp)		((resp) >= 200 && (resp) < 300)#define	SIP_NONOK_FINAL_RESP(resp)	((resp) >= 300 && (resp) < 700)#define	SIP_REDIRECT_RESP(resp)		((resp) >= 300 && (resp) < 400)#define	SIP_REQFAIL_RESP(resp)		((resp) >= 400 && (resp) < 500)#define	SIP_SRVFAIL_RESP(resp)		((resp) >= 500 && (resp) < 600)#define	SIP_GLOBFAIL_RESP(resp)		((resp) >= 600 && (resp) < 700)/* Types of transactions */#define	SIP_CLIENT_TRANSACTION		1#define	SIP_SERVER_TRANSACTION		2/* Transaction states */#define	SIPS_NEW_TRANSACTION		0/* Client Transaction States */#define	SIPS_CLNT_CALLING		1#define	SIPS_CLNT_INV_PROCEEDING 	2#define	SIPS_CLNT_INV_TERMINATED 	3#define	SIPS_CLNT_INV_COMPLETED		4#define	SIPS_CLNT_TRYING		5#define	SIPS_CLNT_NONINV_PROCEEDING 	6#define	SIPS_CLNT_NONINV_TERMINATED 	7#define	SIPS_CLNT_NONINV_COMPLETED	8/* Server Transaction States */#define	SIPS_SRV_INV_PROCEEDING		9#define	SIPS_SRV_INV_COMPLETED		10#define	SIPS_SRV_CONFIRMED		11#define	SIPS_SRV_INV_TERMINATED		12#define	SIPS_SRV_TRYING			13#define	SIPS_SRV_NONINV_PROCEEDING	14#define	SIPS_SRV_NONINV_COMPLETED	15#define	SIPS_SRV_NONINV_TERMINATED	16/* Dialog types */#define	SIP_UAC_DIALOG			1#define	SIP_UAS_DIALOG			2/* Dialog state */typedef enum dialog_state {	SIP_DLG_NEW = 0,	/* New dialog, no reply received yet */	SIP_DLG_EARLY,		/* Early dialog, provisional reply received */	SIP_DLG_CONFIRMED,	/* Confirmed dialog, 2xx reply received */	SIP_DLG_DESTROYED	/* Destroyed dialog */} dialog_state_t;/* SIP URI parse errors */#define	SIP_URIERR_SCHEME	0x00000001 /* invalid URL SCHEME name */#define	SIP_URIERR_USER		0x00000002 /* invalid user name */#define	SIP_URIERR_PASS		0x00000004 /* invalid password  */#define	SIP_URIERR_HOST		0x00000008 /* invalid domain name */#define	SIP_URIERR_PORT		0x00000010 /* invalid port number */#define	SIP_URIERR_PARAM	0x00000020 /* parameter specific error */#define	SIP_URIERR_HEADER	0x00000040 /* headers specific error */#define	SIP_URIERR_OPAQUE	0x00000080 /* opaque specific error */#define	SIP_URIERR_QUERY	0x00000100 /* query specific error */#define	SIP_URIERR_PATH		0x00000200 /* path specific error */#define	SIP_URIERR_REGNAME	0x00000400 /* reg-name specific error */#define	SIP_URIERR_NOURI	0x00000800 /* No URI */#define	SIP_URIERR_MEMORY	0x00001000 /* out of memory */#ifdef		__linux__#define		B_FALSE		0#define		B_TRUE		1typedef int		boolean_t;typedef unsigned char	uchar_t;typedef unsigned int	uint_t;typedef unsigned int	uint32_t;#endiftypedef struct sip_message	*sip_msg_t;typedef struct sip_header	*sip_header_t;typedef struct sip_value	*sip_header_value_t;typedef struct sip_dialog	*sip_dialog_t;typedef struct sip_uri		*sip_uri_t;typedef struct sip_conn_object	*sip_conn_object_t;typedef	struct sip_xaction	*sip_transaction_t;typedef struct sip_str {	char	*sip_str_ptr;	int	sip_str_len;}sip_str_t;/* SIP parameter */typedef struct sip_param {	sip_str_t	param_name;	sip_str_t	param_value;	struct sip_param *param_next;}sip_param_t;/* Parsed header structure */typedef struct sip_parsed_header {	int		 sip_parsed_header_version;	struct sip_value *value;	sip_header_t	sip_header;}sip_parsed_header_t;#define	SIP_PARSED_HEADER_VERSION_1	1/* Value states */typedef enum {	SIP_VALUE_ACTIVE = 0,	SIP_VALUE_BAD,	SIP_VALUE_DELETED}sip_value_state_t;/* SIP header value */typedef struct sip_value {	int			sip_value_version;	void			*next;	sip_param_t		*param_list;	sip_value_state_t	value_state; /* Active/Deleted */	sip_parsed_header_t	*parsed_header;	char			*value_start;	char			*value_end;	sip_str_t		*sip_value_uri_str;	sip_uri_t		sip_value_parse_uri;}sip_value_t;#define	SIP_VALUE_VERSION_1	1typedef struct sip_header_general {	char			*sip_hdr_start;	char			*sip_hdr_end;	char			*sip_hdr_current;	sip_parsed_header_t	*sip_hdr_parsed;}sip_hdr_general_t;/* SIP methods */typedef enum {	UNKNOWN = 0,	INVITE,	ACK,	OPTIONS,	BYE,	CANCEL,	REGISTER,	REFER,	INFO,	SUBSCRIBE,	NOTIFY,	PRACK}sip_method_t;#define	MAX_SIP_METHODS	12typedef struct sip_methods {	char *name;	/* Name of the method */	int  len;	/* Length for comparison */}sip_methods_t;extern sip_methods_t sip_methods[];/* SIP header function table */typedef struct header_function_table {	char		*header_name;	char		*header_short_name;	int		(*header_parse_func)(struct sip_header *,			    struct sip_parsed_header **);	boolean_t	(*header_check_compliance)(struct sip_parsed_header *);	boolean_t	(*header_is_equal)(struct sip_parsed_header *,			    struct sip_parsed_header *);	void		(*header_free)(struct sip_parsed_header *);}sip_header_function_t;/* Connection Manager interface */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -