Clean up SslError conversion

This commit is contained in:
Steven Fackler 2013-10-13 21:56:57 -07:00
parent 8e2d5242a3
commit 0fac64705e
2 changed files with 16 additions and 23 deletions

View File

@ -34,7 +34,7 @@ externfn!(fn SSLv23_method() -> *SSL_METHOD)
externfn!(fn SSL_CTX_new(method: *SSL_METHOD) -> *SSL_CTX) externfn!(fn SSL_CTX_new(method: *SSL_METHOD) -> *SSL_CTX)
externfn!(fn SSL_CTX_free(ctx: *SSL_CTX)) externfn!(fn SSL_CTX_free(ctx: *SSL_CTX))
externfn!(fn SSL_CTX_set_verify(ctx: *SSL_CTX, mode: c_int, externfn!(fn SSL_CTX_set_verify(ctx: *SSL_CTX, mode: c_int,
verify_callback: Option<extern "C" fn(int, *X509_STORE_CTX)>)) verify_callback: Option<extern "C" fn(int, *X509_STORE_CTX) -> c_int>))
externfn!(fn SSL_new(ctx: *SSL_CTX) -> *SSL) externfn!(fn SSL_new(ctx: *SSL_CTX) -> *SSL)
externfn!(fn SSL_free(ssl: *SSL)) externfn!(fn SSL_free(ssl: *SSL))

View File

@ -70,17 +70,17 @@ pub enum SslVerifyMode {
SslVerifyPeer = ffi::SSL_VERIFY_PEER SslVerifyPeer = ffi::SSL_VERIFY_PEER
} }
#[deriving(Eq, TotalEq, ToStr)] #[deriving(Eq, FromPrimitive)]
enum SslError { enum SslError {
ErrorNone, ErrorNone = ffi::SSL_ERROR_NONE,
ErrorSsl, ErrorSsl = ffi::SSL_ERROR_SSL,
ErrorWantRead, ErrorWantRead = ffi::SSL_ERROR_WANT_READ,
ErrorWantWrite, ErrorWantWrite = ffi::SSL_ERROR_WANT_WRITE,
ErrorWantX509Lookup, ErrorWantX509Lookup = ffi::SSL_ERROR_WANT_X509_LOOKUP,
ErrorSyscall, ErrorSyscall = ffi::SSL_ERROR_SYSCALL,
ErrorZeroReturn, ErrorZeroReturn = ffi::SSL_ERROR_ZERO_RETURN,
ErrorWantConnect, ErrorWantConnect = ffi::SSL_ERROR_WANT_CONNECT,
ErrorWantAccept, ErrorWantAccept = ffi::SSL_ERROR_WANT_ACCEPT,
} }
struct Ssl { struct Ssl {
@ -114,17 +114,10 @@ impl Ssl {
} }
fn get_error(&self, ret: int) -> SslError { fn get_error(&self, ret: int) -> SslError {
match unsafe { ffi::SSL_get_error(self.ssl, ret as c_int) } { let err = unsafe { ffi::SSL_get_error(self.ssl, ret as c_int) };
ffi::SSL_ERROR_NONE => ErrorNone, match FromPrimitive::from_int(err as int) {
ffi::SSL_ERROR_SSL => ErrorSsl, Some(err) => err,
ffi::SSL_ERROR_WANT_READ => ErrorWantRead, None => fail2!("Unknown error {}", err)
ffi::SSL_ERROR_WANT_WRITE => ErrorWantWrite,
ffi::SSL_ERROR_WANT_X509_LOOKUP => ErrorWantX509Lookup,
ffi::SSL_ERROR_SYSCALL => ErrorSyscall,
ffi::SSL_ERROR_ZERO_RETURN => ErrorZeroReturn,
ffi::SSL_ERROR_WANT_CONNECT => ErrorWantConnect,
ffi::SSL_ERROR_WANT_ACCEPT => ErrorWantAccept,
err => fail2!("Unknown error {}", err)
} }
} }
@ -294,7 +287,7 @@ impl<S: Stream> Writer for SslStream<S> {
match ret { match ret {
Ok(_) => (), Ok(_) => (),
Err(err) => fail2!("Write error: {}", err.to_str()) Err(err) => fail2!("Write error: {:?}", err)
} }
self.write_through(); self.write_through();