From 8f296fb81559520ab4b314e47733ca345ef2f828 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Fri, 6 Nov 2020 14:48:05 +0100 Subject: [PATCH] Transmit: do not exceed MTU for audio with encryption Encryption overhead (nonce etc.) was not taken into account when computing package sizes. --- src/transmit.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/transmit.cpp b/src/transmit.cpp index a20da2cb4..a730298ea 100644 --- a/src/transmit.cpp +++ b/src/transmit.cpp @@ -772,26 +772,22 @@ void audio_tx_send(struct tx* tx, struct rtp *rtp_session, const audio_frame2 * int mult_pos[FEC_MAX_MULT]; int mult_index = 0; int mult_first_sent = 0; - int rtp_hdr_len; fec_check_messages(tx); timestamp = get_local_mediatime(); perf_record(UVP_SEND, timestamp); - if(tx->encryption) { - rtp_hdr_len = sizeof(crypto_payload_hdr_t) + sizeof(audio_payload_hdr_t); + int rtp_hdr_len = sizeof(audio_payload_hdr_t); + int hdrs_len = (rtp_is_ipv6(rtp_session) ? 40 : 20) + 8 + 12 + sizeof(audio_payload_hdr_t); // MTU - IP hdr - UDP hdr - RTP hdr - payload_hdr + if (tx->encryption) { + hdrs_len += sizeof(crypto_payload_hdr_t) + tx->enc_funcs->get_overhead(tx->encryption); + rtp_hdr_len += sizeof(crypto_payload_hdr_t); pt = PT_ENCRYPT_AUDIO; } else { - rtp_hdr_len = sizeof(audio_payload_hdr_t); pt = PT_AUDIO; /* PT set for audio in our packet format */ } - int hdrs_len = (rtp_is_ipv6(rtp_session) ? 40 : 20) + 8 + 12 + sizeof(audio_payload_hdr_t); // MTU - IP hdr - UDP hdr - RTP hdr - payload_hdr - if(tx->encryption) { - hdrs_len += sizeof(crypto_payload_hdr_t); - } - for(channel = 0; channel < buffer->get_channel_count(); ++channel) { chan_data = buffer->get_data(channel);