c732d49e |
///*
//* Copyright (C) 2010-2011 Mamadou Diop.
//*
//* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
//*
//* This file is part of Open Source Doubango Framework.
//*
//* DOUBANGO 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 3 of the License, or
//* (at your option) any later version.
//*
//* DOUBANGO 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 DOUBANGO.
//*
//*/
//
///**@file tnet_stun_attribute.h
// * @brief STUN2(RFC 5389) attribute parser.
// *
// * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
// *
//
// */
//#define TNET_STUN_ATTRIBUTE_H
//
//#include "tinynet_config.h"
//
//#include "tnet_types.h"
//
//#include "tsk_object.h"
//#include "tsk_buffer.h"
//#include "tsk_sha1.h"
//
///**@ingroup tnet_stun_group
//* @def TNET_STUN_ATTRIBUTE
//* Converts (cast) any STUN attribute to @ref tnet_stun_attr_t pointer.
//* @param self The attribute to convert (cast).
//* @retval A pointer to @ref tnet_stun_attr_t object.
//*/
//TNET_BEGIN_DECLS
//
//#define TNET_STUN_ATTRIBUTE(self) ((tnet_stun_attr_t*)(self))
//
///**@ingroup tnet_stun_group
// * STUN IP family as per RFC 5389 subclause 15.1.
//**/
//typedef enum tnet_stun_addr_family_e {
// stun_ipv4 = 0x01,
// stun_ipv6 = 0x02
//}
//tnet_stun_addr_family_t;
//
///**@ingroup tnet_stun_group
// * STUN attribute types as per RFC 5389 subclause 18.2.
//**/
//typedef enum tnet_stun_attr_type_e {
// /* === RFC 5389 - Comprehension-required range (0x0000-0x7FFF) */
// stun_reserved = 0x0000, /**< (Reserved) */
// stun_mapped_address = 0x0001, /**< http://tools.ietf.org/html/rfc5389#page-32 */
// stun_response_address = 0x0002, /**< (Reserved; was RESPONSE-ADDRESS) */
// stun_change_address = 0x0003, /**< (Reserved; was CHANGE-ADDRESS) */
// stun_source_address = 0x0004, /**< (Reserved; was SOURCE-ADDRESS) */
// stun_changed_address = 0x0005, /**< (Reserved; was CHANGED-ADDRESS) */
// stun_username = 0x0006, /**< http://tools.ietf.org/html/rfc5389#page-34 */
// stun_password = 0x0007, /**< (Reserved; was PASSWORD) */
// stun_message_integrity = 0x0008, /**< http://tools.ietf.org/html/rfc5389#page-34 */
// stun_error_code = 0x0009, /**< http://tools.ietf.org/html/rfc5389#page-36 */
// stun_unknown_attributes = 0x000A, /**< http://tools.ietf.org/html/rfc5389#page-38 */
// stun_reflected_from = 0x000B, /**< (Reserved; was REFLECTED-FROM) */
// stun_realm = 0x0014, /**< http://tools.ietf.org/html/rfc5389#page-38 */
// stun_nonce = 0x0015, /**< http://tools.ietf.org/html/rfc5389#page-38 */
// stun_xor_mapped_address = 0x0020, /**< http://tools.ietf.org/html/rfc5389#page-33 */
//
// /* === RFC 5389 - Comprehension-optional range (0x8000-0xFFFF) */
// stun_software = 0x8022, /**< http://tools.ietf.org/html/rfc5389#page-39 */
// stun_alternate_server = 0x8023, /**< http://tools.ietf.org/html/rfc5389#page-39 */
// stun_fingerprint = 0x8028, /**< http://tools.ietf.org/html/rfc5389#page-36 */
//
// /* === draft-ietf-behave-turn-16 */
// stun_channel_number = 0x000C, /**< draft-ietf-behave-turn-16 - CHANNEL-NUMBER */
// stun_lifetime = 0x000D, /**< draft-ietf-behave-turn-16 - LIFETIME */
// stun_reserved2 = 0x0010, /**< draft-ietf-behave-turn-16 - Reserved (was BANDWIDTH) */
// stun_xor_peer_address = 0x0012, /**< draft-ietf-behave-turn-16 - XOR-PEER-ADDRESS */
// stun_data = 0x0013, /**< draft-ietf-behave-turn-16 - DATA */
// stun_xor_relayed_address = 0x0016, /**< draft-ietf-behave-turn-16 - XOR-RELAYED-ADDRESS */
// stun_even_port = 0x0018, /**< draft-ietf-behave-turn-16 - EVEN-PORT */
// stun_requested_transport = 0x0019, /**< draft-ietf-behave-turn-16 - REQUESTED-TRANSPORT */
// stun_dont_fragment = 0x001A, /**< draft-ietf-behave-turn-16 - DONT-FRAGMENT */
// stun_reserved3 = 0x0021, /**< draft-ietf-behave-turn-16 - Reserved (was TIMER-VAL) */
// stun_reservation_token = 0x0022, /**< draft-ietf-behave-turn-16 - RESERVATION-TOKEN */
//
// /* RFC 5245 */
// stun_ice_priority = 0x0024, /**< 21.2. STUN Attributes */
// stun_ice_use_candidate = 0x0025, /**< 21.2. STUN Attributes */
// stun_ice_controlled = 0x8029, /**< 21.2. STUN Attributes */
// stun_ice_controlling = 0x802A, /**< 21.2. STUN Attributes */
//}
//tnet_stun_attr_type_t;
//
//
///**@ingroup tnet_stun_group
// RFC 5389 - 15. STUN Attributes
//*/
//typedef struct tnet_stun_attribute_s {
// TSK_DECLARE_OBJECT;
// /*
// 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
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | Type | Length |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | Value (variable) ....
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// */
// tnet_stun_attr_type_t type;
// uint16_t length;
//}
//tnet_stun_attr_t;
//
//typedef tsk_list_t tnet_stun_attributes_L_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_def_t;
//
//#define TNET_STUN_DECLARE_ATTRIBUTE tnet_stun_attr_t attribute
//
//
///**@ingroup tnet_stun_group
// *RFC 5389 - 15.1. MAPPED-ADDRESS
// */
//typedef struct tnet_stun_attribute_mapped_addr_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// /*
// 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
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// |0 0 0 0 0 0 0 0| Family | Port |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | |
// | Address (32 bits or 128 bits) |
// | |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// */
// tnet_stun_addr_family_t family;
// uint16_t port;
// uint8_t address[16];
//}
//tnet_stun_attribute_mapped_addr_t;
//
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_mapped_addr_def_t;
//
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.2. XOR-MAPPED-ADDRESS
//*/
//typedef struct tnet_stun_attribute_xmapped_addr_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// /*
// 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
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// |x x x x x x x x| Family | X-Port |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | X-Address (Variable)
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// */
// tnet_stun_addr_family_t family;
// uint16_t xport;
// uint8_t xaddress[16];
//}
//tnet_stun_attribute_xmapped_addr_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_xmapped_addr_def_t;
//
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.3. USERNAME.
//*/
//typedef struct tnet_stun_attribute_username_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// char* value;
//}
//tnet_stun_attribute_username_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_username_def_t;
//
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.4. MESSAGE-INTEGRITY.
//*/
//typedef struct tnet_stun_attribute_integrity_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// tsk_sha1digest_t sha1digest;
//}
//tnet_stun_attribute_integrity_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_integrity_def_t;
//
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.5. FINGERPRINT.
//*/
//typedef struct tnet_stun_attribute_fingerprint_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// uint32_t value;
//}
//tnet_stun_attribute_fingerprint_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_fingerprint_def_t;
//
///**@ingroup tnet_stun_group
// *RFC 5389 - 15.6. ERROR-CODE
//*/
//typedef struct tnet_stun_attribute_errorcode_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
// /*
// 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
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | Reserved, should be 0 |Class| Number |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | Reason Phrase (variable) ..
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// */
// uint8_t _class;
// uint8_t number;
// char* reason_phrase;
//}
//tnet_stun_attribute_errorcode_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_errorcode_def_t;
//
//
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.7. REALM. */
//typedef struct tnet_stun_attribute_realm_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// char* value;
//}
//tnet_stun_attribute_realm_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_realm_def_t;
//
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.8. NONCE. */
//typedef struct tnet_stun_attribute_nonce_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// char* value;
//}
//tnet_stun_attribute_nonce_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_nonce_def_t;
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.9. UNKNOWN-ATTRIBUTES. */
//typedef struct tnet_stun_attribute_unknowns_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// tsk_buffer_t *value;
//}
//tnet_stun_attribute_unknowns_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_unknowns_def_t;
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.10. SOFTWARE. */
//typedef struct tnet_stun_attribute_software_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// char *value;
//}
//tnet_stun_attribute_software_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_software_def_t;
//
///**@ingroup tnet_stun_group
//* RFC 5389 - 15.11. ALTERNATE-SERVER. */
//typedef struct tnet_stun_attribute_altserver_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//
// tnet_stun_addr_family_t family;
// uint16_t port;
// uint8_t server[128];
//}
//tnet_stun_attribute_altserver_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_altserver_def_t;
//
///**@ingroup tnet_stun_group
//* RFC 5245 - 19.1. New Attributes */
//typedef struct tnet_stun_attribute_ice_priority_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
// uint32_t value;
//}
//tnet_stun_attribute_ice_priority_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_ice_priority_def_t;
//
///**@ingroup tnet_stun_group
//* RFC 5245 - 19.1. New Attributes */
//typedef struct tnet_stun_attribute_ice_use_candidate_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
//}
//tnet_stun_attribute_ice_use_candidate_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_ice_use_candidate_def_t;
//
///**@ingroup tnet_stun_group
//* RFC 5245 - 19.1. New Attributes */
//typedef struct tnet_stun_attribute_ice_controlled_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
// uint64_t value;
//}
//tnet_stun_attribute_ice_controlled_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_ice_controlled_def_t;
//
///**@ingroup tnet_stun_group
//* RFC 5245 - 19.1. New Attributes */
//typedef struct tnet_stun_attribute_ice_controlling_s {
// TNET_STUN_DECLARE_ATTRIBUTE;
// uint64_t value;
//}
//tnet_stun_attribute_ice_controlling_t;
//TINYNET_GEXTERN const tsk_object_def_t *tnet_stun_attribute_ice_controlling_def_t;
//
//tnet_stun_attr_t* tnet_stun_attribute_deserialize(const void* data, tsk_size_t size);
//int tnet_stun_attribute_serialize(const tnet_stun_attr_t* attribute, tsk_buffer_t *output);
//void tnet_stun_attribute_pad(const tnet_stun_attr_t* attribute, tsk_buffer_t *output);
//
//
//
//
//tnet_stun_attr_t* tnet_stun_attribute_create();
//TINYNET_API tnet_stun_attribute_mapped_addr_t* tnet_stun_attribute_mapped_address_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_xmapped_addr_t* tnet_stun_attribute_xmapped_address_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_username_t* tnet_stun_attribute_username_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_integrity_t* tnet_stun_attribute_integrity_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_fingerprint_t* tnet_stun_attribute_fingerprint_create(uint32_t fingerprint);
//TINYNET_API tnet_stun_attribute_errorcode_t* tnet_stun_attribute_errorcode_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_realm_t* tnet_stun_attribute_realm_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_nonce_t* tnet_stun_attribute_nonce_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_unknowns_t* tnet_stun_attribute_unknowns_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_software_t* tnet_stun_attribute_software_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_altserver_t* tnet_stun_attribute_altserver_create(const void* payload, tsk_size_t payload_size);
//TINYNET_API tnet_stun_attribute_ice_priority_t* tnet_stun_attribute_ice_priority_create(uint32_t value);
//TINYNET_API tnet_stun_attribute_ice_use_candidate_t* tnet_stun_attribute_ice_use_candidate_create();
//TINYNET_API tnet_stun_attribute_ice_controlled_t* tnet_stun_attribute_ice_controlled_create(uint64_t value);
//TINYNET_API tnet_stun_attribute_ice_controlling_t* tnet_stun_attribute_ice_controlling_create(uint64_t value);
//
//
//TNET_END_DECLS
//
// |