From da727875ac954b13ecb16521d255499511bb7424 Mon Sep 17 00:00:00 2001 From: mannol Date: Sun, 13 Oct 2013 16:16:47 +0200 Subject: tox A/V: RTP/MSI implementation --- toxrtp/toxrtp_message.h | 111 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 toxrtp/toxrtp_message.h (limited to 'toxrtp/toxrtp_message.h') diff --git a/toxrtp/toxrtp_message.h b/toxrtp/toxrtp_message.h new file mode 100644 index 00000000..8feea5d9 --- /dev/null +++ b/toxrtp/toxrtp_message.h @@ -0,0 +1,111 @@ +/* rtp_message.h + * + * Rtp Message handler. It handles message/header parsing. + * Refer to RTP: A Transport Protocol for Real-Time Applications ( RFC 3550 ) for more info. !Red! + * + * + * Copyright (C) 2013 Tox project All Rights Reserved. + * + * This file is part of Tox. + * + * Tox 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. + * + * Tox 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 Tox. If not, see . + * + */ + +#ifndef _RTP__MESSAGE_H_ +#define _RTP__MESSAGE_H_ + +#include "../toxcore/network.h" +#include "toxrtp_helper.h" +#include "../toxcore/tox.h" +/* Defines */ + +#define _MAX_SEQU_NUM 65535 + +/* Minimum size */ +#define _MIN_HEADER_LENGTH 12 +#define _MIN_EXT_HEADER_LENGTH 4 + +/* End of defines */ + + +typedef struct rtp_dest_list_s { + tox_IP_Port _dest; + struct rtp_dest_list_s* next; + +} rtp_dest_list_t; + +typedef struct rtp_header_s { + uint8_t _flags; /* Version(2),Padding(1), Ext(1), Cc(4) */ + uint8_t _marker_payload_t; /* Marker(1), PlayLoad Type(7) */ + uint16_t _sequence_number; /* Sequence Number */ + uint32_t _timestamp; /* Timestamp */ + uint32_t _ssrc; /* SSRC */ + uint32_t* _csrc; /* CSRC's table */ + + uint32_t _length; /* A little something for allocation */ + +} rtp_header_t; + +typedef struct rtp_ext_header_s { + uint16_t _ext_type; /* Extension profile */ + uint16_t _ext_len; /* Number of extensions */ + uint32_t* _hd_ext; /* Extension's table */ + + +} rtp_ext_header_t; + +typedef struct rtp_msg_s { + struct rtp_header_s* _header; + struct rtp_ext_header_s* _ext_header; + uint32_t _header_lenght; + + uint8_t* _data; + uint32_t _length; + tox_IP_Port _from; + + struct rtp_msg_s* _next; +} rtp_msg_t; + +/* Extracts the header from the payload starting at _from */ +rtp_header_t* rtp_extract_header ( const uint8_t* _payload, size_t _bytes ); +rtp_ext_header_t* rtp_extract_ext_header ( const uint8_t* _payload, size_t _bytes ); + + +uint8_t* rtp_add_header ( rtp_header_t* _header, uint8_t* _payload ); +uint8_t* rtp_add_extention_header ( rtp_ext_header_t* _header, uint8_t* _payload ); + +/* Gets the size of the header _header in bytes */ +size_t rtp_header_get_size ( const rtp_header_t* _header ); + +void rtp_header_print (const rtp_header_t* _header); + +/* Adding flags and settings */ +void rtp_header_add_flag_version ( rtp_header_t* _header, uint32_t value ); +void rtp_header_add_flag_padding ( rtp_header_t* _header, uint32_t value ); +void rtp_header_add_flag_extension ( rtp_header_t* _header, uint32_t value ); +void rtp_header_add_flag_CSRC_count ( rtp_header_t* _header, uint32_t value ); +void rtp_header_add_setting_marker ( rtp_header_t* _header, uint32_t value ); +void rtp_header_add_setting_payload ( rtp_header_t* _header, uint32_t value ); + + +/* Getting values from flags and settings */ +uint8_t rtp_header_get_flag_version ( const rtp_header_t* _header ); +uint8_t rtp_header_get_flag_padding ( const rtp_header_t* _header ); +uint8_t rtp_header_get_flag_extension ( const rtp_header_t* _header ); +uint8_t rtp_header_get_flag_CSRC_count ( const rtp_header_t* _header ); +uint8_t rtp_header_get_setting_marker ( const rtp_header_t* _header ); +uint8_t rtp_header_get_setting_payload_type ( const rtp_header_t* _header ); + +#endif /* _RTP__MESSAGE_H_ */ -- cgit v1.2.3