#coap-server #coap #server-framework #early #functional

bin+lib bronze

A rust coap server framework. (Early, but functional.)

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2016年3月11日

#8 in #coap-server

MIT/Apache

29KB
760

青铜

Build Status

青铜是一个旨在创建高性能CoAP服务器的CoAP框架。目前并不打算用于资源受限的设备,但这是一个长期目标。

青铜使用mio处理所有网络请求,这意味着它的开销非常低。

状态

青铜尚未完成,您可能不应该使用它。

目前可以创建直接处理传入CoAP数据包的服务器,但还没有自动处理重试或多数据包消息的功能。

尚未实现客户端请求。

入门指南

要使用青铜,请将以下内容添加到您的Cargo.toml

[dependencies]
bronze = "0.1"

然后您需要创建并运行服务器,以下是一个简单的示例:

extern crate bronze;

use bronze::endpoint::Endpoint;
use bronze::nullserver::NullServer;

fn main() {
    let local_addr = "127.0.0.1:5683".parse().unwrap();
    println!("CoAP Server Listening on {}", local_addr);
    Endpoint::new(local_addr).run(NullServer);
}

此示例使用包含的NullServer,这是一个如何编写请求处理器的示例。NullServer简单地用RST消息回复所有有效的CoAP数据包。它是用以下方式实现的:

use message::*;
use endpoint::RequestHandler;

use std::net::SocketAddr;

pub struct NullServer;

impl RequestHandler for NullServer {
    fn handle_request(&self, _addr: SocketAddr, in_pkt: &[u8]) -> Option<Vec<u8>> {
        //verify it's a real coap packet
        match Message::from_bin(in_pkt) {
            // is coap, reply with Reset
            // todo: would it be better to use an ack w/ error code?
            Ok(request) => {
                let reply = Message{
                    version: 1,
                    mtype: Mtype::Reset,
                    code: Code::Empty,
                    mid: request.mid,
                    token: request.token.clone(),
                    options: vec![],
                    payload: vec![]
                };

                Some(reply.as_bin().unwrap())
            },
            // not coap, ignore (prevents participating in reflection attacks)
            Err(_) => {
                None
            }
        }
    }
}

依赖项

~3.5MB
~70K SLoC