prep 0.4.5 for Longse fix (see #77)

This commit is contained in:
Scott Lamb 2023-02-02 08:45:40 -08:00
parent 831a9d6a18
commit 320f208fc7
No known key found for this signature in database
6 changed files with 37 additions and 9 deletions

View File

@ -1,6 +1,9 @@
## unreleased ## `v0.4.5` (2023-02-02)
* minimum Rust version is now 1.64. * minimum Rust version is now 1.64.
* upgrade to `rtsp-types` 0.0.5, which ignores trailing whitespace in RTSP
headers. This fixes errors when communicating with some Longse cameras
([#77](https://github.com/scottlamb/retina/pull/77)).
* remove obsolete workaround for GW security GW security GW4089IP's bad out-of-band parameters. * remove obsolete workaround for GW security GW security GW4089IP's bad out-of-band parameters.
Instead, we treat them as unparseable and ignore them as described in the Instead, we treat them as unparseable and ignore them as described in the
`v0.4.2` notes below. `v0.4.2` notes below.

6
Cargo.lock generated
View File

@ -1869,7 +1869,7 @@ checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
[[package]] [[package]]
name = "retina" name = "retina"
version = "0.4.4" version = "0.4.5"
dependencies = [ dependencies = [
"base64", "base64",
"bitstream-io", "bitstream-io",
@ -1958,9 +1958,9 @@ dependencies = [
[[package]] [[package]]
name = "rtsp-types" name = "rtsp-types"
version = "0.0.3" version = "0.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b668122d4d00c479c08fb2a0a253669832606ccca80832a6b99bb5288ab4f75" checksum = "2a1aec90dc5d8dec85c14032885770801439acb1651b2f166745ce482a2ddeaf"
dependencies = [ dependencies = [
"cookie-factory", "cookie-factory",
"nom 7.1.1", "nom 7.1.1",

View File

@ -4,7 +4,7 @@ default-members = ["."]
[package] [package]
name = "retina" name = "retina"
version = "0.4.4" version = "0.4.5"
authors = ["Scott Lamb <slamb@slamb.org>"] authors = ["Scott Lamb <slamb@slamb.org>"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
edition = "2021" edition = "2021"
@ -28,7 +28,7 @@ once_cell = "1.7.2"
pin-project = "1.0.7" pin-project = "1.0.7"
pretty-hex = "0.3.0" pretty-hex = "0.3.0"
rand = "0.8.3" rand = "0.8.3"
rtsp-types = "0.0.3" rtsp-types = "0.0.5"
sdp-types = "0.1.4" sdp-types = "0.1.4"
smallvec = { version = "1.6.1", features = ["union"] } smallvec = { version = "1.6.1", features = ["union"] }
thiserror = "1.0.25" thiserror = "1.0.25"

6
fuzz/Cargo.lock generated
View File

@ -515,7 +515,7 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
[[package]] [[package]]
name = "retina" name = "retina"
version = "0.4.4" version = "0.4.5"
dependencies = [ dependencies = [
"base64", "base64",
"bitstream-io", "bitstream-io",
@ -561,9 +561,9 @@ dependencies = [
[[package]] [[package]]
name = "rtsp-types" name = "rtsp-types"
version = "0.0.3" version = "0.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b668122d4d00c479c08fb2a0a253669832606ccca80832a6b99bb5288ab4f75" checksum = "2a1aec90dc5d8dec85c14032885770801439acb1651b2f166745ce482a2ddeaf"
dependencies = [ dependencies = [
"cookie-factory", "cookie-factory",
"nom", "nom",

View File

@ -742,6 +742,26 @@ mod tests {
}) })
} }
/// Longse cameras, for whatever reason, have trailing whitespace in their `CSeq` header lines.
///
/// This test ensures this is correctly stripped. RTSP follows HTTP's lead for request/response
/// parsing (see [RFC 2326 section
/// 4.1](https://www.rfc-editor.org/rfc/rfc2326.html#page-19)), and HTTP [RFC
/// 9110 section 5.5](https://www.rfc-editor.org/rfc/rfc9110#name-field-values) says the following:
///
/// > A field value does not include leading or trailing whitespace. When a
/// > specific version of HTTP allows such whitespace to appear in a message,
/// > a field parsing implementation MUST exclude such whitespace prior to
/// > evaluating the field value.
///
/// Currently we rely on `rtsp-types` doing the stripping.
#[test]
fn longse_cseq() {
init_logging();
let response = response(include_bytes!("testdata/longse_unauthorized.txt"));
assert_eq!(super::get_cseq(&response), Some(1));
}
#[test] #[test]
fn anvpiz_sdp() { fn anvpiz_sdp() {
init_logging(); init_logging();

View File

@ -0,0 +1,5 @@
RTSP/1.0 401 Unauthorized
CSeq: 1
Server: Rtsp Server 1920*1080*20*2048
WWW-Authenticate: Digest realm="Surveillance Server", nonce="98481030"