Loading openssl-sys/src/lib.rs +2 −0 Original line number Diff line number Diff line Loading @@ -529,6 +529,8 @@ extern "C" { pub fn SSL_get_current_compression(ssl: *mut SSL) -> *const COMP_METHOD; pub fn SSL_get_peer_certificate(ssl: *mut SSL) -> *mut X509; pub fn SSL_get_ssl_method(ssl: *mut SSL) -> *const SSL_METHOD; pub fn SSL_state_string(ssl: *mut SSL) -> *const c_char; pub fn SSL_state_string_long(ssl: *mut SSL) -> *const c_char; pub fn SSL_COMP_get_name(comp: *const COMP_METHOD) -> *const c_char; Loading openssl/src/ssl/mod.rs +27 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ use std::fmt; use std::io; use std::io::prelude::*; use std::mem; use std::str; use std::net; use std::path::Path; use std::ptr; Loading Loading @@ -690,6 +691,24 @@ impl Ssl { Ok(ssl) } pub fn get_state_string(&self) -> &'static str { let state = unsafe { let ptr = ffi::SSL_state_string(self.ssl); CStr::from_ptr(ptr) }; str::from_utf8(state.to_bytes()).unwrap() } pub fn get_state_string_long(&self) -> &'static str { let state = unsafe { let ptr = ffi::SSL_state_string_long(self.ssl); CStr::from_ptr(ptr) }; str::from_utf8(state.to_bytes()).unwrap() } fn get_rbio<'a>(&'a self) -> MemBioRef<'a> { unsafe { self.wrap_bio(ffi::SSL_get_rbio(self.ssl)) } } Loading Loading @@ -1316,6 +1335,14 @@ impl<S: Read+Write> SslStream<S> { pub fn pending(&self) -> usize { self.kind.ssl().pending() } pub fn get_state_string(&self) -> &'static str { self.kind.ssl().get_state_string() } pub fn get_state_string_long(&self) -> &'static str { self.kind.ssl().get_state_string_long() } } impl<S: Read+Write> Read for SslStream<S> { Loading openssl/src/ssl/tests.rs +8 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,14 @@ fn test_pending() { assert_eq!(pending, len); } #[test] fn test_state() { let tcp = TcpStream::connect("127.0.0.1:15418").unwrap(); let stream = SslStream::connect_generic(&SslContext::new(Sslv23).unwrap(), tcp).unwrap(); assert_eq!(stream.get_state_string(), "SSLOK "); assert_eq!(stream.get_state_string_long(), "SSL negotiation finished successfully"); } /// Tests that connecting with the client using NPN, but the server not does not /// break the existing connection behavior. #[test] Loading Loading
openssl-sys/src/lib.rs +2 −0 Original line number Diff line number Diff line Loading @@ -529,6 +529,8 @@ extern "C" { pub fn SSL_get_current_compression(ssl: *mut SSL) -> *const COMP_METHOD; pub fn SSL_get_peer_certificate(ssl: *mut SSL) -> *mut X509; pub fn SSL_get_ssl_method(ssl: *mut SSL) -> *const SSL_METHOD; pub fn SSL_state_string(ssl: *mut SSL) -> *const c_char; pub fn SSL_state_string_long(ssl: *mut SSL) -> *const c_char; pub fn SSL_COMP_get_name(comp: *const COMP_METHOD) -> *const c_char; Loading
openssl/src/ssl/mod.rs +27 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ use std::fmt; use std::io; use std::io::prelude::*; use std::mem; use std::str; use std::net; use std::path::Path; use std::ptr; Loading Loading @@ -690,6 +691,24 @@ impl Ssl { Ok(ssl) } pub fn get_state_string(&self) -> &'static str { let state = unsafe { let ptr = ffi::SSL_state_string(self.ssl); CStr::from_ptr(ptr) }; str::from_utf8(state.to_bytes()).unwrap() } pub fn get_state_string_long(&self) -> &'static str { let state = unsafe { let ptr = ffi::SSL_state_string_long(self.ssl); CStr::from_ptr(ptr) }; str::from_utf8(state.to_bytes()).unwrap() } fn get_rbio<'a>(&'a self) -> MemBioRef<'a> { unsafe { self.wrap_bio(ffi::SSL_get_rbio(self.ssl)) } } Loading Loading @@ -1316,6 +1335,14 @@ impl<S: Read+Write> SslStream<S> { pub fn pending(&self) -> usize { self.kind.ssl().pending() } pub fn get_state_string(&self) -> &'static str { self.kind.ssl().get_state_string() } pub fn get_state_string_long(&self) -> &'static str { self.kind.ssl().get_state_string_long() } } impl<S: Read+Write> Read for SslStream<S> { Loading
openssl/src/ssl/tests.rs +8 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,14 @@ fn test_pending() { assert_eq!(pending, len); } #[test] fn test_state() { let tcp = TcpStream::connect("127.0.0.1:15418").unwrap(); let stream = SslStream::connect_generic(&SslContext::new(Sslv23).unwrap(), tcp).unwrap(); assert_eq!(stream.get_state_string(), "SSLOK "); assert_eq!(stream.get_state_string_long(), "SSL negotiation finished successfully"); } /// Tests that connecting with the client using NPN, but the server not does not /// break the existing connection behavior. #[test] Loading