Skip to content
Snippets Groups Projects
Commit e8905188 authored by Covertness's avatar Covertness
Browse files

Merge pull request #3 from jamesmunns/fix-option-parse

Options should be parsed even if there is no token
parents 670c3aae a6ce7689
No related branches found
No related tags found
No related merge requests found
...@@ -29,3 +29,4 @@ after_success: ...@@ -29,3 +29,4 @@ after_success:
env: env:
global: global:
- secure: "Azb2kN3sVX4KYy4LCrqUqmvCOoePRfDcq9EVfPuJxexrKbkubU4WRxay13ZwGKLvdiL6MXeGYdaNdULDDoxFdREid6T8ZwXdVgEYRg6RanBXs4PME8PNAk3sr0vX92jUpPe6uiLTi3HFilD96IXM/QuPgmjaTUGlxg/tNqVvMO1MnVhSZw8nbC3GRX8K/iMzBE1J0bbYc0nQ5KR2QDLuUPl7ddYzA/OeXxkOdGc3oPAXL3JveRvKRN6WfCbtzn31AYPba2h3LQ6r4XzwL4ZGU1Kpvm/CWsNGtRhZHJ5fh5TFZzVKlK8ndEM747ApdiyYkbpSUCFqkU6W8MP2fwSBH9HK4n6MKY/JZUFc6D0HhDpfgOcRrvRgydkHR5ubQx/+PRfvh3jxDaMGizlxiKGlKaFctxkB2JZCGFm+kGnKNRhxj7ibsDVDn2Mx72x0wE5LAybqsx3eoBno/DPU04YeGCVuA9BIzLQunCa051sxH1/UPUe2tE0cios2SUVLKtCDgawLohWwWDrBQU4hk6ZepZlYY2jo/vRq+xYkYH1ISUDNacu6lu8vfkFBOZBfDmIQQK0+fHnZI7TLeLfbW0iR7Ep9dgbAkw829OpMUof9Kk1YPfIlJ4CUkFKtKH2vP15+QRyDt6oDzSHlmpJLNQECoTG7gMsxsRRBrr5gI5eYtqI=" - secure: "Azb2kN3sVX4KYy4LCrqUqmvCOoePRfDcq9EVfPuJxexrKbkubU4WRxay13ZwGKLvdiL6MXeGYdaNdULDDoxFdREid6T8ZwXdVgEYRg6RanBXs4PME8PNAk3sr0vX92jUpPe6uiLTi3HFilD96IXM/QuPgmjaTUGlxg/tNqVvMO1MnVhSZw8nbC3GRX8K/iMzBE1J0bbYc0nQ5KR2QDLuUPl7ddYzA/OeXxkOdGc3oPAXL3JveRvKRN6WfCbtzn31AYPba2h3LQ6r4XzwL4ZGU1Kpvm/CWsNGtRhZHJ5fh5TFZzVKlK8ndEM747ApdiyYkbpSUCFqkU6W8MP2fwSBH9HK4n6MKY/JZUFc6D0HhDpfgOcRrvRgydkHR5ubQx/+PRfvh3jxDaMGizlxiKGlKaFctxkB2JZCGFm+kGnKNRhxj7ibsDVDn2Mx72x0wE5LAybqsx3eoBno/DPU04YeGCVuA9BIzLQunCa051sxH1/UPUe2tE0cios2SUVLKtCDgawLohWwWDrBQU4hk6ZepZlYY2jo/vRq+xYkYH1ISUDNacu6lu8vfkFBOZBfDmIQQK0+fHnZI7TLeLfbW0iR7Ep9dgbAkw829OpMUof9Kk1YPfIlJ4CUkFKtKH2vP15+QRyDt6oDzSHlmpJLNQECoTG7gMsxsRRBrr5gI5eYtqI="
- RUST_TEST_THREADS=1
...@@ -8,5 +8,8 @@ install: ...@@ -8,5 +8,8 @@ install:
build: false build: false
environment:
RUST_TEST_THREADS: 1
test_script: test_script:
- cargo test --verbose - cargo test --verbose
...@@ -199,23 +199,21 @@ impl Packet { ...@@ -199,23 +199,21 @@ impl Packet {
match header_result { match header_result {
Ok(header) => { Ok(header) => {
let token_length = header.get_token_length(); let token_length = header.get_token_length();
let (mut token, mut payload) = (Vec::new(), Vec::new()); let options_start: usize = 4 + token_length as usize;
let mut options: BTreeMap<usize, LinkedList<Vec<u8>>> = BTreeMap::new();
if token_length > 0 {
if token_length > 8 { if token_length > 8 {
return Err(ParseError::InvalidTokenLength); return Err(ParseError::InvalidTokenLength);
} }
let options_start: usize = 4 + token_length as usize;
if options_start > buf.len() { if options_start > buf.len() {
return Err(ParseError::InvalidTokenLength); return Err(ParseError::InvalidTokenLength);
} }
token = buf[4..options_start].to_vec(); let token = buf[4..options_start].to_vec();
let mut idx = options_start; let mut idx = options_start;
let mut options_number = 0; let mut options_number = 0;
let mut options: BTreeMap<usize, LinkedList<Vec<u8>>> = BTreeMap::new();
while idx < buf.len() { while idx < buf.len() {
let byte = buf[idx]; let byte = buf[idx];
...@@ -283,10 +281,11 @@ impl Packet { ...@@ -283,10 +281,11 @@ impl Packet {
idx += length; idx += length;
} }
let mut payload = Vec::new();
if idx < buf.len() { if idx < buf.len() {
payload = buf[(idx + 1)..buf.len()].to_vec(); payload = buf[(idx + 1)..buf.len()].to_vec();
} }
}
Ok(Packet { Ok(Packet {
header: header, header: header,
......
...@@ -191,4 +191,22 @@ mod test { ...@@ -191,4 +191,22 @@ mod test {
let recv_packet = client.receive().unwrap(); let recv_packet = client.receive().unwrap();
assert_eq!(recv_packet.payload, b"test-echo".to_vec()); assert_eq!(recv_packet.payload, b"test-echo".to_vec());
} }
#[test]
fn test_echo_server_no_token() {
let mut server = CoAPServer::new("127.0.0.1:5683").unwrap();
server.handle(request_handler).unwrap();
let client = CoAPClient::new("127.0.0.1:5683").unwrap();
let mut packet = Packet::new();
packet.header.set_version(1);
packet.header.set_type(PacketType::Confirmable);
packet.header.set_code("0.01");
packet.header.set_message_id(1);
packet.add_option(OptionType::UriPath, b"test-echo".to_vec());
client.send(&packet).unwrap();
let recv_packet = client.receive().unwrap();
assert_eq!(recv_packet.payload, b"test-echo".to_vec());
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment