aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
Diffstat (limited to 'openssl/src')
-rw-r--r--openssl/src/ssl/connected_socket.rs80
-rw-r--r--openssl/src/ssl/mod.rs2
-rw-r--r--openssl/src/ssl/tests.rs9
3 files changed, 68 insertions, 23 deletions
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<SockaddrIn, Error>;
}
@@ -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);
}
}
);