aboutsummaryrefslogtreecommitdiff
path: root/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'error.rs')
-rw-r--r--error.rs24
1 files changed, 22 insertions, 2 deletions
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<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)
+ })
}
}
}