diff --git a/openssl/src/asn1/mod.rs b/openssl/src/asn1/mod.rs index 39273cb8..e79a0fd2 100644 --- a/openssl/src/asn1/mod.rs +++ b/openssl/src/asn1/mod.rs @@ -4,44 +4,36 @@ use std::ptr; use ffi; use error::ErrorStack; -pub struct Asn1Time { - handle: *mut ffi::ASN1_TIME, - owned: bool, -} +pub struct Asn1Time(*mut ffi::ASN1_TIME); impl Asn1Time { /// Wraps existing ASN1_TIME and takes ownership - pub fn new(handle: *mut ffi::ASN1_TIME) -> Asn1Time { - Asn1Time { - handle: handle, - owned: true, - } + pub unsafe fn from_raw(handle: *mut ffi::ASN1_TIME) -> Asn1Time { + Asn1Time(handle) } - fn new_with_period(period: u64) -> Result { + fn from_period(period: u64) -> Result { ffi::init(); - let handle = unsafe { - try_ssl_null!(ffi::X509_gmtime_adj(ptr::null_mut(), period as c_long)) - }; - Ok(Asn1Time::new(handle)) + unsafe { + let handle = try_ssl_null!(ffi::X509_gmtime_adj(ptr::null_mut(), period as c_long)); + Ok(Asn1Time::from_raw(handle)) + } } /// Creates a new time on specified interval in days from now pub fn days_from_now(days: u32) -> Result { - Asn1Time::new_with_period(days as u64 * 60 * 60 * 24) + Asn1Time::from_period(days as u64 * 60 * 60 * 24) } - /// Returns raw handle - pub unsafe fn handle(&self) -> *mut ffi::ASN1_TIME { - return self.handle; + /// Returns the raw handle + pub fn handle(&self) -> *mut ffi::ASN1_TIME { + self.0 } } impl Drop for Asn1Time { fn drop(&mut self) { - if self.owned { - unsafe { ffi::ASN1_TIME_free(self.handle) }; - } + unsafe { ffi::ASN1_TIME_free(self.0) }; } } diff --git a/openssl/src/ssl/mod.rs b/openssl/src/ssl/mod.rs index 7ef8a7a5..aa8d9657 100644 --- a/openssl/src/ssl/mod.rs +++ b/openssl/src/ssl/mod.rs @@ -108,42 +108,46 @@ pub enum SslMethod { } impl SslMethod { - unsafe fn to_raw(&self) -> *const ffi::SSL_METHOD { - match *self { - #[cfg(feature = "sslv2")] - SslMethod::Sslv2 => ffi::SSLv2_method(), - #[cfg(feature = "sslv3")] - SslMethod::Sslv3 => ffi::SSLv3_method(), - SslMethod::Tlsv1 => ffi::TLSv1_method(), - SslMethod::Sslv23 => ffi::SSLv23_method(), - #[cfg(feature = "tlsv1_1")] - SslMethod::Tlsv1_1 => ffi::TLSv1_1_method(), - #[cfg(feature = "tlsv1_2")] - SslMethod::Tlsv1_2 => ffi::TLSv1_2_method(), - #[cfg(feature = "dtlsv1")] - SslMethod::Dtlsv1 => ffi::DTLSv1_method(), - #[cfg(feature = "dtlsv1_2")] - SslMethod::Dtlsv1_2 => ffi::DTLSv1_2_method(), + fn to_raw(&self) -> *const ffi::SSL_METHOD { + unsafe { + match *self { + #[cfg(feature = "sslv2")] + SslMethod::Sslv2 => ffi::SSLv2_method(), + #[cfg(feature = "sslv3")] + SslMethod::Sslv3 => ffi::SSLv3_method(), + SslMethod::Tlsv1 => ffi::TLSv1_method(), + SslMethod::Sslv23 => ffi::SSLv23_method(), + #[cfg(feature = "tlsv1_1")] + SslMethod::Tlsv1_1 => ffi::TLSv1_1_method(), + #[cfg(feature = "tlsv1_2")] + SslMethod::Tlsv1_2 => ffi::TLSv1_2_method(), + #[cfg(feature = "dtlsv1")] + SslMethod::Dtlsv1 => ffi::DTLSv1_method(), + #[cfg(feature = "dtlsv1_2")] + SslMethod::Dtlsv1_2 => ffi::DTLSv1_2_method(), + } } } - unsafe fn from_raw(method: *const ffi::SSL_METHOD) -> Option { - match method { - #[cfg(feature = "sslv2")] - x if x == ffi::SSLv2_method() => Some(SslMethod::Sslv2), - #[cfg(feature = "sslv3")] - x if x == ffi::SSLv3_method() => Some(SslMethod::Sslv3), - x if x == ffi::TLSv1_method() => Some(SslMethod::Tlsv1), - x if x == ffi::SSLv23_method() => Some(SslMethod::Sslv23), - #[cfg(feature = "tlsv1_1")] - x if x == ffi::TLSv1_1_method() => Some(SslMethod::Tlsv1_1), - #[cfg(feature = "tlsv1_2")] - x if x == ffi::TLSv1_2_method() => Some(SslMethod::Tlsv1_2), - #[cfg(feature = "dtlsv1")] - x if x == ffi::DTLSv1_method() => Some(SslMethod::Dtlsv1), - #[cfg(feature = "dtlsv1_2")] - x if x == ffi::DTLSv1_2_method() => Some(SslMethod::Dtlsv1_2), - _ => None, + fn from_raw(method: *const ffi::SSL_METHOD) -> Option { + unsafe { + match method { + #[cfg(feature = "sslv2")] + x if x == ffi::SSLv2_method() => Some(SslMethod::Sslv2), + #[cfg(feature = "sslv3")] + x if x == ffi::SSLv3_method() => Some(SslMethod::Sslv3), + x if x == ffi::TLSv1_method() => Some(SslMethod::Tlsv1), + x if x == ffi::SSLv23_method() => Some(SslMethod::Sslv23), + #[cfg(feature = "tlsv1_1")] + x if x == ffi::TLSv1_1_method() => Some(SslMethod::Tlsv1_1), + #[cfg(feature = "tlsv1_2")] + x if x == ffi::TLSv1_2_method() => Some(SslMethod::Tlsv1_2), + #[cfg(feature = "dtlsv1")] + x if x == ffi::DTLSv1_method() => Some(SslMethod::Dtlsv1), + #[cfg(feature = "dtlsv1_2")] + x if x == ffi::DTLSv1_2_method() => Some(SslMethod::Dtlsv1_2), + _ => None, + } } } }