diff options
author | Sean DuBois <sean@pion.ly> | 2023-09-26 22:17:29 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2023-11-10 18:32:39 +0300 |
commit | 2aacc74a44194afe15226ff402cb96548ce0d4f6 (patch) | |
tree | f40493c9fd7997e8387713e5ae70b5d07119be9b | |
parent | d2e5cb43ccf6b2f7e7509fe797e72f3e7b6e073f (diff) |
net: webrtc/webrtchttp: Respect HTTP redirects
Properly follow redirect URL. Before new request would be made, but with
original URL again.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1387>
-rw-r--r-- | net/webrtchttp/src/whepsrc/imp.rs | 19 | ||||
-rw-r--r-- | net/webrtchttp/src/whipsink/imp.rs | 19 |
2 files changed, 18 insertions, 20 deletions
diff --git a/net/webrtchttp/src/whepsrc/imp.rs b/net/webrtchttp/src/whepsrc/imp.rs index 29d5f2d5..f5bfec4b 100644 --- a/net/webrtchttp/src/whepsrc/imp.rs +++ b/net/webrtchttp/src/whepsrc/imp.rs @@ -755,11 +755,7 @@ impl WhepSrc { redirect_url.as_str() ); - if let Err(err) = - wait_async(&self.canceller, self.do_post(sess_desc), timeout).await - { - self.handle_future_error(err); - } + self.do_post(sess_desc, redirect_url).await } Err(e) => self.raise_error(gst::ResourceError::Failed, e.to_string()), } @@ -931,27 +927,30 @@ impl WhepSrc { let sess_desc = WebRTCSessionDescription::new(WebRTCSDPType::Offer, offer_sdp.sdp()); let timeout; + let endpoint; + { let settings = self.settings.lock().unwrap(); timeout = settings.timeout; + endpoint = + reqwest::Url::parse(settings.whep_endpoint.as_ref().unwrap().as_str()).unwrap(); drop(settings); } - if let Err(e) = wait_async(&self.canceller, self.do_post(sess_desc), timeout).await { + if let Err(e) = + wait_async(&self.canceller, self.do_post(sess_desc, endpoint), timeout).await + { self.handle_future_error(e); } } #[async_recursion] - async fn do_post(&self, offer: WebRTCSessionDescription) { + async fn do_post(&self, offer: WebRTCSessionDescription, endpoint: reqwest::Url) { let auth_token; - let endpoint; let timeout; { let settings = self.settings.lock().unwrap(); - endpoint = - reqwest::Url::parse(settings.whep_endpoint.as_ref().unwrap().as_str()).unwrap(); auth_token = settings.auth_token.clone(); timeout = settings.timeout; drop(settings); diff --git a/net/webrtchttp/src/whipsink/imp.rs b/net/webrtchttp/src/whipsink/imp.rs index cc5c9abc..a22e5e37 100644 --- a/net/webrtchttp/src/whipsink/imp.rs +++ b/net/webrtchttp/src/whipsink/imp.rs @@ -546,27 +546,30 @@ impl WhipSink { ); let timeout; + let endpoint; + { let settings = self.settings.lock().unwrap(); timeout = settings.timeout; + endpoint = + reqwest::Url::parse(settings.whip_endpoint.as_ref().unwrap().as_str()).unwrap(); drop(settings); } - if let Err(e) = wait_async(&self.canceller, self.do_post(offer_sdp), timeout).await { + if let Err(e) = + wait_async(&self.canceller, self.do_post(offer_sdp, endpoint), timeout).await + { self.handle_future_error(e); } } #[async_recursion] - async fn do_post(&self, offer: gst_webrtc::WebRTCSessionDescription) { + async fn do_post(&self, offer: gst_webrtc::WebRTCSessionDescription, endpoint: reqwest::Url) { let auth_token; - let endpoint; let timeout; { let settings = self.settings.lock().unwrap(); - endpoint = - reqwest::Url::parse(settings.whip_endpoint.as_ref().unwrap().as_str()).unwrap(); auth_token = settings.auth_token.clone(); timeout = settings.timeout; drop(settings); @@ -794,11 +797,7 @@ impl WhipSink { redirect_url.as_str() ); - if let Err(err) = - wait_async(&self.canceller, self.do_post(offer), timeout).await - { - self.handle_future_error(err); - } + self.do_post(offer, redirect_url).await } Err(e) => self.raise_error(gst::ResourceError::Failed, e.to_string()), } |