Keep http 1.5 and tolerate empty or relative service URLs in a local rupnp patch. Cover standard DLNA SOAP requests and malformed descriptions. Avoid logger locks in fatal handlers, flush emitted log batches, and preserve CI symbols after smoke failures. cx
1.6 KiB
QBZ UPnP endpoint compatibility
Source: crates.io rupnp 3.0.0 (MIT / Apache-2.0); upstream repository and
commit are recorded in Cargo.toml and .cargo_vcs_info.json. All original files
are retained. The only implementation change is in src/service.rs:
parse_service_endpoint handles empty or missing-leading-slash service URLs.
An annotation in device.rs also silences the upstream unused presentation_url
field, whose warning is normally capped for registry dependencies.
Valid PathAndQuery values are returned by the original parser. The fallback
restores empty-path tolerance and normalizes rejected relative URLs into
root-relative request targets, reusing the current http parser so character
and length checks still apply. In 1.4.0 a relative endpoint was actually sent
without a leading slash; this patch deliberately uses valid origin-form instead.
It does not change endpoints that were valid in 2.1.0. Device fetching,
SSDP, SOAP, service selection and URLBase semantics are unchanged.
This replaces the workspace-wide http 1.4.0 pin from #745, retaining the
subsequent HTTP validation and HeaderMap fixes. Fixtures are synthetic; KEF
hardware confirmation remains required. Tests live in qbz-cast/tests:
dlna_description_tolerance.rs and dlna_wire_compatibility.rs.
The workspace uses a local Cargo patch, never a network git dependency. This folder ships in the QBZ source archive; registry dependencies still come from the locked release vendor archive for offline AUR/Gentoo builds.
Remove this patch once an upstream release provides the same compatibility and passes those tests. This is not a general UPnP URL-resolution rewrite.