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

📄 stun_common.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 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_COMMON_H/** Defined when <sofia-sip/stun_common.h> has been included. */#define STUN_COMMON_H/** * @file sofia-sip/stun_common.h * @brief  *  * @author Tat Chan <Tat.Chan@nokia.com> *  * @date Created: Fri Oct  3 13:39:55 2003 ppessi *  */#include <sofia-sip/su_localinfo.h>SOFIA_BEGIN_DECLS/* Define Message Types */#define BINDING_REQUEST               0x0001#define BINDING_RESPONSE              0x0101#define BINDING_ERROR_RESPONSE        0x0111#define SHARED_SECRET_REQUEST         0x0002#define SHARED_SECRET_RESPONSE        0x0102#define SHARED_SECRET_ERROR_RESPONSE  0x0112/* Define Attribute Types */#define MAPPED_ADDRESS                0x0001#define RESPONSE_ADDRESS              0x0002#define CHANGE_REQUEST                0x0003#define SOURCE_ADDRESS                0x0004#define CHANGED_ADDRESS               0x0005#define USERNAME                      0x0006#define PASSWORD                      0x0007#define MESSAGE_INTEGRITY             0x0008#define ERROR_CODE                    0x0009#define UNKNOWN_ATTRIBUTES            0x000a#define REFLECTED_FROM                0x000b#define STUN_A_REALM                  0x0014 /* XXX: check value in 3489bis-05+ */#define STUN_A_NONCE                  0x0015 /* XXX: check value in 3489bis-05+ */#define STUN_A_XOR_MAPPED_ADDRESS     0x0020#define STUN_A_FINGERPRINT            0x0023#define STUN_A_SERVER                 0x8022#define STUN_A_ALTERNATE_SERVER       0x8023#define STUN_A_REFRESH_INTERVAL       0x8024/* Defines for mandatory and optional attributes */#define STUN_A_LAST_MANDATORY         0x0023 /**< largest attribute in the current 						spec (see above for exceptions						for buggy servers) */#define STUN_A_OPTIONAL               0x7fff/* Compability attribute types */#define STUN_A_ALTERNATE_SERVER_DEP   0x000e /**< historic from early fc3489bis drafts */#define STUN_A_BUGGYSERVER_XORONLY    0x0021 /**< workaround for stund-0.94 and older */#define STUN_A_BUGGYSERVER_SERVER     0x0022 /**< workaround for stund-0.94 and older */#define LARGEST_ATTRIBUTE             STUN_A_LAST_MANDATORY /**< deprecated API */#define OPTIONAL_ATTRIBUTE            STUN_A_OPTIONAL /**< deprecated API *//* Stun response codes */#define STUN_400_BAD_REQUEST             400#define STUN_401_UNAUTHORIZED            401#define STUN_420_UNKNOWN_ATTRIBUTE       420#define STUN_430_STALE_CREDENTIALS       430#define STUN_431_INTEGRITY_CHECK_FAILURE 431#define STUN_432_MISSING_USERNAME        432#define STUN_433_USE_TLS                 433#define STUN_500_SERVER_ERROR            500#define STUN_600_GLOBAL_FAILURE          600/* flags for CHANGE_REQUEST */#define STUN_CR_CHANGE_IP               0x0004#define STUN_CR_CHANGE_PORT             0x0002/* mask for ERROR_CODE */#define STUN_EC_CLASS                   0x0070#define STUN_EC_NUM                     0x000F#define RAND_MAX_16                     65535#define STUN_TID_BYTES                  16/* other protocol specific parameters */#define STUN_MAX_RETRX                  5 /* should be 8? */#define STUN_MAX_RETRX_INT              1600  /**< max retrx interval in						   millisec */#define STUN_DEFAULT_PORT               3478  /**< from RFC3489 *//* * STUN header format */  /*    0                   1                   2                   3    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |         message type          |       message length          |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |                                                               |   |                       Transaction ID                          |   |                                                               |   |                                                               |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  */struct stun_buffer_s {  unsigned char *data;      /**< Pointer to data */  unsigned size;            /**< Size of buffer */};typedef struct stun_buffer_s stun_buffer_t;typedef struct {  uint16_t msg_type;        /**< message type */  uint16_t msg_len;         /**< message length */  uint8_t tran_id[16];      /**< transaction id, 128 bits */} stun_hdr_t;typedef struct stun_attr_s {  uint16_t attr_type;       /**< attribute type */  void *pattr;              /**< pointer to corresponding attribute */  stun_buffer_t enc_buf;    /**< encoded attribue */  struct stun_attr_s *next; /**< next attribute */} stun_attr_t;typedef struct {  stun_hdr_t stun_hdr;  stun_attr_t *stun_attr;  stun_buffer_t enc_buf;    /**< to store already encoded stun msg */} stun_msg_t;/* stun attribute definition *//* stun_sockaddr_t is used for:   MAPPED_ADDRESS   RESPONSE_ADDRESS   SOURCE_ADDRESS   CHANGED_ADDRESS   REFLECTED_FROM*/typedef struct sockaddr_in stun_attr_sockaddr_t;/* CHANGE_REQUEST attribute */typedef struct stun_attr_uint32_s {  uint32_t value;} stun_attr_uint32_t;typedef stun_attr_uint32_t stun_attr_changerequest_t;/* ERROR_CODE attribute */typedef struct {  int code;  char *phrase;} stun_attr_errorcode_t;/* USERNAME attribute *//* typedef struct {  stun_buffer_t *uname;} stun_attr_username_t;*/typedef stun_buffer_t stun_attr_username_t;/* PASSWORD attribute */typedef stun_buffer_t stun_attr_password_t;/* UNKNOWN_ATTRIBUTES attribute */typedef struct stun_attr_unknownattributes_s{  uint16_t attr_type[2];  struct stun_attr_unknownattributes_s *next;} stun_attr_unknownattributes_t;/* Common functions */int stun_parse_message(stun_msg_t *msg);int stun_parse_attribute(stun_msg_t *msg, unsigned char *p);int stun_parse_attr_address(stun_attr_t *attr, const unsigned char *p, unsigned len);int stun_parse_attr_error_code(stun_attr_t *attr, const unsigned char *p, unsigned len);int stun_parse_attr_unknown_attributes(stun_attr_t *attr, const unsigned char *p, unsigned len);int stun_parse_attr_uint32(stun_attr_t *attr, const unsigned char *p, unsigned len);int stun_parse_attr_buffer(stun_attr_t *attr, const unsigned char *p, unsigned len);stun_attr_t *stun_get_attr(stun_attr_t *attr, uint16_t attr_type);int stun_encode_address(stun_attr_t *attr);int stun_encode_uint32(stun_attr_t *attr);int stun_encode_buffer(stun_attr_t *attr);int stun_encode_error_code(stun_attr_t *attr);int stun_encode_message_integrity(stun_attr_t *attr, unsigned char *buf, int len, stun_buffer_t *pwd);int stun_encode_type_len(stun_attr_t *attr, uint16_t len);int stun_encode_response_address(stun_attr_t *attr);int stun_validate_message_integrity(stun_msg_t *msg, stun_buffer_t *pwd); int stun_copy_buffer(stun_buffer_t *p, stun_buffer_t *p2);void stun_init_buffer(stun_buffer_t *p);int stun_free_buffer(stun_buffer_t *p);int stun_free_message(stun_msg_t *msg);int stun_init_message(stun_msg_t *msg);/* int stun_send_message(int sockfd, struct sockaddr_in *to_addr, stun_msg_t *msg, stun_buffer_t *pwd); */int stun_encode_message(stun_msg_t *msg, stun_buffer_t *pwd);char const *stun_response_phrase(int status);void debug_print(stun_buffer_t *buf);char const *stun_attr_phrase(uint16_t type);/**Determines and returns local IP address * * Address is determined using su_getlocalinfo() function. * * @param family        network address family in use * @return local ip address */char *stun_determine_ip_address(int family);SOFIA_END_DECLS#endif /* !defined STUN_COMMON_H */

⌨️ 快捷键说明

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