From eea07ef137992c80ab80e17f28d71abf04ef9079 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Wed, 23 Oct 2013 21:10:38 -0700 Subject: Slightly better error handling --- error.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'error.rs') diff --git a/error.rs b/error.rs index 90429996..5e5479f8 100644 --- a/error.rs +++ b/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 { 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) + }) } } } -- cgit v1.2.3