diff options
| author | Manuel Schölling <[email protected]> | 2015-03-12 19:24:16 +0100 |
|---|---|---|
| committer | Manuel Schölling <[email protected]> | 2015-04-06 12:22:50 +0200 |
| commit | efbd4eee05d7f21ce2ffd1b1beaae1cde1de36ba (patch) | |
| tree | 41ac0fc7290d65a552c3cfc3b84b4fa86219479f /openssl/src/ssl/connected_socket.rs | |
| parent | Fix travis test setup for DTLS (diff) | |
| download | rust-openssl-efbd4eee05d7f21ce2ffd1b1beaae1cde1de36ba.tar.xz rust-openssl-efbd4eee05d7f21ce2ffd1b1beaae1cde1de36ba.zip | |
Fix portability issue and typo
Diffstat (limited to 'openssl/src/ssl/connected_socket.rs')
| -rw-r--r-- | openssl/src/ssl/connected_socket.rs | 80 |
1 files changed, 63 insertions, 17 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, |