Loading openssl-sys/Cargo.toml +1 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ build = "build.rs" tlsv1_2 = [] tlsv1_1 = [] dtlsv1 = [] dtlsv1_2 = [] sslv2 = [] aes_xts = [] npn = [] Loading openssl-sys/src/lib.rs +4 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ pub const SSL_CTRL_CLEAR_OPTIONS: c_int = 77; pub const SSL_CTRL_SET_TLSEXT_HOSTNAME: c_int = 55; pub const SSL_CTRL_EXTRA_CHAIN_CERT: c_int = 14; pub const SSL_CTRL_SET_READ_AHEAD: c_int = 41; pub const SSL_ERROR_NONE: c_int = 0; pub const SSL_ERROR_SSL: c_int = 1; pub const SSL_ERROR_SYSCALL: c_int = 5; Loading Loading @@ -484,6 +485,8 @@ extern "C" { pub fn TLSv1_2_method() -> *const SSL_METHOD; #[cfg(feature = "dtlsv1")] pub fn DTLSv1_method() -> *const SSL_METHOD; #[cfg(feature = "dtlsv1_2")] pub fn DTLSv1_2_method() -> *const SSL_METHOD; pub fn SSLv23_method() -> *const SSL_METHOD; pub fn SSL_new(ctx: *mut SSL_CTX) -> *mut SSL; Loading @@ -507,6 +510,7 @@ extern "C" { pub fn SSL_CTX_new(method: *const SSL_METHOD) -> *mut SSL_CTX; pub fn SSL_CTX_free(ctx: *mut SSL_CTX); pub fn SSL_CTX_ctrl(ctx: *mut SSL_CTX, cmd: c_int, mode: c_long, parg: *mut c_void) -> c_long; pub fn SSL_CTX_set_verify(ctx: *mut SSL_CTX, mode: c_int, verify_callback: Option<extern fn(c_int, *mut X509_STORE_CTX) -> c_int>); pub fn SSL_CTX_set_verify_depth(ctx: *mut SSL_CTX, depth: c_int); Loading openssl/Cargo.toml +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ keywords = ["crypto", "tls", "ssl", "dtls"] tlsv1_2 = ["openssl-sys/tlsv1_2"] tlsv1_1 = ["openssl-sys/tlsv1_1"] dtlsv1 = ["openssl-sys/dtlsv1"] dtlsv1_2 = ["openssl-sys/dtlsv1_2"] sslv2 = ["openssl-sys/sslv2"] aes_xts = ["openssl-sys/aes_xts"] npn = ["openssl-sys/npn"] Loading openssl/src/lib.rs +2 −0 Original line number Diff line number Diff line Loading @@ -18,3 +18,5 @@ pub mod bio; pub mod crypto; pub mod ssl; pub mod x509; #[macro_use] extern crate log; openssl/src/ssl/connected_socket.rs +7 −12 Original line number Diff line number Diff line Loading @@ -81,7 +81,6 @@ impl IntoSockaddrIn for SocketAddr { if res == 1 { Ok(SockaddrIn::V4(addr)) } else { warn!("inet_pton() failed for IPv4: {}", ip); Err(Error::new(ErrorKind::Other, "calling inet_pton() for ipv4", None)) } Loading Loading @@ -158,12 +157,10 @@ impl<S: AsRawFd+?Sized> Read for ConnectedSocket<S> { let flags = 0; let ptr = buf.as_mut_ptr() as *mut c_void; debug!("recv'ing..."); let len = unsafe { recv(self.as_raw_fd(), ptr, buf.len() as u64, flags) }; debug!("recv'ed len={:?}", len); match len { -1 => { match errno() { Loading @@ -184,14 +181,12 @@ impl<S: AsRawFd+?Sized> Write for ConnectedSocket<S> { let flags = 0; let ptr = buf.as_ptr() as *const c_void; debug!("sending {:?}", buf.len()); let res = unsafe { send(self.as_raw_fd(), ptr, buf.len() as u64, flags) }; if res == (buf.len() as i64) { Ok(res as usize) } else { warn!("send() found {}, expected {}", res, buf.len()); Err(Error::new(ErrorKind::Other, "send() failed", Some(os::error_string(os::errno() as i32)))) } } Loading Loading @@ -223,8 +218,8 @@ impl<S:AsRawFd> SetTimeout for S { fn connect4_works() { let socket1 = UdpSocket::bind("127.0.0.1:34200").unwrap(); let socket2 = UdpSocket::bind("127.0.0.1:34201").unwrap(); let conn1 = socket1.connect("127.0.0.1:34200").unwrap(); let conn2 = socket2.connect("127.0.0.1:34201").unwrap(); socket1.connect("127.0.0.1:34200").unwrap(); socket2.connect("127.0.0.1:34201").unwrap(); } #[test] Loading Loading @@ -273,26 +268,26 @@ fn sendrecv_respects_packet_borders() { fn connect6_works() { let socket1 = UdpSocket::bind("::1:34200").unwrap(); let socket2 = UdpSocket::bind("::1:34201").unwrap(); let conn1 = socket1.connect("::1:34200").unwrap(); let conn2 = socket2.connect("::1:34201").unwrap(); socket1.connect("::1:34200").unwrap(); socket2.connect("::1:34201").unwrap(); } #[test] #[should_fail] #[should_panic] fn detect_invalid_ipv4() { let s = UdpSocket::bind("127.0.0.1:34300").unwrap(); s.connect("254.254.254.254:34200").unwrap(); } #[test] #[should_fail] #[should_panic] fn detect_invalid_ipv6() { let s = UdpSocket::bind("::1:34300").unwrap(); s.connect("1200::AB00:1234::2552:7777:1313:34300").unwrap(); } #[test] #[should_fail] #[should_panic] fn double_bind() { let socket1 = UdpSocket::bind("127.0.0.1:34301").unwrap(); let socket2 = UdpSocket::bind("127.0.0.1:34301").unwrap(); Loading Loading
openssl-sys/Cargo.toml +1 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ build = "build.rs" tlsv1_2 = [] tlsv1_1 = [] dtlsv1 = [] dtlsv1_2 = [] sslv2 = [] aes_xts = [] npn = [] Loading
openssl-sys/src/lib.rs +4 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ pub const SSL_CTRL_CLEAR_OPTIONS: c_int = 77; pub const SSL_CTRL_SET_TLSEXT_HOSTNAME: c_int = 55; pub const SSL_CTRL_EXTRA_CHAIN_CERT: c_int = 14; pub const SSL_CTRL_SET_READ_AHEAD: c_int = 41; pub const SSL_ERROR_NONE: c_int = 0; pub const SSL_ERROR_SSL: c_int = 1; pub const SSL_ERROR_SYSCALL: c_int = 5; Loading Loading @@ -484,6 +485,8 @@ extern "C" { pub fn TLSv1_2_method() -> *const SSL_METHOD; #[cfg(feature = "dtlsv1")] pub fn DTLSv1_method() -> *const SSL_METHOD; #[cfg(feature = "dtlsv1_2")] pub fn DTLSv1_2_method() -> *const SSL_METHOD; pub fn SSLv23_method() -> *const SSL_METHOD; pub fn SSL_new(ctx: *mut SSL_CTX) -> *mut SSL; Loading @@ -507,6 +510,7 @@ extern "C" { pub fn SSL_CTX_new(method: *const SSL_METHOD) -> *mut SSL_CTX; pub fn SSL_CTX_free(ctx: *mut SSL_CTX); pub fn SSL_CTX_ctrl(ctx: *mut SSL_CTX, cmd: c_int, mode: c_long, parg: *mut c_void) -> c_long; pub fn SSL_CTX_set_verify(ctx: *mut SSL_CTX, mode: c_int, verify_callback: Option<extern fn(c_int, *mut X509_STORE_CTX) -> c_int>); pub fn SSL_CTX_set_verify_depth(ctx: *mut SSL_CTX, depth: c_int); Loading
openssl/Cargo.toml +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ keywords = ["crypto", "tls", "ssl", "dtls"] tlsv1_2 = ["openssl-sys/tlsv1_2"] tlsv1_1 = ["openssl-sys/tlsv1_1"] dtlsv1 = ["openssl-sys/dtlsv1"] dtlsv1_2 = ["openssl-sys/dtlsv1_2"] sslv2 = ["openssl-sys/sslv2"] aes_xts = ["openssl-sys/aes_xts"] npn = ["openssl-sys/npn"] Loading
openssl/src/lib.rs +2 −0 Original line number Diff line number Diff line Loading @@ -18,3 +18,5 @@ pub mod bio; pub mod crypto; pub mod ssl; pub mod x509; #[macro_use] extern crate log;
openssl/src/ssl/connected_socket.rs +7 −12 Original line number Diff line number Diff line Loading @@ -81,7 +81,6 @@ impl IntoSockaddrIn for SocketAddr { if res == 1 { Ok(SockaddrIn::V4(addr)) } else { warn!("inet_pton() failed for IPv4: {}", ip); Err(Error::new(ErrorKind::Other, "calling inet_pton() for ipv4", None)) } Loading Loading @@ -158,12 +157,10 @@ impl<S: AsRawFd+?Sized> Read for ConnectedSocket<S> { let flags = 0; let ptr = buf.as_mut_ptr() as *mut c_void; debug!("recv'ing..."); let len = unsafe { recv(self.as_raw_fd(), ptr, buf.len() as u64, flags) }; debug!("recv'ed len={:?}", len); match len { -1 => { match errno() { Loading @@ -184,14 +181,12 @@ impl<S: AsRawFd+?Sized> Write for ConnectedSocket<S> { let flags = 0; let ptr = buf.as_ptr() as *const c_void; debug!("sending {:?}", buf.len()); let res = unsafe { send(self.as_raw_fd(), ptr, buf.len() as u64, flags) }; if res == (buf.len() as i64) { Ok(res as usize) } else { warn!("send() found {}, expected {}", res, buf.len()); Err(Error::new(ErrorKind::Other, "send() failed", Some(os::error_string(os::errno() as i32)))) } } Loading Loading @@ -223,8 +218,8 @@ impl<S:AsRawFd> SetTimeout for S { fn connect4_works() { let socket1 = UdpSocket::bind("127.0.0.1:34200").unwrap(); let socket2 = UdpSocket::bind("127.0.0.1:34201").unwrap(); let conn1 = socket1.connect("127.0.0.1:34200").unwrap(); let conn2 = socket2.connect("127.0.0.1:34201").unwrap(); socket1.connect("127.0.0.1:34200").unwrap(); socket2.connect("127.0.0.1:34201").unwrap(); } #[test] Loading Loading @@ -273,26 +268,26 @@ fn sendrecv_respects_packet_borders() { fn connect6_works() { let socket1 = UdpSocket::bind("::1:34200").unwrap(); let socket2 = UdpSocket::bind("::1:34201").unwrap(); let conn1 = socket1.connect("::1:34200").unwrap(); let conn2 = socket2.connect("::1:34201").unwrap(); socket1.connect("::1:34200").unwrap(); socket2.connect("::1:34201").unwrap(); } #[test] #[should_fail] #[should_panic] fn detect_invalid_ipv4() { let s = UdpSocket::bind("127.0.0.1:34300").unwrap(); s.connect("254.254.254.254:34200").unwrap(); } #[test] #[should_fail] #[should_panic] fn detect_invalid_ipv6() { let s = UdpSocket::bind("::1:34300").unwrap(); s.connect("1200::AB00:1234::2552:7777:1313:34300").unwrap(); } #[test] #[should_fail] #[should_panic] fn double_bind() { let socket1 = UdpSocket::bind("127.0.0.1:34301").unwrap(); let socket2 = UdpSocket::bind("127.0.0.1:34301").unwrap(); Loading