Loading .gitignore +1 −4 Original line number Diff line number Diff line /.rust/ /bin/ /build/ /lib/ /lib .travis.yml +1 −1 Original line number Diff line number Diff line Loading @@ -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 error.rs +22 −2 Original line number Diff line number Diff line Loading @@ -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) }) } } } lib.rs +2 −0 Original line number Diff line number Diff line #[feature(struct_variant)]; use std::cast; use std::libc::{c_int, c_void}; use std::ptr; Loading tests.rs +12 −3 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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) Loading @@ -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 Loading
.travis.yml +1 −1 Original line number Diff line number Diff line Loading @@ -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
error.rs +22 −2 Original line number Diff line number Diff line Loading @@ -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) }) } } }
lib.rs +2 −0 Original line number Diff line number Diff line #[feature(struct_variant)]; use std::cast; use std::libc::{c_int, c_void}; use std::ptr; Loading
tests.rs +12 −3 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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) Loading @@ -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