1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
#![warn( nonstandard_style, rust_2018_idioms, future_incompatible, missing_debug_implementations )] //! An asynchronous library for finding UPnP control points, performing actions on them //! and reading their service descriptions. //! UPnP stand for `Universal Plug and Play` and is widely used for routers, WiFi-enabled speakers //! and media servers. //! //! Specification: //! [http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf](http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf) //! //! # Example usage: //! The following code searches for devices that have a `RenderingControl` service //! and prints their names along with their current volume. //! //! ```rust,no_run //! use futures::prelude::*; //! use std::time::Duration; //! use upnp::ssdp::{SearchTarget, URN}; //! //! const RENDERING_CONTROL: URN = URN::service("schemas-upnp-org", "RenderingControl", 1); //! //! #[async_std::main] //! async fn main() -> Result<(), upnp::Error> { //! let search_target = SearchTarget::URN(RENDERING_CONTROL); //! let devices = upnp::discover(&search_target, Duration::from_secs(3)).await?; //! pin_utils::pin_mut!(devices); //! //! while let Some(device) = devices.try_next().await? { //! let service = device //! .find_service(&RENDERING_CONTROL) //! .expect("searched for RenderingControl, got something else"); //! //! let args = "<InstanceID>0</InstanceID><Channel>Master</Channel>"; //! let response = service.action(device.url(), "GetVolume", args).await?; //! //! let volume = response.get("CurrentVolume").unwrap(); //! //! println!("'{}' is at volume {}", device.friendly_name(), volume); //! } //! //! Ok(()) //! } //! ``` // TODO: doc include when it gets stable mod device; mod discovery; mod error; /// Service Control Protocol Description. pub mod scpd; mod service; mod utils; pub use device::{Device, DeviceSpec}; pub use discovery::discover; pub use error::Error; pub use service::Service; pub use http; pub use ssdp_client as ssdp; pub(crate) type Result<T, E = Error> = std::result::Result<T, E>;