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

📄 stun.h

📁 基于sip协议的网络电话源码
💻 H
字号:
/* $Id *//*  * Copyright (C) 2003-2005 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#ifndef __PJ_STUN_H__#define __PJ_STUN_H__/** * @file stun.h * @brief STUN client. */#include <pjlib-util/types.h>#include <pj/sock.h>/** * @defgroup PJLIB_UTIL_STUN_CLIENT Mini/Tiny STUN Client * @ingroup PJLIB_UTIL * @{ */PJ_BEGIN_DECL/** * This enumeration describes STUN message types. */typedef enum pj_stun_msg_type{    PJ_STUN_BINDING_REQUEST		    = 0x0001,    PJ_STUN_BINDING_RESPONSE		    = 0x0101,    PJ_STUN_BINDING_ERROR_RESPONSE	    = 0x0111,    PJ_STUN_SHARED_SECRET_REQUEST	    = 0x0002,    PJ_STUN_SHARED_SECRET_RESPONSE	    = 0x0102,    PJ_STUN_SHARED_SECRET_ERROR_RESPONSE    = 0x0112} pj_stun_msg_type;/** * This enumeration describes STUN attribute types. */typedef enum pj_stun_attr_type{    PJ_STUN_ATTR_MAPPED_ADDR = 1,    PJ_STUN_ATTR_RESPONSE_ADDR,    PJ_STUN_ATTR_CHANGE_REQUEST,    PJ_STUN_ATTR_SOURCE_ADDR,    PJ_STUN_ATTR_CHANGED_ADDR,    PJ_STUN_ATTR_USERNAME,    PJ_STUN_ATTR_PASSWORD,    PJ_STUN_ATTR_MESSAGE_INTEGRITY,    PJ_STUN_ATTR_ERROR_CODE,    PJ_STUN_ATTR_UNKNOWN_ATTRIBUTES,    PJ_STUN_ATTR_REFLECTED_FORM} pj_stun_attr_type;/** * This structre describes STUN message header. */typedef struct pj_stun_msg_hdr{    pj_uint16_t		type;    pj_uint16_t		length;    pj_uint32_t		tsx[4];} pj_stun_msg_hdr;/** * This structre describes STUN attribute header. */typedef struct pj_stun_attr_hdr{    pj_uint16_t		type;    pj_uint16_t		length;} pj_stun_attr_hdr;/** * This structre describes STUN MAPPED-ADDR attribute. */typedef struct pj_stun_mapped_addr_attr{    pj_stun_attr_hdr	hdr;    pj_uint8_t		ignored;    pj_uint8_t		family;    pj_uint16_t		port;    pj_uint32_t		addr;} pj_stun_mapped_addr_attr;typedef pj_stun_mapped_addr_attr pj_stun_response_addr_attr;typedef pj_stun_mapped_addr_attr pj_stun_changed_addr_attr;typedef pj_stun_mapped_addr_attr pj_stun_src_addr_attr;typedef pj_stun_mapped_addr_attr pj_stun_reflected_form_attr;typedef struct pj_stun_change_request_attr{    pj_stun_attr_hdr	hdr;    pj_uint32_t		value;} pj_stun_change_request_attr;typedef struct pj_stun_username_attr{    pj_stun_attr_hdr	hdr;    pj_uint32_t		value[1];} pj_stun_username_attr;typedef pj_stun_username_attr pj_stun_password_attr;typedef struct pj_stun_error_code_attr{    pj_stun_attr_hdr	hdr;    pj_uint16_t		ignored;    pj_uint8_t		err_class;    pj_uint8_t		number;    char		reason[4];} pj_stun_error_code_attr;typedef struct pj_stun_msg{    pj_stun_msg_hdr    *hdr;    int			attr_count;    pj_stun_attr_hdr   *attr[PJ_STUN_MAX_ATTR];} pj_stun_msg;/* STUN message API (stun.c). */PJ_DECL(pj_status_t) pj_stun_create_bind_req( pj_pool_t *pool, 					      void **msg, pj_size_t *len,					      pj_uint32_t id_hi,					      pj_uint32_t id_lo);PJ_DECL(pj_status_t) pj_stun_parse_msg( void *buf, pj_size_t len,				        pj_stun_msg *msg);PJ_DECL(void*) pj_stun_msg_find_attr( pj_stun_msg *msg, pj_stun_attr_type t);/** * This is the main function to request the mapped address of local sockets * to multiple STUN servers. This function is able to find the mapped  * addresses of multiple sockets simultaneously, and for each socket, two * requests will be sent to two different STUN servers to see if both servers * get the same public address for the same socket. (Note that application can * specify the same address for the two servers, but still two requests will * be sent for each server). * * This function will perform necessary retransmissions of the requests if * response is not received within a predetermined period. When all responses * have been received, the function will compare the mapped addresses returned * by the servers, and when both are equal, the address will be returned in * \a mapped_addr argument. * * @param pf		The pool factory where memory will be allocated from. * @param sock_cnt	Number of sockets in the socket array. * @param sock		Array of local UDP sockets which public addresses are *			to be queried from the STUN servers. * @param srv1		Host name or IP address string of the first STUN *			server. * @param port1		The port number of the first STUN server.  * @param srv2		Host name or IP address string of the second STUN *			server. * @param port2		The port number of the second STUN server.  * @param mapped_addr	Array to receive the mapped public address of the local *			UDP sockets, when the function returns PJ_SUCCESS. * * @return		This functions returns PJ_SUCCESS if responses are *			received from all servers AND all servers returned the *			same mapped public address. Otherwise this function may *			return one of the following error codes: *			- PJLIB_UTIL_ESTUNNOTRESPOND: no respons from servers. *			- PJLIB_UTIL_ESTUNSYMMETRIC: different mapped addresses *			  are returned by servers. *			- etc. * */PJ_DECL(pj_status_t) pj_stun_get_mapped_addr( pj_pool_factory *pf,					      int sock_cnt, pj_sock_t sock[],					      const pj_str_t *srv1, int port1,					      const pj_str_t *srv2, int port2,					      pj_sockaddr_in mapped_addr[]);PJ_END_DECL/** * @} */#endif	/* __PJ_STUN_H__ */

⌨️ 快捷键说明

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