Slightly better error handling
This commit is contained in:
parent
83d702df2b
commit
eea07ef137
|
|
@ -1,4 +1 @@
|
|||
/.rust/
|
||||
/bin/
|
||||
/build/
|
||||
/lib/
|
||||
/lib
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ before_install:
|
|||
install:
|
||||
- sudo apt-get install rust-nightly
|
||||
before_script:
|
||||
- openssl s_server -accept 15418 -www -cert test/cert.pem -key test/key.pem &
|
||||
- openssl s_server -accept 15418 -www -cert test/cert.pem -key test/key.pem >/dev/null &
|
||||
script:
|
||||
- rustc --test lib.rs
|
||||
- ./lib
|
||||
|
|
|
|||
24
error.rs
24
error.rs
|
|
@ -6,14 +6,34 @@ use super::ffi;
|
|||
pub enum SslError {
|
||||
StreamEof,
|
||||
SslSessionClosed,
|
||||
UnknownError(c_ulong)
|
||||
UnknownError {
|
||||
library: u8,
|
||||
function: u16,
|
||||
reason: u16
|
||||
}
|
||||
}
|
||||
|
||||
fn get_lib(err: c_ulong) -> u8 {
|
||||
((err >> 24) & 0xff) as u8
|
||||
}
|
||||
|
||||
fn get_func(err: c_ulong) -> u16 {
|
||||
((err >> 12) & 0xfff) as u16
|
||||
}
|
||||
|
||||
fn get_reason(err: c_ulong) -> u16 {
|
||||
(err & 0xfff) as u16
|
||||
}
|
||||
|
||||
impl SslError {
|
||||
pub fn get() -> Option<SslError> {
|
||||
match unsafe { ffi::ERR_get_error() } {
|
||||
0 => None,
|
||||
err => Some(UnknownError(err))
|
||||
err => Some(UnknownError {
|
||||
library: get_lib(err),
|
||||
function: get_func(err),
|
||||
reason: get_reason(err)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
lib.rs
2
lib.rs
|
|
@ -1,3 +1,5 @@
|
|||
#[feature(struct_variant)];
|
||||
|
||||
use std::cast;
|
||||
use std::libc::{c_int, c_void};
|
||||
use std::ptr;
|
||||
|
|
|
|||
15
tests.rs
15
tests.rs
|
|
@ -32,7 +32,10 @@ fn test_verify_trusted() {
|
|||
let stream = TcpStream::connect(FromStr::from_str("127.0.0.1:15418").unwrap()).unwrap();
|
||||
let mut ctx = SslContext::new(Sslv23);
|
||||
ctx.set_verify(SslVerifyPeer, None);
|
||||
assert!(ctx.set_CA_file("test/cert.pem").is_none());
|
||||
match ctx.set_CA_file("test/cert.pem") {
|
||||
None => {}
|
||||
Some(err) => fail!("Unexpected error {:?}", err)
|
||||
}
|
||||
match SslStream::try_new(&ctx, stream) {
|
||||
Ok(_) => (),
|
||||
Err(err) => fail!("Expected success, got {:?}", err)
|
||||
|
|
@ -72,7 +75,10 @@ fn test_verify_trusted_callback_override_ok() {
|
|||
let stream = TcpStream::connect(FromStr::from_str("127.0.0.1:15418").unwrap()).unwrap();
|
||||
let mut ctx = SslContext::new(Sslv23);
|
||||
ctx.set_verify(SslVerifyPeer, Some(callback));
|
||||
assert!(ctx.set_CA_file("test/cert.pem").is_none());
|
||||
match ctx.set_CA_file("test/cert.pem") {
|
||||
None => {}
|
||||
Some(err) => fail!("Unexpected error {:?}", err)
|
||||
}
|
||||
match SslStream::try_new(&ctx, stream) {
|
||||
Ok(_) => (),
|
||||
Err(err) => fail!("Expected success, got {:?}", err)
|
||||
|
|
@ -87,7 +93,10 @@ fn test_verify_trusted_callback_override_bad() {
|
|||
let stream = TcpStream::connect(FromStr::from_str("127.0.0.1:15418").unwrap()).unwrap();
|
||||
let mut ctx = SslContext::new(Sslv23);
|
||||
ctx.set_verify(SslVerifyPeer, Some(callback));
|
||||
assert!(ctx.set_CA_file("test/cert.pem").is_none());
|
||||
match ctx.set_CA_file("test/cert.pem") {
|
||||
None => {}
|
||||
Some(err) => fail!("Unexpected error {:?}", err)
|
||||
}
|
||||
assert!(SslStream::try_new(&ctx, stream).is_err());
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue