use std::convert::Into;
use std::net::IpAddr;
use std::net::Ipv4Addr;
use std::net::Ipv6Addr;
pub mod client;
mod http_helper;
pub mod service;
#[cfg(test)]
mod http_helper_test;
mod socket_helper;
#[derive(PartialEq)]
pub enum MulticastAddr {
V4,
V6LinkLocal,
V6SiteLocal,
Loopback,
}
impl MulticastAddr {
pub fn get_ip(&self) -> IpAddr {
match self {
MulticastAddr::V4 => self.get_v4().unwrap().into(),
MulticastAddr::V6LinkLocal => self.get_v6().unwrap().into(),
MulticastAddr::V6SiteLocal => self.get_v6().unwrap().into(),
MulticastAddr::Loopback => self.get_v4().unwrap().into(),
}
}
pub fn is_v4(&self) -> bool {
match self {
MulticastAddr::V4 => true,
MulticastAddr::V6LinkLocal => false,
MulticastAddr::V6SiteLocal => false,
MulticastAddr::Loopback => true,
}
}
pub fn get_v4(&self) -> Option<Ipv4Addr> {
match self {
MulticastAddr::V4 => Some(Ipv4Addr::new(239, 255, 255, 250)),
MulticastAddr::V6LinkLocal => None,
MulticastAddr::V6SiteLocal => None,
MulticastAddr::Loopback => Some(Ipv4Addr::new(127, 0, 0, 1)),
}
}
pub fn get_v6(&self) -> Option<Ipv6Addr> {
match self {
MulticastAddr::V4 => None,
MulticastAddr::V6LinkLocal => Some(Ipv6Addr::new(0xFF02, 0, 0, 0, 0, 0, 0, 0xC)),
MulticastAddr::V6SiteLocal => Some(Ipv6Addr::new(0xFF05, 0, 0, 0, 0, 0, 0, 0xC)),
MulticastAddr::Loopback => None,
}
}
}
pub(crate) static SSDP_PORT: u16 = 1900;