rtcp: Add field t APP that tells the payload length

This design is similar to RTP packets.
This commit is contained in:
Joni Räsänen 2022-09-05 07:37:10 +03:00
parent 6c065dfebe
commit f55c4578a8
3 changed files with 11 additions and 7 deletions

View File

@ -80,7 +80,7 @@ namespace uvgrtp {
uint8_t pkt_subtype; /* for app packets */
};
uint8_t pkt_type = 0;
uint16_t length = 0;
uint16_t length = 0; // whole message measured in 32-bit words
};
struct rtcp_sender_info {
@ -135,6 +135,7 @@ namespace uvgrtp {
uint32_t ssrc = 0;
uint8_t name[4] = {0};
uint8_t *payload = nullptr;
size_t payload_len = 0; // in bytes
};
PACK(struct zrtp_frame {

View File

@ -1459,13 +1459,13 @@ rtp_error_t uvgrtp::rtcp::handle_app_packet(uint8_t* packet, size_t& read_ptr,
memcpy(frame->name, &packet[read_ptr], APP_NAME_SIZE);
read_ptr += APP_NAME_SIZE;
size_t application_data_size = packet_end - read_ptr;
frame->payload_len = packet_end - read_ptr;
if (application_data_size > 0)
if (frame->payload_len > 0)
{
// application data is saved to payload
frame->payload = new uint8_t[application_data_size];
memcpy(frame->payload, &packet[read_ptr], application_data_size);
frame->payload = new uint8_t[frame->payload_len];
memcpy(frame->payload, &packet[read_ptr], frame->payload_len);
}
else
{

View File

@ -267,8 +267,11 @@ void app_hook(uvgrtp::frame::rtcp_app_packet* frame)
std::cout << std::endl << "APP frame! ----------" << std::endl;
std::cout << "ssrc: " << frame->ssrc << std::endl;
std::cout << "Name: " << name << std::endl;
std::cout << "Payload length " << payload_len << " and content: " << payload << std::endl;
std::cout << "Name: " << name << " and content: " << payload << std::endl;
std::cout << "Calculated payload length " << payload_len << std::endl;
std::cout << "Payload length field " << frame->payload_len << std::endl;
if (payload_len > 0)
{
delete[] frame->payload;