← 返回首页
GitHub - martindisch/coap-lite: A lightweight CoAP message manipulation crate, ideal for embedded environments · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

martindisch/coap-lite

Go to file
Code

Repository files navigation

More items

coap-lite

A lightweight low-level CoAP message manipulation crate.

Its goal is to be compliant with the CoAP standards and to provide a building block for libraries (e.g. coap) and applications.

coap-lite supports #![no_std] and embedded environments.

It was originally based on the improved low-level message handling code from the coap crate as well as rust-async-coap, made to work in bare metal environments.

Supported RFCs

Usage

This crate provides several types that can be used to build, modify and encode/decode CoAP messages to/from their byte representation.

Note for no_std users: it does require allocation, so you might have to set a global allocator depending on your target.

Client

The following example uses std::net::UdpSocket to send the UDP packet but you can use anything, e.g. smoltcp for embedded.

use coap_lite::{ CoapRequest, RequestType as Method }; use std::net::{SocketAddr, UdpSocket}; fn main() { let mut request: CoapRequest<SocketAddr> = CoapRequest::new(); request.set_method(Method::Get); request.set_path("/test"); let socket = UdpSocket::bind("127.0.0.1:0").unwrap(); let packet = request.message.to_bytes().unwrap(); socket.send_to(&packet[..], "127.0.0.1:5683").expect("Could not send the data"); }

Server

use coap_lite::{CoapRequest, Packet}; use std::net::{UdpSocket}; fn main() { let socket = UdpSocket::bind("127.0.0.1:5683").unwrap(); let mut buf = [0; 100]; let (size, src) = socket.recv_from(&mut buf).expect("Didn't receive data"); println!("Payload {:x?}", &buf[..size]); let packet = Packet::from_bytes(&buf[..size]).unwrap(); let request = CoapRequest::from_packet(packet, src); let method = request.get_method().clone(); let path = request.get_path(); println!("Received CoAP request '{:?} {}' from {}", method, path, src); let mut response = request.response.unwrap(); response.message.payload = b"OK".to_vec(); let packet = response.message.to_bytes().unwrap(); socket.send_to(&packet[..], &src).expect("Could not send the data"); }

Low-level binary conversion

use coap_lite::{ CoapOption, MessageClass, MessageType, Packet, RequestType, ResponseType, }; let mut request = Packet::new(); request.header.message_id = 23839; request.header.code = MessageClass::Request(RequestType::Get); request.set_token(vec![0, 0, 57, 116]); request.add_option(CoapOption::UriHost, b"localhost".to_vec()); request.add_option(CoapOption::UriPath, b"tv1".to_vec()); assert_eq!( [ 0x44, 0x01, 0x5D, 0x1F, 0x00, 0x00, 0x39, 0x74, 0x39, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x68, 0x6F, 0x73, 0x74, 0x83, 0x74, 0x76, 0x31, ], request.to_bytes().unwrap()[..] ); let response = Packet::from_bytes(&[ 0x64, 0x45, 0x5D, 0x1F, 0x00, 0x00, 0x39, 0x74, 0xFF, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21, ]) .unwrap(); assert_eq!(23839, response.header.message_id); assert_eq!( MessageClass::Response(ResponseType::Content), response.header.code ); assert_eq!(MessageType::Acknowledgement, response.header.get_type()); assert_eq!([0, 0, 57, 116], response.get_token()[..]); assert_eq!(b"Hello World!", &response.payload[..]);

License

Licensed under either of

at your option.

This is a modification of the coap and rust-async-coap crates, their licenses are in LICENSE-3RD-PARTY.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

A lightweight CoAP message manipulation crate, ideal for embedded environments

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

35 stars

Watchers

4 watching

Forks

Packages

 
 
 

Contributors

Languages

Footer

© 2026 GitHub, Inc.