doubango/tinyNET/src/turn/tnet_turn_message.c
c732d49e
 #if HAVE_CRT
 #define _CRTDBG_MAP_ALLOC 
 #include <stdlib.h> 
 #include <crtdbg.h>
 #endif //HAVE_CRT
 ///*
 //* 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_turn_message.c
 // * @brief Traversal Using Relays around NAT (TURN) messages.
 // *
 // * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
 // *
 //
 // */
 //#include "tnet_turn_message.h"
 //
 //#include "../tnet_types.h"
 //#include "../tnet_endianness.h"
 //
 //#include "tsk_memory.h"
 //
 //#include <string.h>
 //
 //tnet_turn_channel_data_t* tnet_turn_channel_data_create(uint16_t number, uint16_t length, const void* data)
 //{
 //	return tsk_object_new(tnet_turn_channel_data_def_t, number, length, data);
 //}
 //
 //tnet_turn_channel_data_t* tnet_turn_channel_data_create_null()
 //{
 //	return tnet_turn_channel_data_create(0, 0, tsk_null);
 //}
 //
 ///**@ingroup tnet_turn_group
 //*/
 //tsk_buffer_t* tnet_turn_channel_data_serialize(const tnet_turn_channel_data_t *message)
 //{
 //	tsk_buffer_t *output = 0;
 //
 //	if(!message) goto bail;
 //
 //	output = tsk_buffer_create_null();
 //
 //	/*	draft-ietf-behave-turn-16 11.4.  The ChannelData Message
 //		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
 //		+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 //		|         Channel Number        |            Length             |
 //		+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 //		|                                                               |
 //		/                       Application Data                        /
 //		/                                                               /
 //		|                                                               |
 //		|                               +-------------------------------+
 //		|                               |
 //		+-------------------------------+
 //	*/
 //
 //	/* Channel Number
 //	*/
 //	{
 //		uint16_t number = tnet_htons(message->chanel_number);
 //		tsk_buffer_append(output, &(number), 2);
 //	}
 //
 //	/* Length
 //	*/
 //	{
 //		uint16_t length = tnet_htons(message->length);
 //		tsk_buffer_append(output, &(length), 2);
 //	}
 //
 //	/* Application Data
 //	*/
 //	{
 //		tsk_buffer_append(output, message->data, message->length);
 //
 //		/*	=== Padding:
 //			Over stream transports, the ChannelData message MUST be padded to a
 //			multiple of four bytes in order to ensure the alignment of subsequent
 //			messages.  The padding is not reflected in the length field of the
 //			ChannelData message, so the actual size of a ChannelData message
 //			(including padding) is (4 + Length) rounded up to the nearest
 //			multiple of 4.  Over UDP, the padding is not required but MAY be included.
 //		*/
 //		if(message->length%4)
 //		{
 //			static uint32_t zeros = 0x00000000;
 //			tsk_buffer_append(output, &zeros, 4-(message->length%4));
 //		}
 //	}
 //
 //bail:
 //	return output;
 //}
 //
 //
 //
 //
 //
 //
 //
 //
 //
 //
 //
 //
 //
 //
 //
 ////=================================================================================================
 ////	TURN CHANNEL-DATA message object definition
 ////
 //static tsk_object_t* tnet_turn_channel_data_ctor(tsk_object_t * self, va_list * app)
 //{
 //	tnet_turn_channel_data_t *message = self;
 //	if(message){
 //		const void* data;
 //		message->chanel_number = tsk_va_arg_u16(*app);
 //		message->length = tsk_va_arg_u16(*app);
 //		data = va_arg(*app, const void*);
 //		if(data && message->length){
 #if HAVE_CRT //Debug memory
 //			if((message->data = calloc(message->length, sizeof(uint8_t)))){
 		
 	#else
 //			if((message->data = tsk_calloc(message->length, sizeof(uint8_t)))){
 		
 	#endif //HAVE_CRT
 //				memcpy(message->data, data, message->length);
 //			}
 //		}
 //	}
 //	return self;
 //}
 //
 //static tsk_object_t* tnet_turn_channel_data_dtor(tsk_object_t * self)
 //{ 
 //	tnet_turn_channel_data_t *message = self;
 //	if(message){
 //		TSK_FREE(message->data);
 //	}
 //	
 //	return self;
 //}
 //
 //static const tsk_object_def_t tnet_turn_channel_data_def_s = 
 //{
 //	sizeof(tnet_turn_channel_data_t),
 //	tnet_turn_channel_data_ctor, 
 //	tnet_turn_channel_data_dtor,
 //	tsk_null, 
 //};
 //const tsk_object_def_t *tnet_turn_channel_data_def_t = &tnet_turn_channel_data_def_s;