Commit 5af01a5d authored by Steven Fackler's avatar Steven Fackler
Browse files

Clean up asn1time

parent bc97d088
Loading
Loading
Loading
Loading
+13 −21
Original line number Diff line number Diff line
@@ -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<Asn1Time, ErrorStack> {
    fn from_period(period: u64) -> Result<Asn1Time, ErrorStack> {
        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, ErrorStack> {
        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) };
    }
}
+37 −33
Original line number Diff line number Diff line
@@ -108,7 +108,8 @@ pub enum SslMethod {
}

impl SslMethod {
    unsafe fn to_raw(&self) -> *const ffi::SSL_METHOD {
    fn to_raw(&self) -> *const ffi::SSL_METHOD {
        unsafe {
            match *self {
                #[cfg(feature = "sslv2")]
                SslMethod::Sslv2 => ffi::SSLv2_method(),
@@ -126,8 +127,10 @@ impl SslMethod {
                SslMethod::Dtlsv1_2 => ffi::DTLSv1_2_method(),
            }
        }
    }

    unsafe fn from_raw(method: *const ffi::SSL_METHOD) -> Option<SslMethod> {
    fn from_raw(method: *const ffi::SSL_METHOD) -> Option<SslMethod> {
        unsafe {
            match method {
                #[cfg(feature = "sslv2")]
                x if x == ffi::SSLv2_method() => Some(SslMethod::Sslv2),
@@ -147,6 +150,7 @@ impl SslMethod {
            }
        }
    }
}

/// Determines the type of certificate verification used
bitflags! {