From 5aa31c43a0ab50208e58680cf5f29eec8ff76357 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Wed, 22 Jan 2014 15:38:19 -0500 Subject: libnative: Implement get_host_addresses. --- src/libstd/libc.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) (limited to 'src/libstd') diff --git a/src/libstd/libc.rs b/src/libstd/libc.rs index 77ac226a7f1..fd59fb2382b 100644 --- a/src/libstd/libc.rs +++ b/src/libstd/libc.rs @@ -267,7 +267,7 @@ pub mod types { pub enum timezone {} } pub mod bsd44 { - use libc::types::os::arch::c95::c_uint; + use libc::types::os::arch::c95::{c_char, c_int, c_uint}; pub type socklen_t = u32; pub type sa_family_t = u16; @@ -309,6 +309,16 @@ pub mod types { ipv6mr_multiaddr: in6_addr, ipv6mr_interface: c_uint, } + pub struct addrinfo { + ai_flags: c_int, + ai_family: c_int, + ai_socktype: c_int, + ai_protocol: c_int, + ai_addrlen: socklen_t, + ai_addr: *sockaddr, + ai_canonname: *c_char, + ai_next: *addrinfo + } } } @@ -624,7 +634,7 @@ pub mod types { pub enum timezone {} } pub mod bsd44 { - use libc::types::os::arch::c95::c_uint; + use libc::types::os::arch::c95::{c_char, c_int, c_uint}; pub type socklen_t = u32; pub type sa_family_t = u8; @@ -671,6 +681,16 @@ pub mod types { ipv6mr_multiaddr: in6_addr, ipv6mr_interface: c_uint, } + pub struct addrinfo { + ai_flags: c_int, + ai_family: c_int, + ai_socktype: c_int, + ai_protocol: c_int, + ai_addrlen: socklen_t, + ai_canonname: *c_char, + ai_addr: *sockaddr, + ai_next: *addrinfo + } } } @@ -811,7 +831,7 @@ pub mod types { } pub mod bsd44 { - use libc::types::os::arch::c95::{c_int, c_uint}; + use libc::types::os::arch::c95::{c_char, c_int, c_uint, size_t}; pub type SOCKET = c_uint; pub type socklen_t = c_int; @@ -854,6 +874,16 @@ pub mod types { ipv6mr_multiaddr: in6_addr, ipv6mr_interface: c_uint, } + pub struct addrinfo { + ai_flags: c_int, + ai_family: c_int, + ai_socktype: c_int, + ai_protocol: c_int, + ai_addrlen: size_t, + ai_canonname: *c_char, + ai_addr: *sockaddr, + ai_next: *addrinfo + } } } @@ -1121,7 +1151,7 @@ pub mod types { } pub mod bsd44 { - use libc::types::os::arch::c95::{c_int, c_uint}; + use libc::types::os::arch::c95::{c_char, c_int, c_uint}; pub type socklen_t = c_int; pub type sa_family_t = u8; @@ -1168,6 +1198,16 @@ pub mod types { ipv6mr_multiaddr: in6_addr, ipv6mr_interface: c_uint, } + pub struct addrinfo { + ai_flags: c_int, + ai_family: c_int, + ai_socktype: c_int, + ai_protocol: c_int, + ai_addrlen: socklen_t, + ai_canonname: *c_char, + ai_addr: *sockaddr, + ai_next: *addrinfo + } } } -- cgit 1.4.1-3-g733a5 From a04cc4db2c077fd2fcf6e5bcca92eecb3cfa8380 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Wed, 22 Jan 2014 16:05:28 -0500 Subject: libstd: Use iotest! for for get_host_addresses. --- src/librustuv/addrinfo.rs | 36 ------------------------------------ src/libstd/io/net/addrinfo.rs | 16 +++++++++++----- 2 files changed, 11 insertions(+), 41 deletions(-) (limited to 'src/libstd') diff --git a/src/librustuv/addrinfo.rs b/src/librustuv/addrinfo.rs index 2fe4819c789..2740671c00d 100644 --- a/src/librustuv/addrinfo.rs +++ b/src/librustuv/addrinfo.rs @@ -183,39 +183,3 @@ pub fn accum_addrinfo(addr: &Addrinfo) -> ~[ai::Info] { return addrs; } } - -// cannot give tcp/ip permission without help of apk -#[cfg(test, not(target_os="android"))] -mod test { - use std::io::net::ip::{SocketAddr, Ipv4Addr}; - use super::super::local_loop; - use super::GetAddrInfoRequest; - - #[test] - fn getaddrinfo_test() { - let loop_ = &mut local_loop().loop_; - match GetAddrInfoRequest::run(loop_, Some("localhost"), None, None) { - Ok(infos) => { - let mut found_local = false; - let local_addr = &SocketAddr { - ip: Ipv4Addr(127, 0, 0, 1), - port: 0 - }; - for addr in infos.iter() { - found_local = found_local || addr.address == *local_addr; - } - assert!(found_local); - } - Err(e) => fail!("{:?}", e), - } - } - - #[test] - fn issue_10663() { - let loop_ = &mut local_loop().loop_; - // Something should happen here, but this certainly shouldn't cause - // everything to die. The actual outcome we don't care too much about. - GetAddrInfoRequest::run(loop_, Some("irc.n0v4.com"), None, - None); - } -} diff --git a/src/libstd/io/net/addrinfo.rs b/src/libstd/io/net/addrinfo.rs index fe29a112262..4a8529d0a0a 100644 --- a/src/libstd/io/net/addrinfo.rs +++ b/src/libstd/io/net/addrinfo.rs @@ -98,15 +98,15 @@ fn lookup(hostname: Option<&str>, servname: Option<&str>, hint: Option) LocalIo::maybe_raise(|io| io.get_host_addresses(hostname, servname, hint)) } -#[cfg(test)] +// Ignored on android since we cannot give tcp/ip +// permission without help of apk +#[cfg(test, not(target_os = "android"))] mod test { use io::net::ip::Ipv4Addr; use prelude::*; use super::*; - #[test] - #[ignore(cfg(target_os="android"))] // cannot give tcp/ip permission without help of apk - fn dns_smoke_test() { + iotest!(fn dns_smoke_test() { let ipaddrs = get_host_addresses("localhost").unwrap(); let mut found_local = false; let local_addr = &Ipv4Addr(127, 0, 0, 1); @@ -114,5 +114,11 @@ mod test { found_local = found_local || addr == local_addr; } assert!(found_local); - } + }) + + iotest!(fn issue_10663() { + // Something should happen here, but this certainly shouldn't cause + // everything to die. The actual outcome we don't care too much about. + get_host_addresses("example.com"); + } #[ignore]) } -- cgit 1.4.1-3-g733a5