Select Git revision
idiot.rs 2.35 KiB
extern crate coap;
use std::io::ErrorKind;
use coap::{CoAPClient, CoAPOption, CoAPRequest, CoAPResponse, CoAPServer};
use coap::IsMessage;
fn request_handler(request: CoAPRequest) -> Option<CoAPResponse> {
let uri_path = request.get_option(CoAPOption::UriPath).unwrap();
return match request.response {
Some(mut response) => {
response.set_payload(uri_path.front().unwrap().clone());
Some(response)
}
_ => None,
};
}
fn register() {
let url = "127.0.0.1:9683";
let endpoint = "servicediscovery/publish";
let client = CoAPClient::new(url).unwrap();
let mut request = CoAPRequest::new();
request.set_code("0.02");
request.set_version(1);
let service_description = "
{
\"name\": \"crazy-827635ef\",
\"type\": \"kalle._coap-json._udp\",
\"host\": \"127.0.0.1\",
\"port\": \"3400\",
\"domain\": \"unknown\",
\"properties\": {
\"property\": [
{
\"name\": \"version\",
\"value\": \"1.0\"
},
{
\"name\": \"path\",
\"value\": \"/palletAvailable\",
\"loc\": \"Station-01\"
}
]
}
}";
request.set_payload(service_description.to_string().into_bytes());
request.add_option(CoAPOption::UriPath, endpoint.to_string().into_bytes());
println!("{:?}", request);
client.send(&request).unwrap();
println!("Client request: coap://{}{}", url, endpoint);
match client.receive() {
Ok(response) => {
println!(
"Server reply: {}",
String::from_utf8(response.message.payload).unwrap()
);
}
Err(e) => {
match e.kind() {
ErrorKind::WouldBlock => println!("Request timeout"), // Unix
ErrorKind::TimedOut => println!("Request timeout"), // Windows
_ => println!("Request error: {:?}", e),
}