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

📄 stun.h

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 H
字号:
/* * This file is part of the Sofia-SIP package * * Copyright (C) 2005-2006 Nokia Corporation. * * Contact: Pekka Pessi <pekka.pessi@nokia.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * */#ifndef STUN_H/** Defined when <sofia-sip/stun.h> has been included. */#define STUN_H/**@file sofia-sip/stun.h STUN module public interface * * @author Martti Mela <Martti.Mela@nokia.com> * @author Tat Chan <Tat.Chan@nokia.com> * @author Pekka Pessi <Pekka.Pessi@nokia.com> * @author Kai Vehmanen <kai.vehmanen@nokia.com> */#include <sofia-sip/stun_common.h>#ifndef SU_WAIT_H#include <sofia-sip/su_wait.h>#endif#ifndef SU_TAG_H#include <sofia-sip/su_tag.h>#endif#include <sofia-sip/su_localinfo.h>SOFIA_BEGIN_DECLStypedef struct stun_handle_s     stun_handle_t;typedef struct stun_request_s    stun_request_t;typedef struct stun_discovery_s  stun_discovery_t;typedef struct stun_dns_lookup_s stun_dns_lookup_t;typedef struct stun_mini_s     stun_mini_t;#ifndef STUN_MAGIC_T #define STUN_MAGIC_T            struct stun_magic_t#endif/** STUN server context */typedef STUN_MAGIC_T stun_magic_t;#ifndef STUN_DISCOVERY_MAGIC_T #define STUN_DISCOVERY_MAGIC_T            struct stun_discovery_magic_t#endif/** STUN discovery_ context */typedef STUN_DISCOVERY_MAGIC_T stun_discovery_magic_t;/** Name and version of STUN software */SOFIAPUBVAR char const stun_version[];/** * STUN Action types. These define the current discovery process. * Defined as a bitmap. */typedef enum stun_action_s {  stun_action_no_action = 1,  stun_action_tls_query = 2,  stun_action_binding_request = 4,  stun_action_keepalive = 8,  stun_action_test_nattype = 16,  stun_action_test_lifetime = 32,} stun_action_t;/** * NAT types * * XXX: should be extended to distinguish between filtering and *      mapping allocation behaviour (see IETF BEHAVE documents) * * Note: the NAT type detection algorithm can fail in  *       case where the NAT behaves in a nondeterministic  *       fashion. **/typedef enum stun_nattype_e {  stun_nat_unknown = 0,         /* no NAT between client and STUN server */  stun_open_internet,       /* UDP communication blocked by FW */  stun_udp_blocked,         /* No NAT, but a FW element is performing address and port   * restricted filtering. */  stun_sym_udp_fw,          /* Endpoint independent filtering (endpoint independent mapping)    * RFC3489 full cone NAT. */  stun_nat_full_cone,       /* Address restricted filtering (endpoint independent mapping),   * RFC3489 restricted cone NAT. */  stun_nat_res_cone,        /* Address and port restricted filtering (endpoint    * independent mapping), RFC3489 port restricted cone */  stun_nat_port_res_cone,   /* Endpoint independent filtering, endpoint dependent mapping. */  stun_nat_ei_filt_ad_map,   /* Address dependent filtering, endpoint dependent mapping. */  stun_nat_ad_filt_ad_map,   /* Address and port dependent filtering, endpoint dependent mapping    * RFC3489 symmetric NAT). */  stun_nat_adp_filt_ad_map, } stun_nattype_t;/** * States of the STUN client->server query process. * * @see stun_bind() * @see stun_obtain_shared_secret() * @see stun_test_nattype() * @see stun_test_lifetime() */ typedef enum stun_state_e {    stun_no_assigned_event,  /* TLS events; see stun_obtain_shared_request() */  stun_tls_connecting,          /**< Connecting to TLS port */  stun_tls_ssl_connecting,      /**< Started the TLS/SSL handshake */  stun_tls_writing,             /**< Next step: send request */  stun_tls_closing,             /**< Closing TLS connection */  stun_tls_reading,             /**< Request send, waiting for response */  stun_tls_done,                /**< Shared-secret acquired */  /* STUN discovery events */  stun_discovery_done,          /**< Discovery process done */  /* STUN errors */  /* Do not change the order! Errors need to be after stun_error */  stun_error,                   /**< Generic error in discovery process */  stun_tls_connection_timeout,  /**< No response to connect attempt */  stun_tls_connection_failed,   /**< No response from TLS/SSL server  */  stun_tls_ssl_connect_failed,  /**< TLS/SSL handshake failed */  stun_discovery_error,         /**< Error in discovery process */  stun_discovery_timeout,       /**< No response to discovery request */} stun_state_t;/* ------------------------------------------------------------------- * Calback function prototypes (signals emitted by the stack) *//* Per discovery */typedef void (*stun_discovery_f)(stun_discovery_magic_t *magic,				 stun_handle_t *sh,				 stun_discovery_t *sd,				 stun_action_t action,				 stun_state_t event);/** Callback invoked by stun handle when it has a message to send. */typedef int (*stun_send_callback)(stun_magic_t *magic,				  stun_handle_t *sh,				  int socket,				  void *data,				  unsigned len,				  int only_a_keepalive);/** Callback for delivering DNS lookup results */typedef void (*stun_dns_lookup_f)(stun_dns_lookup_t *self,				  stun_magic_t *magic);/* ------------------------------------------------------------------- * Functions for managing STUN handles. */SOFIAPUBFUN stun_handle_t *stun_handle_init(su_root_t *root,					    tag_type_t, tag_value_t, ...);SOFIAPUBFUN void stun_handle_destroy(stun_handle_t *sh);SOFIAPUBFUN su_root_t *stun_root(stun_handle_t *sh);SOFIAPUBFUN int stun_is_requested(tag_type_t tag, tag_value_t value, ...);SOFIAPUBFUN char const *stun_str_state(stun_state_t state);SOFIAPUBFUN su_addrinfo_t const *stun_server_address(stun_handle_t *sh);SOFIAPUBFUNint stun_process_message(stun_handle_t *sh, su_socket_t s,			 su_sockaddr_t *sa, socklen_t salen,			 void *data, isize_t len);SOFIAPUBFUNint stun_process_request(su_socket_t s, stun_msg_t *req,			 int sid, su_sockaddr_t *from_addr,			 socklen_t from_len);/* -------------------------------------------------------------------  * Functions for 'Binding Discovery' usage (RFC3489/3489bis) */SOFIAPUBFUNint stun_obtain_shared_secret(stun_handle_t *sh, stun_discovery_f,			      stun_discovery_magic_t *magic,			      tag_type_t tag, tag_value_t value, ...);SOFIAPUBFUN int stun_bind(stun_handle_t *sh, 	      stun_discovery_f, stun_discovery_magic_t *magic,	      tag_type_t tag, tag_value_t value, ...);SOFIAPUBFUN int stun_discovery_get_address(stun_discovery_t *sd,			       void *addr,			       socklen_t *return_addrlen);SOFIAPUBFUN su_socket_t stun_discovery_get_socket(stun_discovery_t *sd);SOFIAPUBFUN int stun_discovery_release_socket(stun_discovery_t *sd);SOFIAPUBFUNint stun_test_nattype(stun_handle_t *sh,		       stun_discovery_f, stun_discovery_magic_t *magic,		       tag_type_t tag, tag_value_t value, ...);SOFIAPUBFUN char const *stun_nattype_str(stun_discovery_t *sd);SOFIAPUBFUN stun_nattype_t stun_nattype(stun_discovery_t *sd);SOFIAPUBFUNint stun_test_lifetime(stun_handle_t *sh,		       stun_discovery_f, stun_discovery_magic_t *magic,		       tag_type_t tag, tag_value_t value, ...);SOFIAPUBFUN int stun_lifetime(stun_discovery_t *sd);/* -------------------------------------------------------------------  * Functions for 'Connectivity Check' and 'NAT Keepalives' usages (RFC3489bis) */SOFIAPUBFUN int stun_set_uname_pwd(stun_handle_t *sh,		       const char *uname,		       isize_t len_uname, 		       const char *pwd,		       isize_t len_pwd);SOFIAPUBFUN int stun_msg_is_keepalive(uint16_t data);SOFIAPUBFUN int stun_message_length(void *data, isize_t len, int end_of_message);/* Create a keepalive dispatcher for bound SIP sockets */SOFIAPUBFUN int stun_keepalive(stun_handle_t *sh,		   su_sockaddr_t *sa,		   tag_type_t tag, tag_value_t value,		   ...);SOFIAPUBFUN int stun_keepalive_destroy(stun_handle_t *sh, su_socket_t s);/* ------------------------------------------------------------------- * Functions for 'Short-Term password' usage (RFC3489bis) *//* (not implemented, see stun_request_shared_secret()) *//* ------------------------------------------------------------------- * Functions for STUN server discovery using DNS (RFC3489/3489bis) */SOFIAPUBFUN stun_dns_lookup_t *stun_dns_lookup(stun_magic_t *magic, 				   su_root_t *root,				   stun_dns_lookup_f func, 				   const char *domain);SOFIAPUBFUN void stun_dns_lookup_destroy(stun_dns_lookup_t *self);SOFIAPUBFUN int stun_dns_lookup_udp_addr(stun_dns_lookup_t *,					 const char **target, uint16_t *port);SOFIAPUBFUN int stun_dns_lookup_tcp_addr(stun_dns_lookup_t *self,					 const char **target, uint16_t *port);SOFIAPUBFUN int stun_dns_lookup_stp_addr(stun_dns_lookup_t *self,					 const char **target, uint16_t *port);/* ------------------------------------------------------------------- * Functions for minimal STUN server */SOFIAPUBFUN stun_mini_t *stun_mini_create(void);SOFIAPUBFUN void stun_mini_destroy(stun_mini_t *);SOFIAPUBFUN int stun_mini_add_socket(stun_mini_t *server,				     su_socket_t socket);SOFIAPUBFUN int stun_mini_remove_socket(stun_mini_t *server,					su_socket_t socket);SOFIAPUBFUN void stun_mini_request(stun_mini_t *server, su_socket_t socket,				   void *msg, ssize_t msglen,				   void *addr, socklen_t addrlen);SOFIA_END_DECLS#endif /* !defined(STUN_H) */

⌨️ 快捷键说明

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