Skip to content
Snippets Groups Projects
Select Git revision
  • bd1dfaf9b2e0d45b7814f91f32d4ae453cb63a7c
  • master default
  • 0.5.1
  • 0.3.1
4 results

idiot.rs

Blame
  • 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),
                }