mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-09-02 17:53:48 +00:00
whip: server: pick session-id from the endpoint if specified
Use any string present after the "whip/endpoint" in the POST url's endpoint as the session id of the producer Continue to generate a UUID for the session id if it is not specified as a part of the endpoint Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2282>
This commit is contained in:
parent
880d15d698
commit
289d0c4cac
1 changed files with 31 additions and 3 deletions
|
@ -792,8 +792,19 @@ impl WhipServer {
|
||||||
async fn post_handler(
|
async fn post_handler(
|
||||||
&self,
|
&self,
|
||||||
body: warp::hyper::body::Bytes,
|
body: warp::hyper::body::Bytes,
|
||||||
|
id: Option<String>,
|
||||||
) -> Result<http::Response<warp::hyper::Body>, warp::Rejection> {
|
) -> Result<http::Response<warp::hyper::Body>, warp::Rejection> {
|
||||||
let session_id = uuid::Uuid::new_v4().to_string();
|
let session_id = match id {
|
||||||
|
Some(id) => {
|
||||||
|
gst::debug!(CAT, imp = self, "got session id {id} from the URL");
|
||||||
|
id
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
gst::info!(CAT, imp = self, "no session id in the URL, generating UUID");
|
||||||
|
uuid::Uuid::new_v4().to_string()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let (tx, mut rx) = mpsc::channel::<Option<SDPMessage>>(1);
|
let (tx, mut rx) = mpsc::channel::<Option<SDPMessage>>(1);
|
||||||
let wait_timeout = {
|
let wait_timeout = {
|
||||||
let mut settings = self.settings.lock().unwrap();
|
let mut settings = self.settings.lock().unwrap();
|
||||||
|
@ -986,7 +997,24 @@ impl WhipServer {
|
||||||
#[weak(rename_to = self_)]
|
#[weak(rename_to = self_)]
|
||||||
self,
|
self,
|
||||||
#[upgrade_or_panic]
|
#[upgrade_or_panic]
|
||||||
move |body| async move { self_.post_handler(body).await }
|
move |body| async move { self_.post_handler(body, None).await }
|
||||||
|
));
|
||||||
|
|
||||||
|
// POST /endpoint/<session-id>
|
||||||
|
let post_filter_with_id = warp::post()
|
||||||
|
.and(warp::path(ENDPOINT_PATH))
|
||||||
|
.and(warp::path::param::<String>())
|
||||||
|
.and(warp::path::end())
|
||||||
|
.and(warp::header::exact(
|
||||||
|
http::header::CONTENT_TYPE.as_str(),
|
||||||
|
CONTENT_SDP,
|
||||||
|
))
|
||||||
|
.and(warp::body::bytes())
|
||||||
|
.and_then(glib::clone!(
|
||||||
|
#[weak(rename_to = self_)]
|
||||||
|
self,
|
||||||
|
#[upgrade_or_panic]
|
||||||
|
move |id, body| async move { self_.post_handler(body, Some(id)).await }
|
||||||
));
|
));
|
||||||
|
|
||||||
// OPTIONS /endpoint
|
// OPTIONS /endpoint
|
||||||
|
@ -1029,7 +1057,7 @@ impl WhipServer {
|
||||||
));
|
));
|
||||||
|
|
||||||
let api = prefix
|
let api = prefix
|
||||||
.and(post_filter)
|
.and(post_filter.or(post_filter_with_id))
|
||||||
.or(prefix.and(options_filter))
|
.or(prefix.and(options_filter))
|
||||||
.or(prefix.and(patch_filter))
|
.or(prefix.and(patch_filter))
|
||||||
.or(prefix.and(delete_filter));
|
.or(prefix.and(delete_filter));
|
||||||
|
|
Loading…
Reference in a new issue