From b049dfa1b4941f75b75e42f8e972fd9f36c4a4d5 Mon Sep 17 00:00:00 2001 From: David John Date: Sat, 11 May 2024 23:40:31 +0530 Subject: [PATCH 1/2] fix: rtmp server failing to connect when auth is configured BUG 1: the app name contains the whole query param for whatever reason, this patch removes it. BUG 2: somehow the query parameters passed to on_connect function are empty even tho they exist, i just use the `connect_properties` url to get the required info instead. --- protocol/rtmp/src/session/server_session.rs | 31 ++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/protocol/rtmp/src/session/server_session.rs b/protocol/rtmp/src/session/server_session.rs index 521ac232..6bbf8ce8 100644 --- a/protocol/rtmp/src/session/server_session.rs +++ b/protocol/rtmp/src/session/server_session.rs @@ -438,7 +438,11 @@ impl ServerSession { let app_name = command_obj.get("app"); self.app_name = match app_name { - Some(Amf0ValueType::UTF8String(app)) => app.clone(), + Some(Amf0ValueType::UTF8String(app)) => { + // the value can weirdly have the query params, lets just remove it + // example: live/stream?token=123 + app.split(&['?', '/']).next().unwrap_or(app).to_string() + } _ => { return Err(SessionError { value: SessionErrorValue::NoAppName, @@ -672,9 +676,28 @@ impl ServerSession { } }; - (self.stream_name, self.query) = - RtmpUrlParser::parse_stream_name_with_query(&stream_name_with_query); - + if !stream_name_with_query.is_empty() { + (self.stream_name, self.query) = + RtmpUrlParser::parse_stream_name_with_query(&stream_name_with_query); + } else { + log::warn!("stream_name_with_query is empty, extracing info from swf_url instead..."); + let mut url = RtmpUrlParser::new( + self.connect_properties + .swf_url + .clone() + .unwrap_or("".to_string()), + ); + + match url.parse_url() { + Ok(_) => { + self.stream_name = url.stream_name; + self.query = url.query; + } + Err(e) => { + log::warn!("Failed to parse swf_url: {e}"); + } + } + } if let Some(auth) = &self.auth { auth.authenticate(&self.stream_name, &self.query, false)? } From 7147f23981632d2c224ab389d9cc66b58e6f597a Mon Sep 17 00:00:00 2001 From: David John Date: Tue, 14 May 2024 10:24:12 +0530 Subject: [PATCH 2/2] update changelog --- protocol/rtmp/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protocol/rtmp/CHANGELOG.md b/protocol/rtmp/CHANGELOG.md index 8ed9e3a3..1cdc571f 100644 --- a/protocol/rtmp/CHANGELOG.md +++ b/protocol/rtmp/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] - ReleaseDate +- Fix: RTMP Auth failing due to empty string query string in packet + ## [0.6.3] - 2021-03-15 - Upgrade failure library. - Support querying more detailed statistic data.