A simple yet functional SSDP Client Written in Rust

A little personal experiment to: 1) learn the Rust's networking (and specifically UDP related) APIs 1) implement a working and easy to use SSDP Client 1) learn a little more about SSDP

Currently, ~~documentation and~~ testing coverage is pretty lacking. This will be addressed in subsequent commits.

Building

cargo build

Release Candidate

cargo build --release

Running

Local Testing

./target/debug/ssdp-client --help

Release Candidate

./target/release/ssdp-client --help

Example Usage

As an App

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

As a Lib

Cargo.toml

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

mod declaration

extern crate ssdp;

Code

fn 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);
        exit(0);
    }
}

ssdp::listen(&print_headers)