feat(protocol): negotiate display and native input
This commit is contained in:
@@ -47,8 +47,8 @@ fn evaluate(kind: &str, input: &str) -> &'static str {
|
||||
|| !values.contains_key("correlation_id") => "invalid:required",
|
||||
"event" => "valid",
|
||||
"tunnel" if matches!(values.get("offered").map(String::as_str), Some("1") | Some("0") | Some("-1"))
|
||||
&& values.get("feature").map(String::as_str) == Some("control.v1") => "valid",
|
||||
"tunnel" if values.get("feature").map(String::as_str) != Some("control.v1") => {
|
||||
&& matches!(values.get("feature").map(String::as_str), Some("control.v1") | Some("display.request.v1") | Some("input.absolute.v1") | Some("input.scroll.v1")) => "valid",
|
||||
"tunnel" if !matches!(values.get("feature").map(String::as_str), Some("control.v1") | Some("display.request.v1") | Some("input.absolute.v1") | Some("input.scroll.v1")) => {
|
||||
"invalid:unsupported_feature"
|
||||
}
|
||||
"tunnel" => "invalid:unsupported_version",
|
||||
@@ -110,6 +110,16 @@ fn classify_gateway_input(encoded: &str) -> &'static str {
|
||||
5 if body[0] > 15 => "invalid:field",
|
||||
5 if body[1] == 0 && body[2] == 0 && body[3..].iter().any(|value| *value != 0) => "invalid:field",
|
||||
5 => "valid",
|
||||
6 if body.len() != 8 => "invalid:length",
|
||||
6 => {
|
||||
let x = u16::from_be_bytes([body[0], body[1]]);
|
||||
let y = u16::from_be_bytes([body[2], body[3]]);
|
||||
let width = u16::from_be_bytes([body[4], body[5]]);
|
||||
let height = u16::from_be_bytes([body[6], body[7]]);
|
||||
if width != 0 && height != 0 && x < width && y < height { "valid" } else { "invalid:field" }
|
||||
}
|
||||
7 if body.len() == 4 => "valid",
|
||||
7 => "invalid:length",
|
||||
_ => "invalid:kind",
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user