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
use MessageBase;
/*
fn encode(&self) -> BencodeObject {
let mut ben = BencodeObject::new();
ben.put(TID_KEY, self.tid.clone());
ben.put("v", "1.0");
ben.put(TYPE_KEY, self.get_type().rpc_type_name());
match self.get_type() {
MessageType::ReqMsg => {
ben.put(self.get_type().rpc_type_name(), self.get_method());
ben.put(self.get_type().inner_key(), BencodeObject::new());
ben.get_object_mut(self.get_type().inner_key()).unwrap().put("id", self.uid.unwrap().bid.clone());
},
MessageType::RspMsg => {
ben.put(self.get_type().inner_key(), BencodeObject::new());
ben.get_object_mut(self.get_type().inner_key()).unwrap().put("id", self.uid.unwrap().bid.clone());
if let Some(public) = self.public {
ben.put("ip", pack_address(&public));
}
},
_ => unimplemented!()
}
ben
}
fn decode(&mut self, ben: &BencodeObject) {
if !ben.contains_key(self.get_type().inner_key()) {
//throw new MessageException("Protocol Error, such as a malformed packet.", 203);
}
if !ben.get_object(self.get_type().inner_key()).unwrap().contains_key("id") {
//throw new MessageException("Protocol Error, such as a malformed packet.", 203);
}
let mut bid = [0u8; ID_LENGTH];
bid.copy_from_slice(&ben.get_object(self.get_type().inner_key()).unwrap().get_bytes("id").unwrap()[..ID_LENGTH]);
self.uid = Some(UID::from(bid));
match self.get_type() {
MessageType::RspMsg => {
if ben.contains_key("ip") {
self.public = unpack_address(ben.get_bytes("ip").unwrap());
}
},
_ => ()
};
}
*/