docs
Signed-off-by: Walker Crouse <walker.crouse@coop.co.uk>
This commit is contained in:
parent
954e749b82
commit
7ee598aeb2
@ -3,6 +3,7 @@
|
|||||||
use crate::{EventLoop, NetworkInterface, Result, ServiceDiscoveredCallback};
|
use crate::{EventLoop, NetworkInterface, Result, ServiceDiscoveredCallback};
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
|
|
||||||
|
/// Interface for interacting with underlying mDNS implementation service browsing capabilities.
|
||||||
pub trait TMdnsBrowser {
|
pub trait TMdnsBrowser {
|
||||||
/// Creates a new `MdnsBrowser` that browses for the specified `kind` (e.g. `_http._tcp`)
|
/// Creates a new `MdnsBrowser` that browses for the specified `kind` (e.g. `_http._tcp`)
|
||||||
fn new(kind: &str) -> Self;
|
fn new(kind: &str) -> Self;
|
||||||
|
11
zeroconf/src/event_loop.rs
Normal file
11
zeroconf/src/event_loop.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
//! Trait definition for cross-platform event loop
|
||||||
|
|
||||||
|
use crate::Result;
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
/// A handle on the underlying implementation to poll the event loop. Typically, `poll()`
|
||||||
|
/// is called in a loop to keep a `MdnsService` or `MdnsBrowser` running.
|
||||||
|
pub trait TEventLoop {
|
||||||
|
/// Polls for new events.
|
||||||
|
fn poll(&self, timeout: Duration) -> Result<()>;
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
//! Utilities related to c-string handling
|
||||||
|
|
||||||
use libc::c_char;
|
use libc::c_char;
|
||||||
use std::ffi::{CStr, CString};
|
use std::ffi::{CStr, CString};
|
||||||
|
|
||||||
|
@ -142,6 +142,7 @@ mod txt_record;
|
|||||||
pub mod browser;
|
pub mod browser;
|
||||||
pub mod builder;
|
pub mod builder;
|
||||||
pub mod error;
|
pub mod error;
|
||||||
|
pub mod event_loop;
|
||||||
pub mod ffi;
|
pub mod ffi;
|
||||||
pub mod prelude;
|
pub mod prelude;
|
||||||
pub mod service;
|
pub mod service;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
//! Avahi implementation for cross-platform browser
|
||||||
|
|
||||||
use super::avahi_util;
|
use super::avahi_util;
|
||||||
use super::client::{ManagedAvahiClient, ManagedAvahiClientParams};
|
use super::client::{ManagedAvahiClient, ManagedAvahiClientParams};
|
||||||
use super::constants;
|
use super::constants;
|
||||||
@ -22,7 +24,6 @@ use std::ffi::CString;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::{fmt, ptr};
|
use std::{fmt, ptr};
|
||||||
|
|
||||||
/// Interface for interacting with Avahi's mDNS service browsing capabilities.
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct AvahiMdnsBrowser {
|
pub struct AvahiMdnsBrowser {
|
||||||
client: Option<Arc<ManagedAvahiClient>>,
|
client: Option<Arc<ManagedAvahiClient>>,
|
||||||
|
@ -1,26 +1,22 @@
|
|||||||
//! Event loop for running a `MdnsService` or `MdnsBrowser`.
|
//! Event loop for running a `MdnsService` or `MdnsBrowser`.
|
||||||
|
|
||||||
use super::poll::ManagedAvahiSimplePoll;
|
use super::poll::ManagedAvahiSimplePoll;
|
||||||
|
use crate::event_loop::TEventLoop;
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
/// A handle on the underlying Avahi implementation to poll the event loop. Typically `poll()` is
|
|
||||||
/// called in a loop to keep a [`MdnsService`] or [`MdnsBrowser`] running.
|
|
||||||
///
|
|
||||||
/// [`MdnsService`]: ../../type.MdnsService.html
|
|
||||||
/// [`MdnsBrowser`]: ../../type.MdnsBrowser.html
|
|
||||||
#[derive(new)]
|
#[derive(new)]
|
||||||
pub struct AvahiEventLoop {
|
pub struct AvahiEventLoop {
|
||||||
poll: Arc<ManagedAvahiSimplePoll>,
|
poll: Arc<ManagedAvahiSimplePoll>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AvahiEventLoop {
|
impl TEventLoop for AvahiEventLoop {
|
||||||
/// Polls for new events.
|
/// Polls for new events.
|
||||||
///
|
///
|
||||||
/// Internally calls `ManagedAvahiSimplePoll::iterate(0)`, the `timeout` parameter does not
|
/// Internally calls `ManagedAvahiSimplePoll::iterate(0)`, the `timeout` parameter does not
|
||||||
/// currently do anything in the Avahi implementation.
|
/// currently do anything in the Avahi implementation.
|
||||||
pub fn poll(&self, _timeout: Duration) -> Result<()> {
|
fn poll(&self, _timeout: Duration) -> Result<()> {
|
||||||
self.poll.iterate(0);
|
self.poll.iterate(0);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
//! Avahi implementation for cross-platform service.
|
||||||
|
|
||||||
use super::avahi_util;
|
use super::avahi_util;
|
||||||
use super::client::{self, ManagedAvahiClient, ManagedAvahiClientParams};
|
use super::client::{self, ManagedAvahiClient, ManagedAvahiClientParams};
|
||||||
use super::constants;
|
use super::constants;
|
||||||
@ -19,7 +21,6 @@ use std::fmt::{self, Formatter};
|
|||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// Interface for interacting with Avahi's mDNS service registration capabilities.
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct AvahiMdnsService {
|
pub struct AvahiMdnsService {
|
||||||
client: Option<ManagedAvahiClient>,
|
client: Option<ManagedAvahiClient>,
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
//! Avahi implementation for cross-platform TXT record.
|
||||||
|
|
||||||
use super::string_list::{AvahiStringListNode, ManagedAvahiStringList};
|
use super::string_list::{AvahiStringListNode, ManagedAvahiStringList};
|
||||||
use crate::txt_record::TTxtRecord;
|
use crate::txt_record::TTxtRecord;
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
|
@ -15,7 +15,6 @@ use std::fmt::{self, Formatter};
|
|||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
/// Interface for interacting with Bonjour's mDNS service browsing capabilities.
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct BonjourMdnsBrowser {
|
pub struct BonjourMdnsBrowser {
|
||||||
service: Arc<Mutex<ManagedDNSServiceRef>>,
|
service: Arc<Mutex<ManagedDNSServiceRef>>,
|
||||||
|
@ -1,27 +1,23 @@
|
|||||||
//! Event loop for running a `MdnsService` or `MdnsBrowser`.
|
//! Event loop for running a `MdnsService` or `MdnsBrowser`.
|
||||||
|
|
||||||
use super::service_ref::ManagedDNSServiceRef;
|
use super::service_ref::ManagedDNSServiceRef;
|
||||||
|
use crate::event_loop::TEventLoop;
|
||||||
use crate::{ffi, Result};
|
use crate::{ffi, Result};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
/// A handle on the underlying Bonjour implementation to poll the event loop. Typically, `poll()`
|
|
||||||
/// is called in a loop to keep a [`MdnsService`] or [`MdnsBrowser`] running.
|
|
||||||
///
|
|
||||||
/// [`MdnsService`]: ../../type.MdnsService.html
|
|
||||||
/// [`MdnsBrowser`]: ../../type.MdnsBrowser.html
|
|
||||||
#[derive(new)]
|
#[derive(new)]
|
||||||
pub struct BonjourEventLoop {
|
pub struct BonjourEventLoop {
|
||||||
service: Arc<Mutex<ManagedDNSServiceRef>>,
|
service: Arc<Mutex<ManagedDNSServiceRef>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BonjourEventLoop {
|
impl TEventLoop for BonjourEventLoop {
|
||||||
/// Polls for new events.
|
/// Polls for new events.
|
||||||
///
|
///
|
||||||
/// Prior to calling `ManagedDNSServiceRef::process_result()`, this function performs a unix
|
/// Prior to calling `ManagedDNSServiceRef::process_result()`, this function performs a unix
|
||||||
/// `select()` on the underlying socket with the specified timeout. If the socket contains no
|
/// `select()` on the underlying socket with the specified timeout. If the socket contains no
|
||||||
/// new data, the blocking call is not made.
|
/// new data, the blocking call is not made.
|
||||||
pub fn poll(&self, timeout: Duration) -> Result<()> {
|
fn poll(&self, timeout: Duration) -> Result<()> {
|
||||||
let service = self.service.lock().unwrap();
|
let service = self.service.lock().unwrap();
|
||||||
let select = unsafe { ffi::read_select(service.sock_fd(), timeout)? };
|
let select = unsafe { ffi::read_select(service.sock_fd(), timeout)? };
|
||||||
if select > 0 {
|
if select > 0 {
|
||||||
|
@ -13,7 +13,6 @@ use std::any::Any;
|
|||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
/// Interface for interacting with Bonjour's mDNS service registration capabilities.
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct BonjourMdnsService {
|
pub struct BonjourMdnsService {
|
||||||
service: Arc<Mutex<ManagedDNSServiceRef>>,
|
service: Arc<Mutex<ManagedDNSServiceRef>>,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
//! Crate prelude
|
//! Crate prelude
|
||||||
|
|
||||||
pub use crate::browser::TMdnsBrowser;
|
pub use crate::browser::TMdnsBrowser;
|
||||||
|
pub use crate::event_loop::TEventLoop;
|
||||||
pub use crate::service::TMdnsService;
|
pub use crate::service::TMdnsService;
|
||||||
pub use crate::txt_record::TTxtRecord;
|
pub use crate::txt_record::TTxtRecord;
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
use crate::{EventLoop, NetworkInterface, Result, ServiceRegisteredCallback, TxtRecord};
|
use crate::{EventLoop, NetworkInterface, Result, ServiceRegisteredCallback, TxtRecord};
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
|
|
||||||
|
/// Interface for interacting with underlying mDNS service implementation registration
|
||||||
|
/// capabilities.
|
||||||
pub trait TMdnsService {
|
pub trait TMdnsService {
|
||||||
/// Creates a new `MdnsService` with the specified `kind` (e.g. `_http._tcp`) and `port`.
|
/// Creates a new `MdnsService` with the specified `kind` (e.g. `_http._tcp`) and `port`.
|
||||||
fn new(kind: &str, port: u16) -> Self;
|
fn new(kind: &str, port: u16) -> Self;
|
||||||
|
Loading…
Reference in New Issue
Block a user