multicast_dns 0.5.0

Simple Rust wrapper around Avahi Daemon
Documentation
# Multicast DNS

[![Build Status](https://travis-ci.org/fxbox/multicast-dns.svg?branch=master)](https://travis-ci.org/fxbox/multicast-dns)

```multicust_dns``` - is essentially a Rust wrapper around Avahi that internally uses AvahiDaemon to manage host name and browse services on the local network.

Requires ```avahi-common```, ```avahi-client``` and ```dbus-1``` libs to compile sucessfully.

For non-linux platforms that don't have required avahi libs, fake implementation is used. 

See [Multicast DNS Utils](https://github.com/fxbox/multicast-dns-utils) command line app as an example.

Examples (see `./examples` folder):

```rust
extern crate multicast_dns;
use multicast_dns::host::HostManager;

fn main() {
    let host_name = format!("custom-host");

    let host_manager = HostManager::new();

    if !host_manager.is_valid_name(&host_name).unwrap() {
        panic!("Host name `{}` is not a valid host name!", &host_name);
    }

    // The `new_host_name` can be different from the one we are trying to set,
    // due to possible collisions that may happen.
    let new_host_name = host_manager.set_name(&host_name).unwrap();

    println!("New host name is: {:?}", &new_host_name);
}
```

or

```rust
extern crate multicast_dns;
use multicast_dns::discovery::*;

fn main() {
    let service_type = format!("_device-info._tcp");
    
    let discovery_manager = DiscoveryManager::new();

    let on_service_resolved = |service: ServiceInfo| {
        println!("Service resolved: {:?}", service);
    };

    let on_service_discovered = |service: ServiceInfo| {
        println!("Service discovered: {:?}", service);

        let resolve_listeners = ResolveListeners {
            on_service_resolved: Some(&on_service_resolved),
        };

        discovery_manager.resolve_service(service, resolve_listeners);
    };

    let on_all_discovered = || {
        println!("All services has been discovered");
    };

    let discovery_listeners = DiscoveryListeners {
        on_service_discovered: Some(&on_service_discovered),
        on_all_discovered: Some(&on_all_discovered),
    };

    discovery_manager.discover_services(&service_type, discovery_listeners);
}
```

Look at [RFC 6762](https://tools.ietf.org/html/rfc6762) and [RFC 6763](https://tools.ietf.org/html/rfc6763) for the standard specifications.

Also one can take a look at [Service Name and Transport Protocol Port Number Registry](http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml) to see currently available and registered services.