aboutsummaryrefslogtreecommitdiff
path: root/ctr-std/src/net
diff options
context:
space:
mode:
authorFenrir <[email protected]>2018-08-19 17:48:00 -0600
committerFenrir <[email protected]>2018-08-19 17:56:18 -0600
commit5d28bfcfd6086c3328837de9695099ea39048d0d (patch)
treea514fde042ff2a504a03305bfe0894ff8cd8d47e /ctr-std/src/net
parentUpdate for latest nightly 2018-06-09 (#70) (diff)
downloadctru-rs-5d28bfcfd6086c3328837de9695099ea39048d0d.tar.xz
ctru-rs-5d28bfcfd6086c3328837de9695099ea39048d0d.zip
Update for nightly-2018-08-18
Diffstat (limited to 'ctr-std/src/net')
-rw-r--r--ctr-std/src/net/ip.rs218
-rw-r--r--ctr-std/src/net/parser.rs7
-rw-r--r--ctr-std/src/net/tcp.rs4
-rw-r--r--ctr-std/src/net/udp.rs2
4 files changed, 123 insertions, 108 deletions
diff --git a/ctr-std/src/net/ip.rs b/ctr-std/src/net/ip.rs
index fcec8d0..9a610cd 100644
--- a/ctr-std/src/net/ip.rs
+++ b/ctr-std/src/net/ip.rs
@@ -16,8 +16,6 @@
use cmp::Ordering;
use fmt;
use hash;
-use mem;
-use net::{hton, ntoh};
use sys::net::netc as c;
use sys_common::{AsInner, FromInner};
@@ -162,9 +160,9 @@ impl IpAddr {
/// ```
#[stable(feature = "ip_shared", since = "1.12.0")]
pub fn is_unspecified(&self) -> bool {
- match *self {
- IpAddr::V4(ref a) => a.is_unspecified(),
- IpAddr::V6(ref a) => a.is_unspecified(),
+ match self {
+ IpAddr::V4(ip) => ip.is_unspecified(),
+ IpAddr::V6(ip) => ip.is_unspecified(),
}
}
@@ -187,9 +185,9 @@ impl IpAddr {
/// ```
#[stable(feature = "ip_shared", since = "1.12.0")]
pub fn is_loopback(&self) -> bool {
- match *self {
- IpAddr::V4(ref a) => a.is_loopback(),
- IpAddr::V6(ref a) => a.is_loopback(),
+ match self {
+ IpAddr::V4(ip) => ip.is_loopback(),
+ IpAddr::V6(ip) => ip.is_loopback(),
}
}
@@ -216,9 +214,9 @@ impl IpAddr {
/// }
/// ```
pub fn is_global(&self) -> bool {
- match *self {
- IpAddr::V4(ref a) => a.is_global(),
- IpAddr::V6(ref a) => a.is_global(),
+ match self {
+ IpAddr::V4(ip) => ip.is_global(),
+ IpAddr::V6(ip) => ip.is_global(),
}
}
@@ -241,9 +239,9 @@ impl IpAddr {
/// ```
#[stable(feature = "ip_shared", since = "1.12.0")]
pub fn is_multicast(&self) -> bool {
- match *self {
- IpAddr::V4(ref a) => a.is_multicast(),
- IpAddr::V6(ref a) => a.is_multicast(),
+ match self {
+ IpAddr::V4(ip) => ip.is_multicast(),
+ IpAddr::V6(ip) => ip.is_multicast(),
}
}
@@ -270,9 +268,9 @@ impl IpAddr {
/// }
/// ```
pub fn is_documentation(&self) -> bool {
- match *self {
- IpAddr::V4(ref a) => a.is_documentation(),
- IpAddr::V6(ref a) => a.is_documentation(),
+ match self {
+ IpAddr::V4(ip) => ip.is_documentation(),
+ IpAddr::V6(ip) => ip.is_documentation(),
}
}
@@ -295,7 +293,7 @@ impl IpAddr {
/// ```
#[stable(feature = "ipaddr_checker", since = "1.16.0")]
pub fn is_ipv4(&self) -> bool {
- match *self {
+ match self {
IpAddr::V4(_) => true,
IpAddr::V6(_) => false,
}
@@ -320,7 +318,7 @@ impl IpAddr {
/// ```
#[stable(feature = "ipaddr_checker", since = "1.16.0")]
pub fn is_ipv6(&self) -> bool {
- match *self {
+ match self {
IpAddr::V4(_) => false,
IpAddr::V6(_) => true,
}
@@ -340,18 +338,21 @@ impl Ipv4Addr {
/// let addr = Ipv4Addr::new(127, 0, 0, 1);
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
- pub fn new(a: u8, b: u8, c: u8, d: u8) -> Ipv4Addr {
+ #[rustc_const_unstable(feature = "const_ip")]
+ pub const fn new(a: u8, b: u8, c: u8, d: u8) -> Ipv4Addr {
Ipv4Addr {
inner: c::in_addr {
- s_addr: hton(((a as u32) << 24) |
- ((b as u32) << 16) |
- ((c as u32) << 8) |
- (d as u32)),
+ s_addr: u32::to_be(
+ ((a as u32) << 24) |
+ ((b as u32) << 16) |
+ ((c as u32) << 8) |
+ (d as u32)
+ ),
}
}
}
- /// Creates a new IPv4 address with the address pointing to localhost: 127.0.0.1.
+ /// An IPv4 address with the address pointing to localhost: 127.0.0.1.
///
/// # Examples
///
@@ -359,17 +360,15 @@ impl Ipv4Addr {
/// #![feature(ip_constructors)]
/// use std::net::Ipv4Addr;
///
- /// let addr = Ipv4Addr::localhost();
+ /// let addr = Ipv4Addr::LOCALHOST;
/// assert_eq!(addr, Ipv4Addr::new(127, 0, 0, 1));
/// ```
#[unstable(feature = "ip_constructors",
reason = "requires greater scrutiny before stabilization",
issue = "44582")]
- pub fn localhost() -> Ipv4Addr {
- Ipv4Addr::new(127, 0, 0, 1)
- }
+ pub const LOCALHOST: Self = Ipv4Addr::new(127, 0, 0, 1);
- /// Creates a new IPv4 address representing an unspecified address: 0.0.0.0
+ /// An IPv4 address representing an unspecified address: 0.0.0.0
///
/// # Examples
///
@@ -377,15 +376,29 @@ impl Ipv4Addr {
/// #![feature(ip_constructors)]
/// use std::net::Ipv4Addr;
///
- /// let addr = Ipv4Addr::unspecified();
+ /// let addr = Ipv4Addr::UNSPECIFIED;
/// assert_eq!(addr, Ipv4Addr::new(0, 0, 0, 0));
/// ```
#[unstable(feature = "ip_constructors",
reason = "requires greater scrutiny before stabilization",
issue = "44582")]
- pub fn unspecified() -> Ipv4Addr {
- Ipv4Addr::new(0, 0, 0, 0)
- }
+ pub const UNSPECIFIED: Self = Ipv4Addr::new(0, 0, 0, 0);
+
+ /// An IPv4 address representing the broadcast address: 255.255.255.255
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// #![feature(ip_constructors)]
+ /// use std::net::Ipv4Addr;
+ ///
+ /// let addr = Ipv4Addr::BROADCAST;
+ /// assert_eq!(addr, Ipv4Addr::new(255, 255, 255, 255));
+ /// ```
+ #[unstable(feature = "ip_constructors",
+ reason = "requires greater scrutiny before stabilization",
+ issue = "44582")]
+ pub const BROADCAST: Self = Ipv4Addr::new(255, 255, 255, 255);
/// Returns the four eight-bit integers that make up this address.
///
@@ -399,7 +412,7 @@ impl Ipv4Addr {
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
pub fn octets(&self) -> [u8; 4] {
- let bits = ntoh(self.inner.s_addr);
+ let bits = u32::from_be(self.inner.s_addr);
[(bits >> 24) as u8, (bits >> 16) as u8, (bits >> 8) as u8, bits as u8]
}
@@ -470,11 +483,11 @@ impl Ipv4Addr {
/// ```
#[stable(since = "1.7.0", feature = "ip_17")]
pub fn is_private(&self) -> bool {
- match (self.octets()[0], self.octets()[1]) {
- (10, _) => true,
- (172, b) if b >= 16 && b <= 31 => true,
- (192, 168) => true,
- _ => false
+ match self.octets() {
+ [10, ..] => true,
+ [172, b, ..] if b >= 16 && b <= 31 => true,
+ [192, 168, ..] => true,
+ _ => false,
}
}
@@ -496,7 +509,10 @@ impl Ipv4Addr {
/// ```
#[stable(since = "1.7.0", feature = "ip_17")]
pub fn is_link_local(&self) -> bool {
- self.octets()[0] == 169 && self.octets()[1] == 254
+ match self.octets() {
+ [169, 254, ..] => true,
+ _ => false,
+ }
}
/// Returns [`true`] if the address appears to be globally routable.
@@ -573,8 +589,7 @@ impl Ipv4Addr {
/// ```
#[stable(since = "1.7.0", feature = "ip_17")]
pub fn is_broadcast(&self) -> bool {
- self.octets()[0] == 255 && self.octets()[1] == 255 &&
- self.octets()[2] == 255 && self.octets()[3] == 255
+ self == &Self::BROADCAST
}
/// Returns [`true`] if this address is in a range designated for documentation.
@@ -600,11 +615,11 @@ impl Ipv4Addr {
/// ```
#[stable(since = "1.7.0", feature = "ip_17")]
pub fn is_documentation(&self) -> bool {
- match(self.octets()[0], self.octets()[1], self.octets()[2], self.octets()[3]) {
- (192, 0, 2, _) => true,
- (198, 51, 100, _) => true,
- (203, 0, 113, _) => true,
- _ => false
+ match self.octets() {
+ [192, 0, 2, _] => true,
+ [198, 51, 100, _] => true,
+ [203, 0, 113, _] => true,
+ _ => false,
}
}
@@ -654,9 +669,9 @@ impl Ipv4Addr {
#[stable(feature = "ip_addr", since = "1.7.0")]
impl fmt::Display for IpAddr {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
- match *self {
- IpAddr::V4(ref a) => a.fmt(fmt),
- IpAddr::V6(ref a) => a.fmt(fmt),
+ match self {
+ IpAddr::V4(ip) => ip.fmt(fmt),
+ IpAddr::V6(ip) => ip.fmt(fmt),
}
}
}
@@ -705,8 +720,8 @@ impl PartialEq for Ipv4Addr {
#[stable(feature = "ip_cmp", since = "1.16.0")]
impl PartialEq<Ipv4Addr> for IpAddr {
fn eq(&self, other: &Ipv4Addr) -> bool {
- match *self {
- IpAddr::V4(ref v4) => v4 == other,
+ match self {
+ IpAddr::V4(v4) => v4 == other,
IpAddr::V6(_) => false,
}
}
@@ -715,8 +730,8 @@ impl PartialEq<Ipv4Addr> for IpAddr {
#[stable(feature = "ip_cmp", since = "1.16.0")]
impl PartialEq<IpAddr> for Ipv4Addr {
fn eq(&self, other: &IpAddr) -> bool {
- match *other {
- IpAddr::V4(ref v4) => self == v4,
+ match other {
+ IpAddr::V4(v4) => self == v4,
IpAddr::V6(_) => false,
}
}
@@ -743,8 +758,8 @@ impl PartialOrd for Ipv4Addr {
#[stable(feature = "ip_cmp", since = "1.16.0")]
impl PartialOrd<Ipv4Addr> for IpAddr {
fn partial_cmp(&self, other: &Ipv4Addr) -> Option<Ordering> {
- match *self {
- IpAddr::V4(ref v4) => v4.partial_cmp(other),
+ match self {
+ IpAddr::V4(v4) => v4.partial_cmp(other),
IpAddr::V6(_) => Some(Ordering::Greater),
}
}
@@ -753,8 +768,8 @@ impl PartialOrd<Ipv4Addr> for IpAddr {
#[stable(feature = "ip_cmp", since = "1.16.0")]
impl PartialOrd<IpAddr> for Ipv4Addr {
fn partial_cmp(&self, other: &IpAddr) -> Option<Ordering> {
- match *other {
- IpAddr::V4(ref v4) => self.partial_cmp(v4),
+ match other {
+ IpAddr::V4(v4) => self.partial_cmp(v4),
IpAddr::V6(_) => Some(Ordering::Less),
}
}
@@ -763,7 +778,7 @@ impl PartialOrd<IpAddr> for Ipv4Addr {
#[stable(feature = "rust1", since = "1.0.0")]
impl Ord for Ipv4Addr {
fn cmp(&self, other: &Ipv4Addr) -> Ordering {
- ntoh(self.inner.s_addr).cmp(&ntoh(other.inner.s_addr))
+ u32::from_be(self.inner.s_addr).cmp(&u32::from_be(other.inner.s_addr))
}
}
@@ -856,21 +871,27 @@ impl Ipv6Addr {
/// let addr = Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff);
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
- pub fn new(a: u16, b: u16, c: u16, d: u16, e: u16, f: u16, g: u16,
- h: u16) -> Ipv6Addr {
- let mut addr: c::in6_addr = unsafe { mem::zeroed() };
- addr.s6_addr = [(a >> 8) as u8, a as u8,
- (b >> 8) as u8, b as u8,
- (c >> 8) as u8, c as u8,
- (d >> 8) as u8, d as u8,
- (e >> 8) as u8, e as u8,
- (f >> 8) as u8, f as u8,
- (g >> 8) as u8, g as u8,
- (h >> 8) as u8, h as u8];
- Ipv6Addr { inner: addr }
+ #[rustc_const_unstable(feature = "const_ip")]
+ pub const fn new(a: u16, b: u16, c: u16, d: u16, e: u16, f: u16,
+ g: u16, h: u16) -> Ipv6Addr {
+ Ipv6Addr {
+ inner: c::in6_addr {
+ s6_addr: [
+ (a >> 8) as u8, a as u8,
+ (b >> 8) as u8, b as u8,
+ (c >> 8) as u8, c as u8,
+ (d >> 8) as u8, d as u8,
+ (e >> 8) as u8, e as u8,
+ (f >> 8) as u8, f as u8,
+ (g >> 8) as u8, g as u8,
+ (h >> 8) as u8, h as u8
+ ],
+ }
+ }
+
}
- /// Creates a new IPv6 address representing localhost: `::1`.
+ /// An IPv6 address representing localhost: `::1`.
///
/// # Examples
///
@@ -878,17 +899,15 @@ impl Ipv6Addr {
/// #![feature(ip_constructors)]
/// use std::net::Ipv6Addr;
///
- /// let addr = Ipv6Addr::localhost();
+ /// let addr = Ipv6Addr::LOCALHOST;
/// assert_eq!(addr, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
/// ```
#[unstable(feature = "ip_constructors",
reason = "requires greater scrutiny before stabilization",
issue = "44582")]
- pub fn localhost() -> Ipv6Addr {
- Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1)
- }
+ pub const LOCALHOST: Self = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);
- /// Creates a new IPv6 address representing the unspecified address: `::`
+ /// An IPv6 address representing the unspecified address: `::`
///
/// # Examples
///
@@ -896,15 +915,13 @@ impl Ipv6Addr {
/// #![feature(ip_constructors)]
/// use std::net::Ipv6Addr;
///
- /// let addr = Ipv6Addr::unspecified();
+ /// let addr = Ipv6Addr::UNSPECIFIED;
/// assert_eq!(addr, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
/// ```
#[unstable(feature = "ip_constructors",
reason = "requires greater scrutiny before stabilization",
issue = "44582")]
- pub fn unspecified() -> Ipv6Addr {
- Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)
- }
+ pub const UNSPECIFIED: Self = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0);
/// Returns the eight 16-bit segments that make up this address.
///
@@ -1321,9 +1338,9 @@ impl PartialEq for Ipv6Addr {
#[stable(feature = "ip_cmp", since = "1.16.0")]
impl PartialEq<IpAddr> for Ipv6Addr {
fn eq(&self, other: &IpAddr) -> bool {
- match *other {
+ match other {
IpAddr::V4(_) => false,
- IpAddr::V6(ref v6) => self == v6,
+ IpAddr::V6(v6) => self == v6,
}
}
}
@@ -1331,9 +1348,9 @@ impl PartialEq<IpAddr> for Ipv6Addr {
#[stable(feature = "ip_cmp", since = "1.16.0")]
impl PartialEq<Ipv6Addr> for IpAddr {
fn eq(&self, other: &Ipv6Addr) -> bool {
- match *self {
+ match self {
IpAddr::V4(_) => false,
- IpAddr::V6(ref v6) => v6 == other,
+ IpAddr::V6(v6) => v6 == other,
}
}
}
@@ -1358,9 +1375,9 @@ impl PartialOrd for Ipv6Addr {
#[stable(feature = "ip_cmp", since = "1.16.0")]
impl PartialOrd<Ipv6Addr> for IpAddr {
fn partial_cmp(&self, other: &Ipv6Addr) -> Option<Ordering> {
- match *self {
+ match self {
IpAddr::V4(_) => Some(Ordering::Less),
- IpAddr::V6(ref v6) => v6.partial_cmp(other),
+ IpAddr::V6(v6) => v6.partial_cmp(other),
}
}
}
@@ -1368,9 +1385,9 @@ impl PartialOrd<Ipv6Addr> for IpAddr {
#[stable(feature = "ip_cmp", since = "1.16.0")]
impl PartialOrd<IpAddr> for Ipv6Addr {
fn partial_cmp(&self, other: &IpAddr) -> Option<Ordering> {
- match *other {
+ match other {
IpAddr::V4(_) => Some(Ordering::Greater),
- IpAddr::V6(ref v6) => self.partial_cmp(v6),
+ IpAddr::V6(v6) => self.partial_cmp(v6),
}
}
}
@@ -1414,8 +1431,7 @@ impl From<u128> for Ipv6Addr {
#[stable(feature = "ipv6_from_octets", since = "1.9.0")]
impl From<[u8; 16]> for Ipv6Addr {
fn from(octets: [u8; 16]) -> Ipv6Addr {
- let mut inner: c::in6_addr = unsafe { mem::zeroed() };
- inner.s6_addr = octets;
+ let inner = c::in6_addr { s6_addr: octets };
Ipv6Addr::from_inner(inner)
}
}
@@ -1846,18 +1862,20 @@ mod tests {
#[test]
fn ipv4_from_constructors() {
- assert_eq!(Ipv4Addr::localhost(), Ipv4Addr::new(127, 0, 0, 1));
- assert!(Ipv4Addr::localhost().is_loopback());
- assert_eq!(Ipv4Addr::unspecified(), Ipv4Addr::new(0, 0, 0, 0));
- assert!(Ipv4Addr::unspecified().is_unspecified());
+ assert_eq!(Ipv4Addr::LOCALHOST, Ipv4Addr::new(127, 0, 0, 1));
+ assert!(Ipv4Addr::LOCALHOST.is_loopback());
+ assert_eq!(Ipv4Addr::UNSPECIFIED, Ipv4Addr::new(0, 0, 0, 0));
+ assert!(Ipv4Addr::UNSPECIFIED.is_unspecified());
+ assert_eq!(Ipv4Addr::BROADCAST, Ipv4Addr::new(255, 255, 255, 255));
+ assert!(Ipv4Addr::BROADCAST.is_broadcast());
}
#[test]
fn ipv6_from_contructors() {
- assert_eq!(Ipv6Addr::localhost(), Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
- assert!(Ipv6Addr::localhost().is_loopback());
- assert_eq!(Ipv6Addr::unspecified(), Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
- assert!(Ipv6Addr::unspecified().is_unspecified());
+ assert_eq!(Ipv6Addr::LOCALHOST, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
+ assert!(Ipv6Addr::LOCALHOST.is_loopback());
+ assert_eq!(Ipv6Addr::UNSPECIFIED, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
+ assert!(Ipv6Addr::UNSPECIFIED.is_unspecified());
}
#[test]
diff --git a/ctr-std/src/net/parser.rs b/ctr-std/src/net/parser.rs
index ae5037c..cf3e535 100644
--- a/ctr-std/src/net/parser.rs
+++ b/ctr-std/src/net/parser.rs
@@ -53,15 +53,12 @@ impl<'a> Parser<'a> {
F: FnOnce(&mut Parser) -> Option<T>,
{
self.read_atomically(move |p| {
- match cb(p) {
- Some(x) => if p.is_eof() {Some(x)} else {None},
- None => None,
- }
+ cb(p).filter(|_| p.is_eof())
})
}
// Return result of first successful parser
- fn read_or<T>(&mut self, parsers: &mut [Box<FnMut(&mut Parser) -> Option<T> + 'static>])
+ fn read_or<T>(&mut self, parsers: &mut [Box<dyn FnMut(&mut Parser) -> Option<T> + 'static>])
-> Option<T> {
for pf in parsers {
if let Some(r) = self.read_atomically(|p: &mut Parser| pf(p)) {
diff --git a/ctr-std/src/net/tcp.rs b/ctr-std/src/net/tcp.rs
index 0f60b5b..75c7a3d 100644
--- a/ctr-std/src/net/tcp.rs
+++ b/ctr-std/src/net/tcp.rs
@@ -81,7 +81,7 @@ pub struct TcpStream(net_imp::TcpStream);
/// }
///
/// fn main() -> io::Result<()> {
-/// let listener = TcpListener::bind("127.0.0.1:80").unwrap();
+/// let listener = TcpListener::bind("127.0.0.1:80")?;
///
/// // accept connections and process them serially
/// for stream in listener.incoming() {
@@ -927,7 +927,7 @@ mod tests {
use time::{Instant, Duration};
use thread;
- fn each_ip(f: &mut FnMut(SocketAddr)) {
+ fn each_ip(f: &mut dyn FnMut(SocketAddr)) {
f(next_test_ip4());
f(next_test_ip6());
}
diff --git a/ctr-std/src/net/udp.rs b/ctr-std/src/net/udp.rs
index d25e299..0ebe328 100644
--- a/ctr-std/src/net/udp.rs
+++ b/ctr-std/src/net/udp.rs
@@ -826,7 +826,7 @@ mod tests {
use time::{Instant, Duration};
use thread;
- fn each_ip(f: &mut FnMut(SocketAddr, SocketAddr)) {
+ fn each_ip(f: &mut dyn FnMut(SocketAddr, SocketAddr)) {
f(next_test_ip4(), next_test_ip4());
f(next_test_ip6(), next_test_ip6());
}