📄 sip.h
字号:
/* * 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 + -