commit
4cb68efd99
|
|
@ -530,6 +530,8 @@ extern "C" {
|
||||||
pub fn SSL_get_current_compression(ssl: *mut SSL) -> *const COMP_METHOD;
|
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_peer_certificate(ssl: *mut SSL) -> *mut X509;
|
||||||
pub fn SSL_get_ssl_method(ssl: *mut SSL) -> *const SSL_METHOD;
|
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;
|
pub fn SSL_COMP_get_name(comp: *const COMP_METHOD) -> *const c_char;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ use std::fmt;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
use std::str;
|
||||||
use std::net;
|
use std::net;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
@ -690,6 +691,24 @@ impl Ssl {
|
||||||
Ok(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> {
|
fn get_rbio<'a>(&'a self) -> MemBioRef<'a> {
|
||||||
unsafe { self.wrap_bio(ffi::SSL_get_rbio(self.ssl)) }
|
unsafe { self.wrap_bio(ffi::SSL_get_rbio(self.ssl)) }
|
||||||
}
|
}
|
||||||
|
|
@ -1316,6 +1335,14 @@ impl<S: Read+Write> SslStream<S> {
|
||||||
pub fn pending(&self) -> usize {
|
pub fn pending(&self) -> usize {
|
||||||
self.kind.ssl().pending()
|
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> {
|
impl<S: Read+Write> Read for SslStream<S> {
|
||||||
|
|
|
||||||
|
|
@ -395,6 +395,14 @@ fn test_pending() {
|
||||||
assert_eq!(pending, len);
|
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
|
/// Tests that connecting with the client using NPN, but the server not does not
|
||||||
/// break the existing connection behavior.
|
/// break the existing connection behavior.
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue