Update v2.0
This commit is contained in:
parent
c91cf1bf1a
commit
35ac2972ae
|
@ -7,8 +7,8 @@ export _BT=static
|
|||
|
||||
for IS_NEON in no yes
|
||||
do
|
||||
for project in tinySAK tinyNET tinyHTTP tinyXCAP tinyIPSec tinySMS tinySIGCOMP tinySDP tinyRTP tinyMSRP tinyMEDIA tinyDAV tinySIP
|
||||
#for project in tinyDAV
|
||||
#for project in tinySAK tinyNET tinyHTTP tinyXCAP tinyIPSec tinySMS tinySIGCOMP tinySDP tinyRTP tinyMSRP tinyMEDIA tinyDAV tinySIP
|
||||
for project in tinyDAV
|
||||
do
|
||||
echo -e building "$project with parameters: $@ NEON=$IS_NEON $WIPHONE_PARAMS\n"
|
||||
make PROJECT=$project clean
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include "tsk_memory.h"
|
||||
#include "tsk_debug.h"
|
||||
|
||||
#define ECHO_TAIL 10
|
||||
#define ECHO_TAIL 20
|
||||
|
||||
int tdav_speex_denoise_open(tmedia_denoise_t* self, uint32_t frame_size, uint32_t sampling_rate, tsk_bool_t denoise, float agc_level, tsk_bool_t aec, tsk_bool_t vad)
|
||||
{
|
||||
|
|
|
@ -122,7 +122,7 @@
|
|||
Name="VCCLCompilerTool"
|
||||
EnableIntrinsicFunctions="false"
|
||||
AdditionalIncludeDirectories=""$(PSDK_DIR)include";"$(DXSDK_DIR)include";..\thirdparties\win32\include;include;..\tinyMSRP\include;..\tinyRTP\include;..\tinyMEDIA\include;..\tinySDP\include;..\tinyNET\src;..\tinyDSHOW\include;..\tinySAK\src;..\thirdparties\win32\include\BroadVoice16\bvcommon;..\thirdparties\win32\include\BroadVoice16\bv16"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TINYDAV_EXPORTS;DEBUG_LEVEL=DEBUG_LEVEL_INFOS;HAVE_G729=0;HAVE_BV16=0;HAVE_OPENCORE_AMR=1;HAVE_ILBC=1;HAVE_LIBGSM=1;HAVE_TINYDSHOW=1;HAVE_DSOUND_H=1;HAVE_WAVE_API=0;HAVE_FFMPEG=1;HAVE_SPEEX_DSP=1;HAVE_SPEEX_JB=1;HAVE_LIB_SPEEX=1;FLIP_ENCODED_PICT=1;FLIP_DECODED_PICT=1;G192BITSTREAM=0;_WIN32_WINNT=0x0501"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TINYDAV_EXPORTS;DEBUG_LEVEL=DEBUG_LEVEL_INFOS;HAVE_G729=0;HAVE_BV16=0;HAVE_OPENCORE_AMR=1;HAVE_ILBC=0;HAVE_LIBGSM=1;HAVE_TINYDSHOW=1;HAVE_DSOUND_H=1;HAVE_WAVE_API=0;HAVE_FFMPEG=1;HAVE_SPEEX_DSP=1;HAVE_SPEEX_JB=1;HAVE_LIB_SPEEX=1;FLIP_ENCODED_PICT=1;FLIP_DECODED_PICT=1;G192BITSTREAM=0;_WIN32_WINNT=0x0501"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="false"
|
||||
UsePrecompiledHeader="0"
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
#include "tsk_buffer.h"
|
||||
#include "tsk_list.h"
|
||||
|
||||
#define TRTP_RTCP_HEADER_SIZE 4
|
||||
#define TRTP_RTCP_HEADER_SIZE 4
|
||||
#define TRTP_RTCP_HEADER_VERSION_DEFAULT 2
|
||||
|
||||
TRTP_BEGIN_DECLS
|
||||
|
||||
|
@ -51,6 +52,7 @@ TINYRTP_API trtp_rtcp_header_t* trtp_rtcp_header_create(uint8_t version, uint8_t
|
|||
TINYRTP_API tsk_buffer_t* trtp_rtcp_header_serialize(const trtp_rtcp_header_t *self);
|
||||
TINYRTP_API int trtp_rtcp_header_serialize_2(const trtp_rtcp_header_t *self, uint8_t output[TRTP_RTCP_HEADER_SIZE]);
|
||||
TINYRTP_API trtp_rtcp_header_t* trtp_rtcp_header_deserialize(const void *data, tsk_size_t size);
|
||||
TINYRTP_API int trtp_rtcp_header_deserialize_2(trtp_rtcp_header_t** self, const void *data, tsk_size_t size);
|
||||
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_header_def_t;
|
||||
|
||||
|
|
|
@ -53,7 +53,10 @@ trtp_rtcp_packet_t;
|
|||
typedef tsk_list_t trtp_rtcp_packets_L_t; /**< List of @ref trtp_rtcp_packet_t elements */
|
||||
|
||||
TINYRTP_API int trtp_rtcp_packet_init(trtp_rtcp_packet_t* self, uint8_t version, uint8_t padding, uint8_t rc, trtp_rtcp_packet_type_t type, uint16_t length);
|
||||
int trtp_rtcp_packet_init_header(trtp_rtcp_packet_t* self, const void* data, tsk_size_t size);
|
||||
TINYRTP_API trtp_rtcp_packet_t* trtp_rtcp_packet_deserialize(const void* data, tsk_size_t size);
|
||||
TINYRTP_API int trtp_rtcp_packet_set_length(trtp_rtcp_packet_t* self, uint16_t length);
|
||||
tsk_size_t trtp_rtcp_packet_get_size(trtp_rtcp_packet_t* self);
|
||||
TINYRTP_API int trtp_rtcp_packet_deinit(trtp_rtcp_packet_t* self);
|
||||
|
||||
TRTP_END_DECLS
|
||||
|
|
|
@ -24,8 +24,25 @@
|
|||
|
||||
#include "tinyrtp_config.h"
|
||||
|
||||
#include "tinyrtp/rtcp/trtp_rtcp_packet.h"
|
||||
#include "tinyrtp/rtcp/trtp_rtcp_sdes_chunck.h"
|
||||
|
||||
TRTP_BEGIN_DECLS
|
||||
|
||||
/* RFC 3550 6.5 SDES: Source Description RTCP Packet */
|
||||
typedef struct trtp_rtcp_report_sdes_s
|
||||
{
|
||||
TRTP_DECLARE_RTCP_PACKET;
|
||||
trtp_rtcp_sdes_chuncks_L_t* chuncks;
|
||||
}
|
||||
trtp_rtcp_report_sdes_t;
|
||||
#define TRTP_RTCP_REPORT_SDES(self) ((trtp_rtcp_report_sdes_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_report_sdes_def_t;
|
||||
typedef tsk_list_t trtp_rtcp_report_sdess_L_t; /**< List of @ref trtp_rtcp_report_sdes_t elements */
|
||||
|
||||
trtp_rtcp_report_sdes_t* trtp_rtcp_report_sdes_create_null();
|
||||
trtp_rtcp_report_sdes_t* trtp_rtcp_report_sdes_deserialize(const void* data, tsk_size_t size);
|
||||
int trtp_rtcp_report_sdes_parse_payload(trtp_rtcp_report_sdes_t* self, const void* payload, tsk_size_t size);
|
||||
|
||||
TRTP_END_DECLS
|
||||
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright (C) 2010-2011 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.
|
||||
*
|
||||
*/
|
||||
#ifndef TINYRTP_RTCP_SDES_CHUNCK_H
|
||||
#define TINYRTP_RTCP_SDES_CHUNCK_H
|
||||
|
||||
#include "tinyrtp_config.h"
|
||||
|
||||
#include "tinyrtp/rtcp/trtp_rtcp_sdes_item.h"
|
||||
|
||||
#define TRTP_RTCP_SDES_CHUNCK_MIN_SIZE 4
|
||||
#define TRTP_RTCP_SDES_CHUNCK_SSRC_OR_CSRC_SIZE 4
|
||||
|
||||
TRTP_BEGIN_DECLS
|
||||
|
||||
typedef struct trtp_rtcp_sdes_chunck_s
|
||||
{
|
||||
TSK_DECLARE_OBJECT;
|
||||
|
||||
uint32_t ssrc_or_csrc;
|
||||
trtp_rtcp_sdes_items_L_t* items;
|
||||
}
|
||||
trtp_rtcp_sdes_chunck_t;
|
||||
#define TRTP_RTCP_SDES_CHUNCK(self) ((trtp_rtcp_sdes_chunck_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_chunck_def_t;
|
||||
typedef tsk_list_t trtp_rtcp_sdes_chuncks_L_t; /**< List of @ref trtp_rtcp_sdes_item_t elements */
|
||||
|
||||
trtp_rtcp_sdes_chunck_t* trtp_rtcp_sdes_chunck_create_null();
|
||||
trtp_rtcp_sdes_chunck_t* trtp_rtcp_sdes_chunck_create(uint32_t ssrc_or_csrc);
|
||||
trtp_rtcp_sdes_chunck_t* trtp_rtcp_sdes_chunck_deserialize(const void* data, tsk_size_t size);
|
||||
tsk_size_t trtp_rtcp_sdes_chunck_get_size(trtp_rtcp_sdes_chunck_t* self);
|
||||
|
||||
TRTP_END_DECLS
|
||||
|
||||
#endif /*TINYRTP_RTCP_SDES_CHUNCK_H*/
|
|
@ -59,12 +59,14 @@ typedef struct trtp_rtcp_sdes_item_s
|
|||
}
|
||||
trtp_rtcp_sdes_item_t;
|
||||
|
||||
#define TRTP_RTCP_SDES_ITEM(self) ((trtp_rtcp_sdes_item_t*)(self))
|
||||
#define TRTP_DECLARE_RTCP_SDES_ITEM trtp_rtcp_sdes_item_t __sdes_item__
|
||||
typedef tsk_list_t trtp_rtcp_sdes_items_L_t; /**< List of @ref trtp_rtcp_sdes_item_t elements */
|
||||
int trtp_rtcp_sdes_item_init(trtp_rtcp_sdes_item_t* self, uint8_t version, uint8_t padding, trtp_rtcp_sdes_item_type_t type, uint16_t length);
|
||||
trtp_rtcp_sdes_item_t* trtp_rtcp_sdes_item_create(uint8_t version, uint8_t padding, trtp_rtcp_sdes_item_type_t type, uint16_t length);
|
||||
trtp_rtcp_sdes_item_t* trtp_rtcp_sdes_item_deserialize(const void* data, tsk_size_t size);
|
||||
tsk_buffer_t* trtp_rtcp_sdes_item_serialize(trtp_rtcp_sdes_item_t* self);
|
||||
tsk_size_t trtp_rtcp_sdes_item_get_size(trtp_rtcp_sdes_item_t* self);
|
||||
|
||||
// RFC 3550 6.5.1 CNAME: Canonical End-Point Identifier SDES Item
|
||||
typedef struct trtp_rtcp_sdes_item_cname_s
|
||||
|
@ -73,10 +75,11 @@ typedef struct trtp_rtcp_sdes_item_cname_s
|
|||
char* cname;
|
||||
}
|
||||
trtp_rtcp_sdes_item_cname_t;
|
||||
#define TRTP_RTCP_SDES_ITEM_CNAME(self) ((trtp_rtcp_sdes_item_cname_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_item_cname_def_t;
|
||||
trtp_rtcp_sdes_item_cname_t* trtp_rtcp_sdes_item_cname_create_null();
|
||||
trtp_rtcp_sdes_item_cname_t* trtp_rtcp_sdes_item_cname_create(const char* cname);
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_cname_get_size(trtp_rtcp_sdes_item_cname_t* self);
|
||||
|
||||
// RFC 3550 6.5.2 NAME: User Name SDES Item
|
||||
typedef struct trtp_rtcp_sdes_item_name_s
|
||||
|
@ -85,9 +88,11 @@ typedef struct trtp_rtcp_sdes_item_name_s
|
|||
char* name;
|
||||
}
|
||||
trtp_rtcp_sdes_item_name_t;
|
||||
#define TRTP_RTCP_SDES_ITEM_NAME(self) ((trtp_rtcp_sdes_item_name_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_item_name_def_t;
|
||||
trtp_rtcp_sdes_item_name_t* trtp_rtcp_sdes_item_name_create_null();
|
||||
trtp_rtcp_sdes_item_name_t* trtp_rtcp_sdes_item_name_create(const char* name);
|
||||
tsk_size_t trtp_rtcp_sdes_item_name_get_size(trtp_rtcp_sdes_item_name_t* self);
|
||||
|
||||
// RFC 3550 6.5.3 EMAIL: Electronic Mail Address SDES Item
|
||||
typedef struct trtp_rtcp_sdes_item_email_s
|
||||
|
@ -96,9 +101,11 @@ typedef struct trtp_rtcp_sdes_item_email_s
|
|||
char* email;
|
||||
}
|
||||
trtp_rtcp_sdes_item_email_t;
|
||||
#define TRTP_RTCP_SDES_ITEM_EMAIL(self) ((trtp_rtcp_sdes_item_email_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_item_email_def_t;
|
||||
trtp_rtcp_sdes_item_email_t* trtp_rtcp_sdes_item_email_create_null();
|
||||
trtp_rtcp_sdes_item_email_t* trtp_rtcp_sdes_item_email_create(const char* email);
|
||||
tsk_size_t trtp_rtcp_sdes_item_email_get_size(trtp_rtcp_sdes_item_email_t* self);
|
||||
|
||||
// RFC 3550 6.5.4 PHONE: Phone Number SDES Item
|
||||
typedef struct trtp_rtcp_sdes_item_phone_s
|
||||
|
@ -107,9 +114,11 @@ typedef struct trtp_rtcp_sdes_item_phone_s
|
|||
char* phone;
|
||||
}
|
||||
trtp_rtcp_sdes_item_phone_t;
|
||||
#define TRTP_RTCP_SDES_ITEM_PHONE(self) ((trtp_rtcp_sdes_item_phone_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_item_phone_def_t;
|
||||
trtp_rtcp_sdes_item_phone_t* trtp_rtcp_sdes_item_phone_create_null();
|
||||
trtp_rtcp_sdes_item_phone_t* trtp_rtcp_sdes_item_phone_create(const char* phone);
|
||||
tsk_size_t trtp_rtcp_sdes_item_phone_get_size(trtp_rtcp_sdes_item_phone_t* self);
|
||||
|
||||
// RFC 3550 6.5.5 LOC: Geographic User Location SDES Item
|
||||
typedef struct trtp_rtcp_sdes_item_loc_s
|
||||
|
@ -118,9 +127,11 @@ typedef struct trtp_rtcp_sdes_item_loc_s
|
|||
char* loc;
|
||||
}
|
||||
trtp_rtcp_sdes_item_loc_t;
|
||||
#define TRTP_RTCP_SDES_ITEM_LOC(self) ((trtp_rtcp_sdes_item_loc_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_item_loc_def_t;
|
||||
trtp_rtcp_sdes_item_loc_t* trtp_rtcp_sdes_item_loc_create_null();
|
||||
trtp_rtcp_sdes_item_loc_t* trtp_rtcp_sdes_item_loc_create(const char* loc);
|
||||
tsk_size_t trtp_rtcp_sdes_item_loc_get_size(trtp_rtcp_sdes_item_loc_t* self);
|
||||
|
||||
// RFC 3550 6.5.6 TOOL: Application or Tool Name SDES Item
|
||||
typedef struct trtp_rtcp_sdes_item_tool_s
|
||||
|
@ -129,8 +140,11 @@ typedef struct trtp_rtcp_sdes_item_tool_s
|
|||
char* tool;
|
||||
}
|
||||
trtp_rtcp_sdes_item_tool_t;
|
||||
#define TRTP_RTCP_SDES_ITEM_TOOL(self) ((trtp_rtcp_sdes_item_tool_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_item_tool_def_t;
|
||||
trtp_rtcp_sdes_item_tool_t* trtp_rtcp_sdes_item_tool_create_null();
|
||||
trtp_rtcp_sdes_item_tool_t* trtp_rtcp_sdes_item_tool_create(const char* tool);
|
||||
tsk_size_t trtp_rtcp_sdes_item_tool_get_size(trtp_rtcp_sdes_item_tool_t* self);
|
||||
|
||||
// RFC 3550 6.5.7 NOTE: Notice/Status SDES Item
|
||||
typedef struct trtp_rtcp_sdes_item_note_s
|
||||
|
@ -139,9 +153,12 @@ typedef struct trtp_rtcp_sdes_item_note_s
|
|||
char* note;
|
||||
}
|
||||
trtp_rtcp_sdes_item_note_t;
|
||||
#define TRTP_RTCP_SDES_ITEM_NOTE(self) ((trtp_rtcp_sdes_item_note_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_item_note_def_t;
|
||||
trtp_rtcp_sdes_item_note_t* trtp_rtcp_sdes_item_note_create_null();
|
||||
trtp_rtcp_sdes_item_note_t* trtp_rtcp_sdes_item_note_create(const char* note);
|
||||
tsk_size_t trtp_rtcp_sdes_item_note_get_size(trtp_rtcp_sdes_item_note_t* self);
|
||||
|
||||
|
||||
// RFC 3550 6.5.8 PRIV: Private Extensions SDES Item
|
||||
typedef struct trtp_rtcp_sdes_item_priv_s
|
||||
|
@ -150,9 +167,11 @@ typedef struct trtp_rtcp_sdes_item_priv_s
|
|||
tsk_buffer_t* priv;
|
||||
}
|
||||
trtp_rtcp_sdes_item_priv_t;
|
||||
#define TRTP_RTCP_SDES_ITEM_PRIV(self) ((trtp_rtcp_sdes_item_priv_t*)(self))
|
||||
TINYRTP_GEXTERN const tsk_object_def_t *trtp_rtcp_sdes_item_priv_def_t;
|
||||
trtp_rtcp_sdes_item_priv_t* trtp_rtcp_sdes_item_priv_create_null();
|
||||
trtp_rtcp_sdes_item_priv_t* trtp_rtcp_sdes_item_priv_create(const void* data, tsk_size_t size);
|
||||
tsk_size_t trtp_rtcp_sdes_item_priv_get_size(trtp_rtcp_sdes_item_priv_t* self);
|
||||
|
||||
TRTP_END_DECLS
|
||||
|
||||
|
|
|
@ -101,27 +101,36 @@ int trtp_rtcp_header_serialize_2(const trtp_rtcp_header_t *self, uint8_t output[
|
|||
trtp_rtcp_header_t* trtp_rtcp_header_deserialize(const void *data, tsk_size_t size)
|
||||
{
|
||||
trtp_rtcp_header_t* header = tsk_null;
|
||||
const uint8_t* pdata = (uint8_t*)data;
|
||||
if(!data || size != TRTP_RTCP_HEADER_SIZE){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return tsk_null;
|
||||
if(trtp_rtcp_header_deserialize_2(&header, data, size)){
|
||||
TSK_DEBUG_ERROR("Failed to deserialize the rtcp header");
|
||||
TSK_OBJECT_SAFE_FREE(header);
|
||||
}
|
||||
|
||||
if((header = trtp_rtcp_header_create_null())){
|
||||
header->version = pdata[0]>>6;
|
||||
header->padding = (pdata[0]>>5)&0x01;
|
||||
header->rc = pdata[0]&0x1f;
|
||||
header->type = (enum trtp_rtcp_packet_type_e)pdata[1];
|
||||
header->length = tnet_ntohs_2(&pdata[2]);
|
||||
}
|
||||
else{
|
||||
TSK_DEBUG_ERROR("Failed to create new object");
|
||||
return tsk_null;
|
||||
}
|
||||
|
||||
return header;
|
||||
}
|
||||
|
||||
int trtp_rtcp_header_deserialize_2(trtp_rtcp_header_t** self, const void *data, tsk_size_t size)
|
||||
{
|
||||
const uint8_t* pdata = (uint8_t*)data;
|
||||
if(!self || !data || !size){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
if(size<TRTP_RTCP_HEADER_SIZE){
|
||||
TSK_DEBUG_ERROR("%u is too short", size);
|
||||
return -2;
|
||||
}
|
||||
if(!*self && !(*self = trtp_rtcp_header_create_null())){
|
||||
TSK_DEBUG_ERROR("Failed to create new rtcp header");
|
||||
return -3;
|
||||
}
|
||||
(*self)->version = pdata[0]>>6;
|
||||
(*self)->padding = (pdata[0]>>5)&0x01;
|
||||
(*self)->rc = pdata[0]&0x1f;
|
||||
(*self)->type = (enum trtp_rtcp_packet_type_e)pdata[1];
|
||||
(*self)->length = tnet_ntohs_2(&pdata[2]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//=================================================================================================
|
||||
// RTCP header object definition
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "tinyrtp/rtcp/trtp_rtcp_packet.h"
|
||||
|
||||
#include "tinyrtp/rtcp/trtp_rtcp_header.h"
|
||||
#include "tinyrtp/rtcp/trtp_rtcp_report_sdes.h"
|
||||
|
||||
#include "tsk_debug.h"
|
||||
|
||||
|
@ -44,6 +45,85 @@ int trtp_rtcp_packet_init(trtp_rtcp_packet_t* self, uint8_t version, uint8_t pad
|
|||
return 0;
|
||||
}
|
||||
|
||||
int trtp_rtcp_packet_init_header(trtp_rtcp_packet_t* self, const void* data, tsk_size_t size)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return trtp_rtcp_header_deserialize_2(&self->header, data, size);
|
||||
}
|
||||
|
||||
// @NotImplemented
|
||||
trtp_rtcp_packet_t* trtp_rtcp_packet_deserialize(const void* data, tsk_size_t size)
|
||||
{
|
||||
trtp_rtcp_packet_t* packet = tsk_null;
|
||||
trtp_rtcp_header_t* header = tsk_null;
|
||||
const uint8_t* pdata = (const uint8_t*)data;
|
||||
if(data || !size){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return tsk_null;
|
||||
}
|
||||
if(trtp_rtcp_header_deserialize_2(&header, data, size)){
|
||||
TSK_DEBUG_ERROR("failed to derialize rtcp header");
|
||||
goto bail;
|
||||
}
|
||||
TSK_DEBUG_ERROR("Not Implemented");
|
||||
pdata += TRTP_RTCP_HEADER_SIZE;
|
||||
size -= TRTP_RTCP_HEADER_SIZE;
|
||||
switch(header->type){
|
||||
case trtp_rtcp_packet_type_sr:
|
||||
break;
|
||||
case trtp_rtcp_packet_type_rr:
|
||||
break;
|
||||
case trtp_rtcp_packet_type_sdes:
|
||||
if((packet = (trtp_rtcp_packet_t*)trtp_rtcp_report_sdes_create_null())){
|
||||
packet->header = tsk_object_ref(header);
|
||||
if(!(trtp_rtcp_report_sdes_parse_payload(TRTP_RTCP_REPORT_SDES(packet),(const void*)pdata,size))){
|
||||
TSK_DEBUG_ERROR("Failed to parse data");
|
||||
goto bail;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case trtp_rtcp_packet_type_bye:
|
||||
break;
|
||||
case trtp_rtcp_packet_type_app:
|
||||
break;
|
||||
default:
|
||||
TSK_DEBUG_ERROR("%d is not a valid packet type", header->type);
|
||||
goto bail;
|
||||
}
|
||||
|
||||
bail:
|
||||
TSK_OBJECT_SAFE_FREE(header);
|
||||
return packet;
|
||||
}
|
||||
|
||||
// @NotImplemented
|
||||
tsk_size_t trtp_rtcp_packet_get_size(trtp_rtcp_packet_t* self)
|
||||
{
|
||||
if(!self || !self->header){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return 0;
|
||||
}
|
||||
TSK_DEBUG_ERROR("Not implemented");
|
||||
switch(self->header->type){
|
||||
case trtp_rtcp_packet_type_sr:
|
||||
return 0;
|
||||
case trtp_rtcp_packet_type_rr:
|
||||
return 0;
|
||||
case trtp_rtcp_packet_type_sdes:
|
||||
return 0;
|
||||
case trtp_rtcp_packet_type_bye:
|
||||
return 0;
|
||||
case trtp_rtcp_packet_type_app:
|
||||
return 0;
|
||||
default:
|
||||
TSK_DEBUG_ERROR("%d is not a valid packet type", self->header->type);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int trtp_rtcp_packet_set_length(trtp_rtcp_packet_t* self, uint16_t length)
|
||||
{
|
||||
if(self && self->header){
|
||||
|
|
|
@ -18,4 +18,94 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with DOUBANGO.
|
||||
*
|
||||
*/
|
||||
*/
|
||||
#include "tinyrtp/rtcp/trtp_rtcp_report_sdes.h"
|
||||
#include "tinyrtp/rtcp/trtp_rtcp_header.h"
|
||||
|
||||
#include "tsk_debug.h"
|
||||
|
||||
/*
|
||||
6.5 SDES: Source Description RTCP Packet
|
||||
0 1 2
|
||||
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
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
header |V=2|P| SC | PT=SDES=202 | length |
|
||||
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
||||
chunk | SSRC/CSRC_1 |
|
||||
1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
| SDES items |
|
||||
| ... |
|
||||
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
||||
chunk | SSRC/CSRC_2 |
|
||||
2 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
| SDES items |
|
||||
| ... |
|
||||
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
||||
*/
|
||||
trtp_rtcp_report_sdes_t* trtp_rtcp_report_sdes_create_null()
|
||||
{
|
||||
return tsk_object_new(trtp_rtcp_report_sdes_def_t);
|
||||
}
|
||||
|
||||
// @NotImplemented
|
||||
trtp_rtcp_report_sdes_t* trtp_rtcp_report_sdes_deserialize(const void* data, tsk_size_t size)
|
||||
{
|
||||
trtp_rtcp_report_sdes_t* packet = tsk_null;
|
||||
const uint8_t* pdata = (const uint8_t*)data;
|
||||
if(!data || !size){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return tsk_null;
|
||||
}
|
||||
if(size<TRTP_RTCP_HEADER_SIZE){
|
||||
TSK_DEBUG_ERROR("%u is too short", size);
|
||||
return tsk_null;
|
||||
}
|
||||
TSK_DEBUG_ERROR("Not implemented");
|
||||
return packet;
|
||||
}
|
||||
|
||||
int trtp_rtcp_report_sdes_parse_payload(trtp_rtcp_report_sdes_t* self, const void* payload, tsk_size_t size)
|
||||
{
|
||||
if(!self || !payload || !size){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// Object definition
|
||||
//
|
||||
static tsk_object_t* trtp_rtcp_report_sdes_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_report_sdes_t *packet = self;
|
||||
if(packet){
|
||||
// init self
|
||||
TRTP_RTCP_PACKET(packet)->header->type = trtp_rtcp_packet_type_sdes;
|
||||
TRTP_RTCP_PACKET(packet)->header->version = TRTP_RTCP_HEADER_VERSION_DEFAULT;
|
||||
packet->chuncks = tsk_list_create();
|
||||
// init base
|
||||
}
|
||||
return self;
|
||||
}
|
||||
static tsk_object_t* trtp_rtcp_report_sdes_dtor(tsk_object_t * self)
|
||||
{
|
||||
trtp_rtcp_report_sdes_t *packet = self;
|
||||
if(packet){
|
||||
// deinit base
|
||||
trtp_rtcp_packet_deinit(TRTP_RTCP_PACKET(packet));
|
||||
// deinit self
|
||||
TSK_OBJECT_SAFE_FREE(packet->chuncks);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
static const tsk_object_def_t trtp_rtcp_report_sdes_def_s =
|
||||
{
|
||||
sizeof(trtp_rtcp_report_sdes_t),
|
||||
trtp_rtcp_report_sdes_ctor,
|
||||
trtp_rtcp_report_sdes_dtor,
|
||||
tsk_null,
|
||||
};
|
||||
const tsk_object_def_t *trtp_rtcp_report_sdes_def_t = &trtp_rtcp_report_sdes_def_s;
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* Copyright (C) 2010-2011 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.
|
||||
*
|
||||
*/
|
||||
#include "tinyrtp/rtcp/trtp_rtcp_sdes_chunck.h"
|
||||
|
||||
#include "tnet_endianness.h"
|
||||
|
||||
#include "tsk_debug.h"
|
||||
|
||||
/*
|
||||
Each chunk consists of an SSRC/CSRC identifier followed by a list of
|
||||
zero or more items, which carry information about the SSRC/CSRC.
|
||||
Each chunk starts on a 32-bit boundary. Each item consists of an 8-
|
||||
bit type field, an 8-bit octet count describing the length of the
|
||||
text (thus, not including this two-octet header), and the text
|
||||
itself. Note that the text can be no longer than 255 octets, but
|
||||
this is consistent with the need to limit RTCP bandwidth consumption.
|
||||
|
||||
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
||||
| SSRC/CSRC_1 |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
| SDES items |
|
||||
| ... |
|
||||
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
||||
*/
|
||||
trtp_rtcp_sdes_chunck_t* trtp_rtcp_sdes_chunck_create_null()
|
||||
{
|
||||
return tsk_object_new(trtp_rtcp_sdes_chunck_def_t);
|
||||
}
|
||||
|
||||
trtp_rtcp_sdes_chunck_t* trtp_rtcp_sdes_chunck_create(uint32_t ssrc_or_csrc)
|
||||
{
|
||||
trtp_rtcp_sdes_chunck_t* chunck;
|
||||
if((chunck = trtp_rtcp_sdes_chunck_create_null())){
|
||||
chunck->ssrc_or_csrc = ssrc_or_csrc;
|
||||
}
|
||||
return chunck;
|
||||
}
|
||||
|
||||
trtp_rtcp_sdes_chunck_t* trtp_rtcp_sdes_chunck_deserialize(const void* data, tsk_size_t size)
|
||||
{
|
||||
trtp_rtcp_sdes_chunck_t* chunck = tsk_null;
|
||||
const uint8_t* pdata = (uint8_t*)data;
|
||||
const uint8_t* pend;
|
||||
if(!data || !size){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return tsk_null;
|
||||
}
|
||||
if(size<TRTP_RTCP_SDES_CHUNCK_MIN_SIZE){
|
||||
TSK_DEBUG_ERROR("%u is too short to contain SDES_CHUNCK", size);
|
||||
return tsk_null;
|
||||
}
|
||||
pend = (pdata+size);
|
||||
if((chunck = trtp_rtcp_sdes_chunck_create_null())){
|
||||
trtp_rtcp_sdes_item_t* item;
|
||||
// SSRC/CSRC
|
||||
chunck->ssrc_or_csrc = tnet_ntohl_2(pdata);
|
||||
pdata+=4;
|
||||
while(pdata<pend){
|
||||
if((item = trtp_rtcp_sdes_item_deserialize(pdata, (pend-pdata)))){
|
||||
tsk_list_push_back_data(chunck->items, &item);
|
||||
pdata+=trtp_rtcp_sdes_item_get_size(item);
|
||||
}
|
||||
else{
|
||||
TSK_DEBUG_ERROR("Failed to deserialize sdes item");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
TSK_DEBUG_ERROR("Failed to create new sdes_chunck object");
|
||||
return tsk_null;
|
||||
}
|
||||
|
||||
return chunck;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_chunck_get_size(trtp_rtcp_sdes_chunck_t* self)
|
||||
{
|
||||
tsk_size_t size = TRTP_RTCP_SDES_CHUNCK_SSRC_OR_CSRC_SIZE;
|
||||
const tsk_list_item_t* item;
|
||||
if(self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return 0;
|
||||
}
|
||||
tsk_list_foreach(item, self->items){
|
||||
size+=trtp_rtcp_sdes_item_get_size(TRTP_RTCP_SDES_ITEM(item->data));
|
||||
}
|
||||
if(size%4){//Each chunk starts on a 32-bit boundary
|
||||
size += (4-size%4);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
//
|
||||
// Object definition
|
||||
//
|
||||
static tsk_object_t* trtp_rtcp_sdes_chunck_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_chunck_t *chunck = self;
|
||||
if(chunck){
|
||||
chunck->items = tsk_list_create();
|
||||
}
|
||||
return self;
|
||||
}
|
||||
static tsk_object_t* trtp_rtcp_sdes_chunck_dtor(tsk_object_t * self)
|
||||
{
|
||||
trtp_rtcp_sdes_chunck_t *chunck = self;
|
||||
if(chunck){
|
||||
TSK_OBJECT_SAFE_FREE(chunck->items);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
static const tsk_object_def_t trtp_rtcp_sdes_chunck_def_s =
|
||||
{
|
||||
sizeof(trtp_rtcp_sdes_chunck_t),
|
||||
trtp_rtcp_sdes_chunck_ctor,
|
||||
trtp_rtcp_sdes_chunck_dtor,
|
||||
tsk_null,
|
||||
};
|
||||
const tsk_object_def_t *trtp_rtcp_sdes_chunck_def_t = &trtp_rtcp_sdes_chunck_def_s;
|
|
@ -27,6 +27,8 @@
|
|||
#include "tsk_memory.h"
|
||||
#include "tsk_debug.h"
|
||||
|
||||
#include <string.h> /* strlen() */
|
||||
|
||||
static trtp_rtcp_sdes_item_t* _trtp_rtcp_sdes_item_create_null(trtp_rtcp_sdes_item_type_t type)
|
||||
{
|
||||
switch(type){
|
||||
|
@ -107,9 +109,39 @@ trtp_rtcp_sdes_item_t* trtp_rtcp_sdes_item_deserialize(const void* data, tsk_siz
|
|||
TSK_DEBUG_ERROR("%hu is invalid as header length", header.length);
|
||||
return tsk_null;
|
||||
}
|
||||
pdata+=TRTP_RTCP_SDES_HEADER_SIZE;
|
||||
// create item
|
||||
if((item = trtp_rtcp_sdes_item_create(header.version, header.padding, header.type, header.length))){
|
||||
// FIXME: To be completed...
|
||||
switch(item->header.type){
|
||||
case trtp_rtcp_sdes_item_type_end:
|
||||
default:
|
||||
TSK_DEBUG_ERROR("%d is not a valid SDES type", item->header.type);
|
||||
break;
|
||||
case trtp_rtcp_sdes_item_type_cname:
|
||||
TRTP_RTCP_SDES_ITEM_CNAME(item)->cname = tsk_strndup((const char*)pdata, item->header.length);
|
||||
break;
|
||||
case trtp_rtcp_sdes_item_type_name:
|
||||
TRTP_RTCP_SDES_ITEM_NAME(item)->name = tsk_strndup((const char*)pdata, item->header.length);
|
||||
break;
|
||||
case trtp_rtcp_sdes_item_type_email:
|
||||
TRTP_RTCP_SDES_ITEM_EMAIL(item)->email = tsk_strndup((const char*)pdata, item->header.length);
|
||||
break;
|
||||
case trtp_rtcp_sdes_item_type_phone:
|
||||
TRTP_RTCP_SDES_ITEM_PHONE(item)->phone = tsk_strndup((const char*)pdata, item->header.length);
|
||||
break;
|
||||
case trtp_rtcp_sdes_item_type_loc:
|
||||
TRTP_RTCP_SDES_ITEM_LOC(item)->loc = tsk_strndup((const char*)pdata, item->header.length);
|
||||
break;
|
||||
case trtp_rtcp_sdes_item_type_tool:
|
||||
TRTP_RTCP_SDES_ITEM_TOOL(item)->tool = tsk_strndup((const char*)pdata, item->header.length);
|
||||
break;
|
||||
case trtp_rtcp_sdes_item_type_note:
|
||||
TRTP_RTCP_SDES_ITEM_NOTE(item)->note = tsk_strndup((const char*)pdata, item->header.length);
|
||||
break;
|
||||
case trtp_rtcp_sdes_item_type_priv:
|
||||
TRTP_RTCP_SDES_ITEM_PRIV(item)->priv = tsk_buffer_create(pdata, item->header.length);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return item;
|
||||
|
@ -125,6 +157,35 @@ tsk_buffer_t* trtp_rtcp_sdes_item_serialize(trtp_rtcp_sdes_item_t* self)
|
|||
return buffer;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_get_size(trtp_rtcp_sdes_item_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return 0;
|
||||
}
|
||||
switch(self->header.type){
|
||||
case trtp_rtcp_sdes_item_type_end:
|
||||
default:
|
||||
TSK_DEBUG_ERROR("%d is not a valid SDES type", self->header.type);
|
||||
return 0;
|
||||
case trtp_rtcp_sdes_item_type_cname:
|
||||
return trtp_rtcp_sdes_item_cname_get_size(TRTP_RTCP_SDES_ITEM_CNAME(self));
|
||||
case trtp_rtcp_sdes_item_type_name:
|
||||
return trtp_rtcp_sdes_item_name_get_size(TRTP_RTCP_SDES_ITEM_NAME(self));
|
||||
case trtp_rtcp_sdes_item_type_email:
|
||||
return trtp_rtcp_sdes_item_email_get_size(TRTP_RTCP_SDES_ITEM_EMAIL(self));
|
||||
case trtp_rtcp_sdes_item_type_phone:
|
||||
return trtp_rtcp_sdes_item_phone_get_size(TRTP_RTCP_SDES_ITEM_PHONE(self));
|
||||
case trtp_rtcp_sdes_item_type_loc:
|
||||
return trtp_rtcp_sdes_item_loc_get_size(TRTP_RTCP_SDES_ITEM_LOC(self));
|
||||
case trtp_rtcp_sdes_item_type_tool:
|
||||
return trtp_rtcp_sdes_item_tool_get_size(TRTP_RTCP_SDES_ITEM_TOOL(self));
|
||||
case trtp_rtcp_sdes_item_type_note:
|
||||
return trtp_rtcp_sdes_item_note_get_size(TRTP_RTCP_SDES_ITEM_NOTE(self));
|
||||
case trtp_rtcp_sdes_item_type_priv:
|
||||
return trtp_rtcp_sdes_item_priv_get_size(TRTP_RTCP_SDES_ITEM_PRIV(self));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* RFC 3550 6.5.1 CNAME: Canonical End-Point Identifier SDES Item
|
||||
|
@ -148,6 +209,15 @@ trtp_rtcp_sdes_item_cname_t* trtp_rtcp_sdes_item_cname_create(const char* cname)
|
|||
return item;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_cname_get_size(trtp_rtcp_sdes_item_cname_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return TRTP_RTCP_SDES_HEADER_SIZE + tsk_strlen(self->cname);
|
||||
}
|
||||
|
||||
static tsk_object_t* trtp_rtcp_sdes_item_cname_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_item_cname_t *item = self;
|
||||
|
@ -195,6 +265,15 @@ trtp_rtcp_sdes_item_name_t* trtp_rtcp_sdes_item_name_create(const char* name)
|
|||
return item;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_name_get_size(trtp_rtcp_sdes_item_name_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return TRTP_RTCP_SDES_HEADER_SIZE + tsk_strlen(self->name);
|
||||
}
|
||||
|
||||
static tsk_object_t* trtp_rtcp_sdes_item_name_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_item_name_t *item = self;
|
||||
|
@ -243,6 +322,15 @@ trtp_rtcp_sdes_item_email_t* trtp_rtcp_sdes_item_email_create(const char* email)
|
|||
return item;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_email_get_size(trtp_rtcp_sdes_item_email_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return TRTP_RTCP_SDES_HEADER_SIZE + tsk_strlen(self->email);
|
||||
}
|
||||
|
||||
static tsk_object_t* trtp_rtcp_sdes_item_email_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_item_email_t *item = self;
|
||||
|
@ -291,6 +379,15 @@ trtp_rtcp_sdes_item_phone_t* trtp_rtcp_sdes_item_phone_create(const char* phone)
|
|||
return item;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_phone_get_size(trtp_rtcp_sdes_item_phone_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return TRTP_RTCP_SDES_HEADER_SIZE + tsk_strlen(self->phone);
|
||||
}
|
||||
|
||||
static tsk_object_t* trtp_rtcp_sdes_item_phone_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_item_phone_t *item = self;
|
||||
|
@ -338,6 +435,15 @@ trtp_rtcp_sdes_item_loc_t* trtp_rtcp_sdes_item_loc_create(const char* loc)
|
|||
return item;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_loc_get_size(trtp_rtcp_sdes_item_loc_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return TRTP_RTCP_SDES_HEADER_SIZE + tsk_strlen(self->loc);
|
||||
}
|
||||
|
||||
static tsk_object_t* trtp_rtcp_sdes_item_loc_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_item_loc_t *item = self;
|
||||
|
@ -385,6 +491,15 @@ trtp_rtcp_sdes_item_tool_t* trtp_rtcp_sdes_item_tool_create(const char * tool)
|
|||
return item;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_tool_get_size(trtp_rtcp_sdes_item_tool_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return TRTP_RTCP_SDES_HEADER_SIZE + tsk_strlen(self->tool);
|
||||
}
|
||||
|
||||
static tsk_object_t* trtp_rtcp_sdes_item_tool_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_item_tool_t *item = self;
|
||||
|
@ -432,6 +547,15 @@ trtp_rtcp_sdes_item_note_t* trtp_rtcp_sdes_item_note_create(const char* note)
|
|||
return item;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_note_get_size(trtp_rtcp_sdes_item_note_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return TRTP_RTCP_SDES_HEADER_SIZE + tsk_strlen(self->note);
|
||||
}
|
||||
|
||||
static tsk_object_t* trtp_rtcp_sdes_item_note_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_item_note_t *item = self;
|
||||
|
@ -481,6 +605,15 @@ trtp_rtcp_sdes_item_priv_t* trtp_rtcp_sdes_item_priv_create(const void* data, ts
|
|||
return item;
|
||||
}
|
||||
|
||||
tsk_size_t trtp_rtcp_sdes_item_priv_get_size(trtp_rtcp_sdes_item_priv_t* self)
|
||||
{
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
return self->priv ? TRTP_RTCP_SDES_HEADER_SIZE + self->priv->size : TRTP_RTCP_SDES_HEADER_SIZE;
|
||||
}
|
||||
|
||||
static tsk_object_t* trtp_rtcp_sdes_item_priv_ctor(tsk_object_t * self, va_list * app)
|
||||
{
|
||||
trtp_rtcp_sdes_item_priv_t *item = self;
|
||||
|
|
|
@ -242,6 +242,10 @@
|
|||
RelativePath=".\src\rtcp\trtp_rtcp_report_xr.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcp\trtp_rtcp_sdes_chunck.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcp\trtp_rtcp_sdes_item.c"
|
||||
>
|
||||
|
@ -332,6 +336,10 @@
|
|||
RelativePath=".\include\tinyrtp\rtcp\trtp_rtcp_report_xr.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\include\tinyrtp\rtcp\trtp_rtcp_sdes_chunck.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\include\tinyrtp\rtcp\trtp_rtcp_sdes_item.h"
|
||||
>
|
||||
|
|
Loading…
Reference in New Issue