Skip to content

A Constrained Application Protocol(CoAP) library implemented in Rust.

License

Notifications You must be signed in to change notification settings

zuma-array/coap-rs

This branch is 1 commit ahead of, 48 commits behind Covertness/coap-rs:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1e6cc5c · Mar 25, 2024
Jun 19, 2022
Aug 28, 2023
Jan 16, 2024
Jan 15, 2024
Mar 8, 2024
Jan 5, 2024
Jul 3, 2016
Mar 25, 2024
Oct 18, 2019
Jan 16, 2024
Jan 5, 2024
Aug 28, 2023

Repository files navigation

coap-rs

CircleCI Windows Build Status Downloads Coverage Status MIT licensed

A fast and stable Constrained Application Protocol(CoAP) library implemented in Rust.

Features:

  • CoAP core protocol RFC 7252
  • CoAP Observe option RFC 7641
  • Too Many Requests Response Code RFC 8516
  • Block-Wise Transfers RFC 7959
  • DTLS support via webrtc-rs
  • Option to provide custom transports for client and server

Documentation

Installation

First add this to your Cargo.toml:

[dependencies]
coap = "0.14"
coap-lite = "0.11.3"
tokio = {version = "^1.32", features = ["full"]}

Example

Server:

 use coap_lite::{RequestType as Method, CoapRequest};
 use coap::Server;
 use tokio::runtime::Runtime;
 use std::net::SocketAddr;
 fn main() {
     let addr = "127.0.0.1:5683";
 	Runtime::new().unwrap().block_on(async move {
         let mut server = Server::new_udp(addr).unwrap();
         println!("Server up on {}", addr);

         server.run(|mut request: Box<CoapRequest<SocketAddr>>| async {
             match request.get_method() {
                 &Method::Get => println!("request by get {}", request.get_path()),
                 &Method::Post => println!("request by post {}", String::from_utf8(request.message.payload.clone()).unwrap()),
                 &Method::Put => println!("request by put {}", String::from_utf8(request.message.payload.clone()).unwrap()),
                 _ => println!("request by other method"),
             };

             match request.response {
                 Some(ref mut message) => {
                     message.message.payload = b"OK".to_vec();

                 },
                 _ => {}
             };
             return request
         }).await.unwrap();
     });
 }

Client:

 use coap_lite::{RequestType as Method, CoapRequest};
 use coap::{UdpCoAPClient};
 use tokio::main;
 #[tokio::main]
 async fn main() {
     let url = "coap://127.0.0.1:5683/Rust";
     println!("Client request: {}", url);

     let response = UdpCoAPClient::get(url).await.unwrap();
     println!("Server reply: {}", String::from_utf8(response.message.payload).unwrap());
 }

Benchmark

$ cargo bench

About

A Constrained Application Protocol(CoAP) library implemented in Rust.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%