summaryrefslogtreecommitdiffstats
path: root/branches/1.0/tinyRTP/src/rtp
diff options
context:
space:
mode:
Diffstat (limited to 'branches/1.0/tinyRTP/src/rtp')
-rw-r--r--branches/1.0/tinyRTP/src/rtp/trtp_rtp_header.c224
-rw-r--r--branches/1.0/tinyRTP/src/rtp/trtp_rtp_packet.c194
-rw-r--r--branches/1.0/tinyRTP/src/rtp/trtp_rtp_session.c29
3 files changed, 0 insertions, 447 deletions
diff --git a/branches/1.0/tinyRTP/src/rtp/trtp_rtp_header.c b/branches/1.0/tinyRTP/src/rtp/trtp_rtp_header.c
deleted file mode 100644
index 65fffe3..0000000
--- a/branches/1.0/tinyRTP/src/rtp/trtp_rtp_header.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-* Copyright (C) 2009-2010 Mamadou Diop.
-*
-* Contact: Mamadou Diop <diopmamadou(at)doubango.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 trtp_rtp_header.c
- * @brief RTP header.
- *
- * @author Mamadou Diop <diopmamadou(at)doubango.org>
- *
- * @date Created: Sat Nov 8 16:54:58 2009 mdiop
- */
-#include "tinyrtp/rtp/trtp_rtp_header.h"
-
-#include "tnet_endianness.h"
-
-#include "tsk_memory.h"
-#include "tsk_debug.h"
-
- /* RFC 3550 section 5.1 - RTP Fixed Header Fields
- 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
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- |V=2|P|X| CC |M| PT | sequence number |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | timestamp |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | synchronization source (SSRC) identifier |
- +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
- | contributing source (CSRC) identifiers |
- | .... |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
-
-/* Create new RTP header */
-trtp_rtp_header_t* trtp_rtp_header_create_null()
-{
- return tsk_object_new(trtp_rtp_header_def_t);
-}
-
-trtp_rtp_header_t* trtp_rtp_header_create(uint32_t ssrc, uint16_t seq_num, uint32_t timestamp, uint8_t payload_type, tsk_bool_t marker)
-{
- trtp_rtp_header_t* header;
- if((header = tsk_object_new(trtp_rtp_header_def_t))){
- header->version = TRTP_RTP_VERSION;
- header->marker = marker ? 1 : 0;
- header->payload_type = payload_type;
- header->seq_num = seq_num;
- header->timestamp = timestamp;
- header->ssrc = ssrc;
- }
- return header;
-}
-
-/** Serialize rtp header object into binary buffer */
-tsk_buffer_t* trtp_rtp_header_serialize(const trtp_rtp_header_t *self)
-{
- tsk_buffer_t* buffer;
- uint8_t* data;
- tsk_size_t i;
-
- if(!self){
- TSK_DEBUG_ERROR("Invalid parameter");
- return tsk_null;
- }
-
- if(!(data = tsk_calloc(TRTP_RTP_HEADER_MIN_SIZE + (4 * self->csrc_count), 1))){
- TSK_DEBUG_ERROR("Failed to allocate buffer");
- return tsk_null;
- }
-
- /* Octet-0: version(2), Padding(1), Extension(1), CSRC Count(4) */
- data[0] = (((uint8_t)self->version)<< 6) |
- (((uint8_t)self->padding)<< 5) |
- (((uint8_t)self->extension)<< 4) |
- ((uint8_t)self->csrc_count);
- /* Octet-1: Marker(1), Payload Type(7) */
- data[1] = (((uint8_t)self->marker)<< 7) |
- ((uint8_t)self->payload_type);
- /* Octet-2-3: Sequence number (16) */
- *((uint16_t*)&data[2]) = tnet_htons(self->seq_num);
- /* Octet-4-5-6-7: timestamp (32) */
- *((uint32_t*)&data[4]) = tnet_htonl(self->timestamp);
- /* Octet-8-9-10-11: SSRC (32) */
- *((uint32_t*)&data[8]) = tnet_htonl(self->ssrc);
-
- /* Octet-12-13-14-15-****: CSRC */
- for(i=0; i<self->csrc_count; i++){
- *((uint32_t*)&data[12+i]) = tnet_htonl(self->csrc[i]);
- }
-
- if(!(buffer = tsk_buffer_create_null())){
- TSK_DEBUG_ERROR("Failed to create new buffer");
- TSK_FREE(data);
- return tsk_null;
- }
- else{
- tsk_buffer_takeownership(buffer, (void**)&data, TRTP_RTP_HEADER_MIN_SIZE + (4 * self->csrc_count));
- }
-
- return buffer;
-}
-
-/** Deserialize rtp header object from binary buffer */
-trtp_rtp_header_t* trtp_rtp_header_deserialize(const void *data, tsk_size_t size)
-{
- trtp_rtp_header_t* header = tsk_null;
- const uint8_t* pdata = (const uint8_t*)data;
- uint8_t csrc_count, i;
-
- if(!data){
- TSK_DEBUG_ERROR("Invalid parameter");
- return tsk_null;
- }
-
- if(size <TRTP_RTP_HEADER_MIN_SIZE){
- TSK_DEBUG_ERROR("Too short to contain RTP header");
- return tsk_null;
- }
-
- /* Before starting to deserialize, get the "csrc_count" and check the length validity
- * CSRC count (4 last bits)
- */
- csrc_count = (*pdata & 0x0F);
- if(size <(tsk_size_t)TRTP_RTP_HEADER_MIN_SIZE + (4 * csrc_count)){
- TSK_DEBUG_ERROR("Too short to contain RTP header");
- return tsk_null;
- }
-
- if(!(header = trtp_rtp_header_create_null())){
- TSK_DEBUG_ERROR("Failed to create new RTP header");
- return tsk_null;
- }
-
- /* version (2bits) */
- header->version = (*pdata >> 6);
- /* Padding (1bit) */
- header->padding = ((*pdata >>5) & 0x01);
- /* Extension (1bit) */
- header->extension = ((*pdata >>4) & 0x01);
- /* CSRC Count (4bits) */
- header->csrc_count = csrc_count;
- // skip octet
- ++pdata;
-
- /* Marker (1bit) */
- header->marker = (*pdata >> 7);
- /* Payload Type (7bits) */
- header->payload_type = (*pdata & 0x7F);
- // skip octet
- ++pdata;
-
- /* Sequence Number (16bits) */
- header->seq_num = tnet_ntohs(*((uint16_t*)pdata));
- // skip octets
- pdata += 2;
-
- /* timestamp (32bits) */
- header->timestamp = tnet_ntohl(*((uint32_t*)pdata));
- // skip octets
- pdata += 4;
-
- /* synchronization source (SSRC) identifier (32bits) */
- header->ssrc = tnet_ntohl(*((uint32_t*)pdata));
- // skip octets
- pdata += 4;
-
- /* contributing source (CSRC) identifiers */
- for(i=0; i<csrc_count; i++, pdata += 4){
- header->csrc[i] = tnet_ntohl(*((uint32_t*)pdata));
- }
-
- return header;
-}
-
-
-
-
-
-
-//=================================================================================================
-// RTP header object definition
-//
-static tsk_object_t* trtp_rtp_header_ctor(tsk_object_t * self, va_list * app)
-{
- trtp_rtp_header_t *header = self;
- if(header){
- }
- return self;
-}
-
-static tsk_object_t* trtp_rtp_header_dtor(tsk_object_t * self)
-{
- trtp_rtp_header_t *header = self;
- if(header){
- }
-
- return self;
-}
-
-static const tsk_object_def_t trtp_rtp_header_def_s =
-{
- sizeof(trtp_rtp_header_t),
- trtp_rtp_header_ctor,
- trtp_rtp_header_dtor,
- tsk_null,
-};
-const tsk_object_def_t *trtp_rtp_header_def_t = &trtp_rtp_header_def_s; \ No newline at end of file
diff --git a/branches/1.0/tinyRTP/src/rtp/trtp_rtp_packet.c b/branches/1.0/tinyRTP/src/rtp/trtp_rtp_packet.c
deleted file mode 100644
index 2f2fcb4..0000000
--- a/branches/1.0/tinyRTP/src/rtp/trtp_rtp_packet.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-* Copyright (C) 2009-2010 Mamadou Diop.
-*
-* Contact: Mamadou Diop <diopmamadou(at)doubango.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 trtp_rtp_packet.c
- * @brief RTP packet.
- *
- * @author Mamadou Diop <diopmamadou(at)doubango.org>
- *
- * @date Created: Sat Nov 8 16:54:58 2009 mdiop
- */
-#include "tinyrtp/rtp/trtp_rtp_packet.h"
-
-#include "tnet_endianness.h"
-
-#include "tsk_memory.h"
-#include "tsk_debug.h"
-
-#include <string.h> /* memcpy() */
-
-/** Create new RTP packet */
-trtp_rtp_packet_t* trtp_rtp_packet_create_null()
-{
- return tsk_object_new(trtp_rtp_packet_def_t);
-}
-
-trtp_rtp_packet_t* trtp_rtp_packet_create(uint32_t ssrc, uint16_t seq_num, uint32_t timestamp, uint8_t payload_type, tsk_bool_t marker)
-{
- trtp_rtp_packet_t* packet;
- if((packet = tsk_object_new(trtp_rtp_packet_def_t))){
- packet->header = trtp_rtp_header_create(ssrc, seq_num, timestamp, payload_type, marker);
- }
- return packet;
-}
-
-/** Serialize rtp packet object into binary buffer */
-tsk_buffer_t* trtp_rtp_packet_serialize(const trtp_rtp_packet_t *self)
-{
- tsk_buffer_t* buffer = tsk_null;
-
- if(!self || !self->header){
- TSK_DEBUG_ERROR("Invalid parameter");
- return tsk_null;
- }
-
- if(!(buffer = trtp_rtp_header_serialize(self->header))){
- TSK_DEBUG_ERROR("Failed to serialize the RTP header");
- return tsk_null;
- }
- else{
- /* extension */
- if(self->extension.data && self->extension.size && self->header->extension){
- tsk_buffer_append(buffer, self->extension.data, self->extension.size);
- }
- /* append payload */
- tsk_buffer_append(buffer, self->payload.data_const ? self->payload.data_const : self->payload.data, self->payload.size);
- }
-
- return buffer;
-}
-
-/** Deserialize rtp packet object from binary buffer */
-trtp_rtp_packet_t* trtp_rtp_packet_deserialize(const void *data, tsk_size_t size)
-{
- trtp_rtp_packet_t* packet = tsk_null;
- trtp_rtp_header_t *header;
- tsk_size_t payload_size;
- const uint8_t* pdata = data;
-
- if(!data){
- TSK_DEBUG_ERROR("Invalid parameter");
- return tsk_null;
- }
-
- if(size< TRTP_RTP_HEADER_MIN_SIZE){
- TSK_DEBUG_ERROR("Too short to contain RTP message");
- return tsk_null;
- }
-
- /* deserialize the RTP header (the packet itsel will be deserialized only if the header deserialization succeed) */
- if(!(header = trtp_rtp_header_deserialize(data, size))){
- TSK_DEBUG_ERROR("Failed to deserialize RTP header");
- return tsk_null;
- }
- else{
- /* create the packet */
- if(!(packet = trtp_rtp_packet_create_null())){
- TSK_DEBUG_ERROR("Failed to create new RTP packet");
- TSK_OBJECT_SAFE_FREE(header);
- return tsk_null;
- }
- /* set the header */
- packet->header = header,
- header = tsk_null;
-
- /* do not need to check overflow (have been done by trtp_rtp_header_deserialize()) */
- payload_size = (size - TRTP_RTP_HEADER_MIN_SIZE - (packet->header->csrc_count * 4));
- pdata = ((const uint8_t*)data) + (size - payload_size);
-
- /* RFC 3550 - 5.3.1 RTP Header Extension
- If the X bit in the RTP header is one, a variable-length header
- extension MUST be appended to the RTP header, following the CSRC list
- if present. The header extension contains a 16-bit length field that
- counts the number of 32-bit words in the extension, excluding the
- four-octet extension header (therefore zero is a valid length). Only
- a single extension can be appended to the RTP data header.
- 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
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | defined by profile | length |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | header extension |
- | .... |
- */
- if(packet->header->extension && payload_size>=4 /* extension min-size */){
- pdata += 2; /* skip "defined by profile" field */
- packet->extension.size = 4 /* first two 16-bit fields */ + (tnet_ntohs(*((uint16_t*)pdata)) * 4/*words(32-bit)*/);
- pdata += 2; /* skip "length" field */
- if((packet->extension.data = tsk_calloc(packet->extension.size, sizeof(uint8_t)))){
- memcpy(packet->extension.data, (pdata - 4), packet->extension.size);
- }
- payload_size -= packet->extension.size;
- }
-
- packet->payload.size = payload_size;
- if(payload_size && (packet->payload.data = tsk_calloc(packet->payload.size, sizeof(uint8_t)))){
- memcpy(packet->payload.data, pdata, packet->payload.size);
- }
- else{
- TSK_DEBUG_ERROR("Failed to allocate new buffer");
- packet->payload.size = 0;
- }
- }
-
- return packet;
-}
-
-
-
-
-
-
-
-
-
-//=================================================================================================
-// RTP packet object definition
-//
-static tsk_object_t* trtp_rtp_packet_ctor(tsk_object_t * self, va_list * app)
-{
- trtp_rtp_packet_t *packet = self;
- if(packet){
- }
- return self;
-}
-
-static tsk_object_t* trtp_rtp_packet_dtor(tsk_object_t * self)
-{
- trtp_rtp_packet_t *packet = self;
- if(packet){
- TSK_OBJECT_SAFE_FREE(packet->header);
- TSK_FREE(packet->payload.data);
- TSK_FREE(packet->extension.data);
- packet->payload.data_const = tsk_null;
- }
-
- return self;
-}
-
-static const tsk_object_def_t trtp_rtp_packet_def_s =
-{
- sizeof(trtp_rtp_packet_t),
- trtp_rtp_packet_ctor,
- trtp_rtp_packet_dtor,
- tsk_null,
-};
-const tsk_object_def_t *trtp_rtp_packet_def_t = &trtp_rtp_packet_def_s;
diff --git a/branches/1.0/tinyRTP/src/rtp/trtp_rtp_session.c b/branches/1.0/tinyRTP/src/rtp/trtp_rtp_session.c
deleted file mode 100644
index 73e4bab..0000000
--- a/branches/1.0/tinyRTP/src/rtp/trtp_rtp_session.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-* Copyright (C) 2009-2010 Mamadou Diop.
-*
-* Contact: Mamadou Diop <diopmamadou(at)doubango.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 trtp_rtp_session.c
- * @brief RTP session.
- *
- * @author Mamadou Diop <diopmamadou(at)doubango.org>
- *
- * @date Created: Sat Nov 8 16:54:58 2009 mdiop
- */
-#include "tinyrtp/rtp/trtp_rtp_session.h" \ No newline at end of file
OpenPOWER on IntegriCloud