use libc::{c_long}; use std::ptr; use ffi; use ssl::error::{SslError}; pub struct Asn1Time { handle: *mut ffi::ASN1_TIME, owned: bool } impl Asn1Time { /// Wraps existing ASN1_TIME and takes ownership pub fn new(handle: *mut ffi::ASN1_TIME) -> Asn1Time { Asn1Time { handle: handle, owned: true } } fn new_with_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)) } /// 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) } /// Returns raw handle pub unsafe fn get_handle(&self) -> *mut ffi::ASN1_TIME { return self.handle } } impl Drop for Asn1Time { fn drop(&mut self) { if self.owned { unsafe { ffi::ASN1_TIME_free(self.handle) }; } } }