diff --git a/.travis.yml b/.travis.yml index 7961026a..2e6ecb9b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ os: env: global: - secure: J4i75AV4KMrU/UQrLIzzIh35Xix40Ki0uWjm8j05oxlXVl5aPU2zB30AemDne2QXYzkN4kRG/iRnNORE/8D0lF7YipQNSNxgfiBVoOEfj/NSogvI2BftYX9vlLZJUvt+s/nbE3xa/Pyge1IPv7itDYGO7SMe8RTSqitgqyfE2Eg= - - FEATURES="tlsv1_1 tlsv1_2 dtlsv1 dtlsv1_2 aes_xts npn" + - FEATURES="tlsv1_1 tlsv1_2 dtlsv1 aes_xts npn" before_script: - ./openssl/tests/test.sh & script: diff --git a/openssl/src/ssl/connected_socket.rs b/openssl/src/ssl/connected_socket.rs index 55788465..ce4f990b 100644 --- a/openssl/src/ssl/connected_socket.rs +++ b/openssl/src/ssl/connected_socket.rs @@ -16,6 +16,7 @@ use libc::types::os::common::bsd44::sockaddr_in; use libc::types::os::common::bsd44::sockaddr_in6; use libc::types::os::common::bsd44::in_addr; use libc::types::os::common::bsd44::in6_addr; +use libc::types::os::common::bsd44::sa_family_t; use libc::types::os::common::posix01::timeval; use libc::funcs::bsd43::setsockopt; use libc::consts::os::bsd44::SOL_SOCKET; @@ -53,6 +54,62 @@ enum SockaddrIn { V6(sockaddr_in6), } +#[cfg(any(target_os = "linux", target_os = "android", target_os = "nacl", + target_os = "windows"))] +fn new_sockaddr_in() -> sockaddr_in { + sockaddr_in { + sin_family: AF_INET as sa_family_t, + sin_port: 9, + sin_zero: [0; 8], + sin_addr: in_addr { + s_addr: 0 + } + } +} + +#[cfg(not(any(target_os = "linux", target_os = "android", target_os = "nacl", + target_os = "windows")))] +fn new_sockaddr_in() -> sockaddr_in { + sockaddr_in { + sin_len: 0, + sin_family: AF_INET as sa_family_t, + sin_port: 0, + sin_zero: [0; 8], + sin_addr: in_addr { + s_addr: 0 + } + } +} + +#[cfg(any(target_os = "linux", target_os = "android", target_os = "nacl", + target_os = "windows"))] +fn new_sockaddr_in6() -> sockaddr_in6 { + sockaddr_in6 { + sin6_family: AF_INET6 as sa_family_t, + sin6_port: 0, + sin6_flowinfo: 0, + sin6_scope_id: 0, + sin6_addr: in6_addr { + s6_addr: [0; 8], + } + } +} + +#[cfg(not(any(target_os = "linux", target_os = "android", target_os = "nacl", + target_os = "windows")))] +fn new_sockaddr_in6() -> sockaddr_in6 { + sockaddr_in6 { + sin6_family: AF_INET6 as sa_family_t, + sin6_port: 0, + sin6_flowinfo: 0, + sin6_scope_id: 0, + sin6_addr: in6_addr { + s6_addr: [0; 8], + } + } +} + + trait IntoSockaddrIn { fn into_sockaddr_in(self) -> Result; } @@ -63,14 +120,9 @@ impl IntoSockaddrIn for SocketAddr { match self.ip() { IpAddr::V4(_) => { - let mut addr = sockaddr_in { - sin_zero: [0; 8], - sin_family: AF_INET as u16, - sin_port: Int::to_be(self.port()), - sin_addr: in_addr { - s_addr: 0 - } - }; + let mut addr = new_sockaddr_in(); + addr.sin_port = Int::to_be(self.port()); + let cstr = CString::new(ip.clone()).unwrap(); let res = unsafe { inet_pton(addr.sin_family as c_int, @@ -87,15 +139,9 @@ impl IntoSockaddrIn for SocketAddr { }, IpAddr::V6(_) => { - let mut addr = sockaddr_in6 { - sin6_family: AF_INET6 as u16, - sin6_port: Int::to_be(self.port()), - sin6_flowinfo: 0, - sin6_scope_id: 0, - sin6_addr: in6_addr { - s6_addr: [0; 8], - } - }; + let mut addr = new_sockaddr_in6(); + addr.sin6_port = Int::to_be(self.port()); + let cstr = CString::new(ip.clone()).unwrap(); let res = unsafe { inet_pton(addr.sin6_family as c_int, diff --git a/openssl/src/ssl/mod.rs b/openssl/src/ssl/mod.rs index 9cf09bc8..fa388c3a 100644 --- a/openssl/src/ssl/mod.rs +++ b/openssl/src/ssl/mod.rs @@ -132,7 +132,7 @@ impl SslMethod { #[cfg(feature = "dtlsv1_2")] pub fn is_dtlsv1_2(&self) -> bool { - *self == SslMethod::Dtlsv1 + *self == SslMethod::Dtlsv1_2 } pub fn is_dtls(&self) -> bool { diff --git a/openssl/src/ssl/tests.rs b/openssl/src/ssl/tests.rs index 5a0ff9b5..dcdc3c05 100644 --- a/openssl/src/ssl/tests.rs +++ b/openssl/src/ssl/tests.rs @@ -31,6 +31,7 @@ use std::net::UdpSocket; const PROTOCOL:SslMethod = Sslv23; +#[cfg(test)] mod udp { static mut udp_port:u16 = 15410; @@ -57,10 +58,8 @@ macro_rules! run_test( use std::path::Path; use std::net::UdpSocket; use std::net::TcpStream; - use ssl::SslMethod::Sslv23; use ssl; - #[cfg(feature="dtlsv1")] - use ssl::SslMethod::Dtlsv1; + use ssl::SslMethod; use ssl::{SslContext, SslStream, VerifyCallback}; use ssl::connected_socket::Connect; use ssl::SslVerifyMode::SSL_VERIFY_PEER; @@ -72,7 +71,7 @@ macro_rules! run_test( #[test] fn sslv23() { let stream = TcpStream::connect("127.0.0.1:15418").unwrap(); - $blk(Sslv23, stream); + $blk(SslMethod::Sslv23, stream); } #[test] @@ -81,7 +80,7 @@ macro_rules! run_test( let sock = UdpSocket::bind("127.0.0.1:0").unwrap(); let stream = sock.connect(udp::next_server().as_slice()).unwrap(); - $blk(Dtlsv1, stream); + $blk(SslMethod::Dtlsv1, stream); } } );