Responder

Struct Responder 

Source
pub struct Responder { /* private fields */ }

Implementations§

Source§

impl Responder

Source

pub fn new() -> Responder

Spawn a Responder task on an new os thread.

§Panics

If the tokio runtime cannot be created this will panic.

Source

pub fn new_with_ip_list(allowed_ips: Vec<IpAddr>) -> Result<Responder>

Spawn a Responder task on an new os thread. DNS response records will have the reported IPs limited to those passed in here. This can be particularly useful on machines with lots of networks created by tools such as Docker.

§Errors

If the hostname cannot be converted to a valid unicode string, this will return an error.

§Panics

If the tokio runtime cannot be created this will panic.

Source

pub fn spawn(handle: &Handle) -> Result<Responder>

Spawn a Responder with the provided tokio Handle.

§Example
use libmdns::Responder;

let rt = tokio::runtime::Builder::new_current_thread().build().unwrap();
let handle = rt.handle().clone();
let responder = Responder::spawn(&handle)?;
§Errors

If the hostname cannot be converted to a valid unicode string, this will return an error.

Source

pub fn spawn_with_ip_list( handle: &Handle, allowed_ips: Vec<IpAddr>, ) -> Result<Responder>

Spawn a Responder task with the provided tokio Handle. DNS response records will have the reported IPs limited to those passed in here. This can be particularly useful on machines with lots of networks created by tools such as docker.

§Example
use libmdns::Responder;

let rt = tokio::runtime::Builder::new_current_thread().build().unwrap();
let handle = rt.handle().clone();
let vec: Vec<std::net::IpAddr> = vec![
    "192.168.1.10".parse::<std::net::Ipv4Addr>().unwrap().into(),
    std::net::Ipv6Addr::new(0, 0, 0, 0xfe80, 0x1ff, 0xfe23, 0x4567, 0x890a).into(),
];
let responder = Responder::spawn_with_ip_list(&handle, vec)?;
§Errors

If the hostname cannot be converted to a valid unicode string, this will return an error.

Source

pub fn spawn_with_ip_list_and_hostname( handle: &Handle, allowed_ips: Vec<IpAddr>, hostname: String, ) -> Result<Responder>

Spawn a Responder task with the provided tokio Handle. DNS response records will have the reported IPs limited to those passed in here. This can be particularly useful on machines with lots of networks created by tools such as Docker. And SRV field will have specified hostname instead of system hostname. This can be particularly useful if the platform has the fixed hostname and the application should make hostname unique for its purpose.

§Example
use libmdns::Responder;

let rt = tokio::runtime::Builder::new_current_thread().build().unwrap();
let handle = rt.handle().clone();
let responder = Responder::spawn_with_ip_list_and_hostname(&handle, Vec::new(), "myUniqueName".to_owned())?;
§Errors

If the hostname cannot be converted to a valid unicode string, this will return an error.

Source

pub fn with_default_handle() -> Result<(Responder, Box<dyn Future<Output = ()> + Send + Unpin>)>

Spawn a Responder on the default tokio handle.

§Errors

If the hostname cannot be converted to a valid unicode string, this will return an error.

Source

pub fn with_default_handle_and_ip_list( allowed_ips: Vec<IpAddr>, ) -> Result<(Responder, Box<dyn Future<Output = ()> + Send + Unpin>)>

Spawn a Responder on the default tokio handle. DNS response records will have the reported IPs limited to those passed in here. This can be particularly useful on machines with lots of networks created by tools such as Docker.

§Errors

If the hostname cannot be converted to a valid unicode string, this will return an error.

Source

pub fn with_default_handle_and_ip_list_and_hostname( allowed_ips: Vec<IpAddr>, hostname: String, ) -> Result<(Responder, Box<dyn Future<Output = ()> + Send + Unpin>)>

Spawn a Responder on the default tokio handle. DNS response records will have the reported IPs limited to those passed in here. This can be particularly useful on machines with lots of networks created by tools such as Docker. And SRV field will have specified hostname instead of system hostname. This can be particularly useful if the platform has the fixed hostname and the application should make hostname unique for its purpose.

§Errors

If the hostname cannot be converted to a valid unicode string, this will return an error.

Source§

impl Responder

Source

pub fn register( &self, svc_type: &str, svc_name: &str, port: u16, txt: &[&str], ) -> Service

Register a service to be advertised by the Responder with the DEFAULT_TTL. The service is unregistered on drop.

§Example
use libmdns::Responder;

let responder = Responder::new();
// bind service
let _http_svc = responder.register(
         "_http._tcp".into(),
         "my http server".into(),
         80,
         &["path=/"]
     );
§Panics

If the TXT records are longer than 255 bytes, this will panic.

Source

pub fn register_with_ttl( &self, svc_type: &str, svc_name: &str, port: u16, txt: &[&str], ttl: u32, ) -> Service

Register a service to be advertised by the Responder. With a custom TTL in seconds. The service is unregistered on drop.

You may prefer to use this over Responder::register if you know your service will be short-lived and want clients to respond to it dissapearing more quickly (lower TTL), or if you find your service is very infrequently down and want to reduce network traffic (higher TTL).

This becomes more important whilst waiting for https://github.com/librespot-org/libmdns/issues/27 to be resolved.

§example
use libmdns::Responder;

let responder = Responder::new();
// bind service
let _http_svc = responder.register_with_ttl(
         "_http._tcp".into(),
         "my really unreliable and short-lived http server".into(),
         80,
         &["path=/"],
         10 // mDNS clients are requested to re-check every 10 seconds for this HTTP server
     );
§Panics

If the TXT records are longer than 255 bytes, this will panic.

Trait Implementations§

Source§

impl Default for Responder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V