#client #ssdp #udp-client #functional #networking #payload

bin+lib simple-ssdp-client

使用 Rust 编写的简单而实用的 SSDP 客户端

5 个版本

使用旧的 Rust 2015

0.1.5 2019 年 11 月 25 日
0.1.4 2019 年 11 月 25 日

#4#ssdp

自定义许可证

9KB
138

使用 Rust 编写的简单而实用的 SSDP 客户端

这是一个小小的个人实验,旨在

  1. 学习 Rust 的网络(特别是与 UDP 相关的)API
  2. 实现一个工作且易于使用的 SSDP 客户端
  3. 更多地了解 SSDP

目前,文档和测试覆盖率相当不足。这将在后续提交中得到解决。

构建

cargo build

发布候选

cargo build --release

运行

本地测试

$ ./target/debug/simple_ssdp_client --help

发布候选

$ ./target/release/simple_ssdp_client --help

示例用法

作为一个应用程序

$ ./target/debug/simple_ssdp_client --server=roku
{"server" : "roku/9.2.0 upnp/1.0 roku/9.2.0", "location: "http://192.168.1.25:8060/"}

显示 SSDP M-Search 有效负载

$ ./target/debug/simple_ssdp_client --print-payload

    M-SEARCH * HTTP/1.1
    Host: 239.255.255.250:1900
    Man: "ssdp:discover"
    ST: ssdp:all
    MX: 5

作为一个库

Cargo.toml

ssdp = { package = "simple-ssdp-client", version = "0.1.4" }

模块声明

extern crate ssdp;

代码

# optionally if you wanted to use a server response outside of this context
let mut url = String::new(); 
let print_headers = |response_headers: &ResponseHeaders| {
    fn determine_server(abc: &ArgMatches) -> String {
        match abc.value_of("server_pattern") {
            Some(server) => { return String::from(server) }
            None => { return String::new() }
        };
    }
    let resolved_server = determine_server( &args());
    if response_headers.server.contains(resolved_server.as_str()) {
        println!("{{\"server\" : \"{}\", \"location: \"{}\"}}", response_headers.server, response_headers.location);
        url = response_headers.location.clone(); # see above
        exit(0);
    }
};

ssdp::listen( print_headers)

依赖项

~750KB