1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
use serde_yaml;
use serde_derive;
#[derive(Debug, Deserialize)]
pub struct RawECURequest {
sendto: u16,
recvfrom: Option<u16>,
flowctrl: Option<u16>,
packet: Vec<u8>,
}
impl RawECURequest {
pub fn sendto(&self) -> u16 {
self.sendto
}
pub fn recvfrom(&self) -> u16 {
self.recvfrom.unwrap_or(self.sendto + 8)
}
pub fn flowctrl(&self) -> u16 {
self.flowctrl.unwrap_or(self.sendto)
}
pub fn packet(&self) -> &[u8] {
&self.packet
}
}
#[derive(Debug, Deserialize)]
pub struct RawECUResponseEntry {
name: String,
offset: u16,
length: u16,
check: Option<Vec<u8>>,
kind: Option<String>,
base: Option<u8>,
count: Option<u8>,
}
#[derive(Debug, Deserialize)]
pub struct RawECUResponse {
length: u16,
values: Vec<RawECUResponseEntry>,
}
#[derive(Debug, Deserialize)]
pub struct RawECUEntry {
name: String,
description: String,
request: RawECURequest,
response: RawECUResponse,
}
impl RawECUEntry {
pub fn get() -> Vec<RawECUEntry> {
serde_yaml::from_slice(include_bytes!("../definitions/raw.yaml")).unwrap()
}
pub fn name(&self) -> &str {
&self.name
}
pub fn description(&self) -> &str {
&self.description
}
pub fn request(&self) -> &RawECURequest {
&self.request
}
}
|