summaryrefslogtreecommitdiff
path: root/src/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2024-07-05 03:48:06 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2024-07-05 03:48:06 -0400
commite6191d95341d164eacaf91739c8aa7020dd5c9b6 (patch)
tree4317a4dde8eca28cb85f1fa1a5f65b53aed47b27 /src/discord
parentebce49925cfb0c93a0a4fc3c302f0efbf24e1409 (diff)
downloadabaddon-portaudio-e6191d95341d164eacaf91739c8aa7020dd5c9b6.tar.gz
abaddon-portaudio-e6191d95341d164eacaf91739c8aa7020dd5c9b6.zip
update rtp extension stripping
Diffstat (limited to 'src/discord')
-rw-r--r--src/discord/voiceclient.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/discord/voiceclient.cpp b/src/discord/voiceclient.cpp
index 212b878..e3e83f1 100644
--- a/src/discord/voiceclient.cpp
+++ b/src/discord/voiceclient.cpp
@@ -462,6 +462,19 @@ void DiscordVoiceClient::SetState(State state) {
m_signal_state_update.emit(state);
}
+size_t GetPayloadOffset(const uint8_t *buf, size_t num_bytes) {
+ const bool has_extension_header = (buf[0] & 0b00010000) != 0;
+ const int csrc_count = buf[0] & 0b00001111;
+
+ size_t offset = 12 + csrc_count * 4;
+
+ if (has_extension_header && num_bytes > 4) {
+ offset += 4 + 4 * ((buf[offset + 2] << 8) | buf[offset + 3]);
+ }
+
+ return offset;
+}
+
void DiscordVoiceClient::OnUDPData(std::vector<uint8_t> data) {
uint8_t *payload = data.data() + 12;
uint32_t ssrc = (data[8] << 24) |
@@ -473,7 +486,9 @@ void DiscordVoiceClient::OnUDPData(std::vector<uint8_t> data) {
if (crypto_secretbox_open_easy(payload, payload, data.size() - 12, nonce.data(), m_secret_key.data())) {
// spdlog::get("voice")->trace("UDP payload decryption failure");
} else {
- Abaddon::Get().GetAudio().FeedMeOpus(ssrc, { payload, payload + data.size() - 12 - crypto_box_MACBYTES });
+ size_t opus_offset = GetPayloadOffset(data.data(), data.size());
+ payload = data.data() + opus_offset;
+ Abaddon::Get().GetAudio().FeedMeOpus(ssrc, { payload, payload + data.size() - opus_offset - crypto_box_MACBYTES });
}
}