From c14ccd5fa272dce0c11bcf6a1c34698a641cff44 Mon Sep 17 00:00:00 2001 From: Igor Katson Date: Mon, 26 Aug 2024 21:22:00 +0100 Subject: [PATCH 1/2] ReuseAddr on all sytems, resuseport only on Unix --- Makefile | 3 +++ crates/upnp-serve/src/ssdp.rs | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c7b7f9b..db284da 100644 --- a/Makefile +++ b/Makefile @@ -111,6 +111,9 @@ create-target-docker: cp -lf target/armv7-unknown-linux-musleabihf/release-github/rqbit target/docker/linux/arm/v7/rqbit && \ cp docker/Dockerfile target/Docker +@PHONE: docker-build-prereqs +docker-build-prereqs: release-linux-aarch64 release-linux-x86_64 release-linux-armv7 + @PHONY: docker-build docker-build: create-target-docker docker build \ diff --git a/crates/upnp-serve/src/ssdp.rs b/crates/upnp-serve/src/ssdp.rs index c88f737..d3d80bf 100644 --- a/crates/upnp-serve/src/ssdp.rs +++ b/crates/upnp-serve/src/ssdp.rs @@ -113,7 +113,6 @@ impl SsdpRunner { #[cfg(not(target_os = "windows"))] sock.set_reuse_port(true) .context("error setting SO_REUSEPORT")?; - #[cfg(target_os = "windows")] sock.set_reuse_address(true) .context("error setting SO_REUSEADDR")?; From ef99380147f26bbca0e2adf411a5e1d3d06df90e Mon Sep 17 00:00:00 2001 From: Igor Katson Date: Tue, 27 Aug 2024 03:43:02 +0100 Subject: [PATCH 2/2] Respond with proper ST header on SSDP upnp requests --- crates/upnp-serve/src/ssdp.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/crates/upnp-serve/src/ssdp.rs b/crates/upnp-serve/src/ssdp.rs index d3d80bf..95197af 100644 --- a/crates/upnp-serve/src/ssdp.rs +++ b/crates/upnp-serve/src/ssdp.rs @@ -152,10 +152,9 @@ USN: {usn}::{kind}\r ) } - fn generate_ssdp_discover_response(&self) -> String { + fn generate_ssdp_discover_response(&self, st: &str) -> String { let location = &self.opts.description_http_location; let usn = &self.opts.usn; - let media_server = UPNP_KIND_MEDIASERVER; let server = &self.opts.server_string; format!( "HTTP/1.1 200 OK\r @@ -163,8 +162,8 @@ Cache-Control: max-age=75\r Ext: \r Location: {location}\r Server: {server}\r -St: {media_server}\r -Usn: {usn}::{media_server}\r +St: {st}\r +Usn: {usn}::{st}\r Content-Length: 0\r\n\r\n" ) } @@ -213,12 +212,14 @@ Content-Length: 0\r\n\r\n" return Ok(()); } - let response = self.generate_ssdp_discover_response(); - trace!(content = response, ?addr, "sending SSDP discover response"); - self.socket - .send_to(response.as_bytes(), addr) - .await - .context("error sending")?; + if let Ok(st) = std::str::from_utf8(msg.st) { + let response = self.generate_ssdp_discover_response(st); + trace!(content = response, ?addr, "sending SSDP discover response"); + self.socket + .send_to(response.as_bytes(), addr) + .await + .context("error sending")?; + } Ok(()) }