123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- /*
- * $Id$
- *
- * Copyright (C) 2001-2003 FhG Fokus
- *
- * This file is part of ser, a free SIP server.
- *
- * ser 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
- *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- * [email protected]
- *
- * ser 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
- *
- *
- * History:
- * --------
- * 2006-10-13 created (vlada)
- */
- #ifndef _ser_stun_h
- #define _ser_stun_h
- #ifdef USE_STUN
- #include <openssl/sha.h>
- #include "str.h"
- #include "tcp_conn.h"
- #include "ip_addr.h"
- /* type redefinition */
- typedef unsigned char UCHAR_T;
- typedef unsigned short USHORT_T;
- typedef unsigned int UINT_T;
- typedef unsigned long ULONG_T;
- /* STUN message types supported by SER */
- #define BINDING_REQUEST 0x0001
- #define BINDING_RESPONSE 0x0101
- #define BINDING_ERROR_RESPONSE 0x0111
- /* common STUN attributes */
- #define MAPPED_ADDRESS_ATTR 0x0001
- #define USERNAME_ATTR 0x0006
- #define MESSAGE_INTEGRITY_ATTR 0x0008
- #define ERROR_CODE_ATTR 0x0009
- #define UNKNOWN_ATTRIBUTES_ATTR 0x000A
- /* STUN attributes defined by rfc5389 */
- #define REALM_ATTR 0x0014
- #define NONCE_ATTR 0x0015
- #define XOR_MAPPED_ADDRESS_ATTR 0x0020
- #define FINGERPRINT_ATTR 0x8028
- #define SOFTWARE_ATTR 0x8022
- #define ALTERNATE_SERVER_ATTR 0x8023
- /* STUN attributes defined by rfc3489 */
- #define RESPONSE_ADDRESS_ATTR 0x0002
- #define CHANGE_REQUEST_ATTR 0x0003
- #define SOURCE_ADDRESS_ATTR 0x0004
- #define CHANGED_ADDRESS_ATTR 0x0005
- #define REFLECTED_FROM_ATTR 0x000b
- /* STUN error codes supported by SER */
- #define RESPONSE_OK 200
- #define TRY_ALTERNATE_ERR 300
- #define BAD_REQUEST_ERR 400
- #define UNAUTHORIZED_ERR 401
- #define UNKNOWN_ATTRIBUTE_ERR 420
- #define STALE_CREDENTIALS_ERR 430
- #define INTEGRITY_CHECK_ERR 431
- #define MISSING_USERNAME_ERR 432
- #define USE_TLS_ERR 433
- #define MISSING_REALM_ERR 434
- #define MISSING_NONCE_ERR 435
- #define UNKNOWN_USERNAME_ERR 436
- #define STALE_NONCE_ERR 438
- #define SERVER_ERROR_ERR 500
- #define GLOBAL_FAILURE_ERR 600
- #define TRY_ALTERNATE_TXT "Try Alternate"
- #define BAD_REQUEST_TXT "Bad Request"
- #define UNAUTHORIZED_TXT "Unauthorized"
- #define UNKNOWN_ATTRIBUTE_TXT "Unknown Attribute"
- #define STALE_CREDENTIALS_TXT "Stale Credentials"
- #define INTEGRITY_CHECK_TXT "Integrity Check Failure"
- #define MISSING_USERNAME_TXT "Missing Username"
- #define USE_TLS_TXT "Use TLS"
- #define MISSING_REALM_TXT "Missing Realm"
- #define MISSING_NONCE_TXT "Missing Nonce"
- #define UNKNOWN_USERNAME_TXT "Unknown Username"
- #define STALE_NONCE_TXT "Stale Nonce"
- #define SERVER_ERROR_TXT "Server Error"
- #define GLOBAL_FAILURE_TXT "Global Failure"
- /* other stuff */
- #define MAGIC_COOKIE 0x2112A442
- #define MAGIC_COOKIE_2B 0x2112 /* because of XOR for port */
- #define MANDATORY_ATTR 0x7fff
- #define PAD4 4
- #define PAD64 64
- #define STUN_MSG_LEN 516
- #define IPV4_LEN 4
- #define IPV6_LEN 16
- #define IPV4_FAMILY 0x0001
- #define IPV6_FAMILY 0x0002
- #define FATAL_ERROR -1
- #define IP_ADDR 4
- #define XOR 1
- #define TRANSACTION_ID 12
- /** padd len to a multiple of sz.
- * sz must be a power of the form 2^k (e.g. 2, 4, 8, 16 ...)
- */
- #define PADD_TO(len, sz) (((len) + (sz)-1) & (~((sz) - 1)))
- #define PADDED_TO_FOUR(len) PADD_TO(len, 4)
- #define PADDED_TO_SIXTYFOUR(len) PADD_TO(len, 64)
- struct transaction_id {
- UINT_T magic_cookie;
- UCHAR_T id[TRANSACTION_ID];
- };
- struct stun_hdr {
- USHORT_T type;
- USHORT_T len;
- struct transaction_id id;
- };
- struct stun_ip_addr {
- USHORT_T family; /* 0x01: IPv4; 0x02: IPv6 */
- USHORT_T port;
- UINT_T ip[IP_ADDR];
- };
- struct stun_buffer {
- str buf;
- USHORT_T empty; /* number of free bytes in buf before
- * it'll be necessary to realloc the buf
- */
- };
- struct stun_unknown_att {
- USHORT_T type;
- struct stun_unknown_att* next;
- };
- struct stun_attr {
- USHORT_T type;
- USHORT_T len;
- };
- struct stun_msg {
- struct stun_hdr hdr;
- struct stun_ip_addr ip_addr; /* XOR values for rfc3489bis,
- normal values for rfc3489 */
- struct stun_buffer msg;
- UCHAR_T old; /* true: the format of message is in
- accordance with rfc3489 */
- };
- /*
- * stun functions called from ser
- */
- int stun_process_msg(char* buf, unsigned len, struct receive_info* ri);
- #endif /* USE_STUN */
- #endif /* _ser_stun_h */
|