Drop Any bounds

This commit is contained in:
Steven Fackler 2017-12-26 08:55:12 -07:00
parent fdb8909c32
commit ce0641f093
3 changed files with 20 additions and 25 deletions

View File

@ -1,6 +1,5 @@
use ffi; use ffi;
use libc::{c_char, c_int, c_uchar, c_uint, c_void}; use libc::{c_char, c_int, c_uchar, c_uint, c_void};
use std::any::Any;
use std::ffi::CStr; use std::ffi::CStr;
use std::ptr; use std::ptr;
use std::slice; use std::slice;
@ -18,7 +17,7 @@ use x509::X509StoreContextRef;
pub extern "C" fn raw_verify<F>(preverify_ok: c_int, x509_ctx: *mut ffi::X509_STORE_CTX) -> c_int pub extern "C" fn raw_verify<F>(preverify_ok: c_int, x509_ctx: *mut ffi::X509_STORE_CTX) -> c_int
where where
F: Fn(bool, &mut X509StoreContextRef) -> bool + Any + 'static + Sync + Send, F: Fn(bool, &mut X509StoreContextRef) -> bool + 'static + Sync + Send,
{ {
unsafe { unsafe {
let idx = ffi::SSL_get_ex_data_X509_STORE_CTX_idx(); let idx = ffi::SSL_get_ex_data_X509_STORE_CTX_idx();
@ -44,7 +43,6 @@ pub extern "C" fn raw_psk<F>(
) -> c_uint ) -> c_uint
where where
F: Fn(&mut SslRef, Option<&[u8]>, &mut [u8], &mut [u8]) -> Result<usize, ErrorStack> F: Fn(&mut SslRef, Option<&[u8]>, &mut [u8], &mut [u8]) -> Result<usize, ErrorStack>
+ Any
+ 'static + 'static
+ Sync + Sync
+ Send, + Send,
@ -74,7 +72,7 @@ pub extern "C" fn ssl_raw_verify<F>(
x509_ctx: *mut ffi::X509_STORE_CTX, x509_ctx: *mut ffi::X509_STORE_CTX,
) -> c_int ) -> c_int
where where
F: Fn(bool, &mut X509StoreContextRef) -> bool + Any + 'static + Sync + Send, F: Fn(bool, &mut X509StoreContextRef) -> bool + 'static + Sync + Send,
{ {
unsafe { unsafe {
let idx = ffi::SSL_get_ex_data_X509_STORE_CTX_idx(); let idx = ffi::SSL_get_ex_data_X509_STORE_CTX_idx();
@ -90,7 +88,7 @@ where
pub extern "C" fn raw_sni<F>(ssl: *mut ffi::SSL, al: *mut c_int, _arg: *mut c_void) -> c_int pub extern "C" fn raw_sni<F>(ssl: *mut ffi::SSL, al: *mut c_int, _arg: *mut c_void) -> c_int
where where
F: Fn(&mut SslRef) -> Result<(), SniError> + Any + 'static + Sync + Send, F: Fn(&mut SslRef) -> Result<(), SniError> + 'static + Sync + Send,
{ {
unsafe { unsafe {
let ssl_ctx = ffi::SSL_get_SSL_CTX(ssl); let ssl_ctx = ffi::SSL_get_SSL_CTX(ssl);
@ -175,7 +173,7 @@ pub unsafe extern "C" fn raw_tmp_dh<F>(
keylength: c_int, keylength: c_int,
) -> *mut ffi::DH ) -> *mut ffi::DH
where where
F: Fn(&mut SslRef, bool, u32) -> Result<Dh, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef, bool, u32) -> Result<Dh, ErrorStack> + 'static + Sync + Send,
{ {
let ctx = ffi::SSL_get_SSL_CTX(ssl); let ctx = ffi::SSL_get_SSL_CTX(ssl);
let callback = ffi::SSL_CTX_get_ex_data(ctx, get_callback_idx::<F>()); let callback = ffi::SSL_CTX_get_ex_data(ctx, get_callback_idx::<F>());
@ -202,7 +200,7 @@ pub unsafe extern "C" fn raw_tmp_ecdh<F>(
keylength: c_int, keylength: c_int,
) -> *mut ffi::EC_KEY ) -> *mut ffi::EC_KEY
where where
F: Fn(&mut SslRef, bool, u32) -> Result<EcKey, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef, bool, u32) -> Result<EcKey, ErrorStack> + 'static + Sync + Send,
{ {
let ctx = ffi::SSL_get_SSL_CTX(ssl); let ctx = ffi::SSL_get_SSL_CTX(ssl);
let callback = ffi::SSL_CTX_get_ex_data(ctx, get_callback_idx::<F>()); let callback = ffi::SSL_CTX_get_ex_data(ctx, get_callback_idx::<F>());
@ -228,7 +226,7 @@ pub unsafe extern "C" fn raw_tmp_dh_ssl<F>(
keylength: c_int, keylength: c_int,
) -> *mut ffi::DH ) -> *mut ffi::DH
where where
F: Fn(&mut SslRef, bool, u32) -> Result<Dh, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef, bool, u32) -> Result<Dh, ErrorStack> + 'static + Sync + Send,
{ {
let callback = ffi::SSL_get_ex_data(ssl, get_ssl_callback_idx::<F>()); let callback = ffi::SSL_get_ex_data(ssl, get_ssl_callback_idx::<F>());
let callback = &*(callback as *mut F); let callback = &*(callback as *mut F);
@ -254,7 +252,7 @@ pub unsafe extern "C" fn raw_tmp_ecdh_ssl<F>(
keylength: c_int, keylength: c_int,
) -> *mut ffi::EC_KEY ) -> *mut ffi::EC_KEY
where where
F: Fn(&mut SslRef, bool, u32) -> Result<EcKey, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef, bool, u32) -> Result<EcKey, ErrorStack> + 'static + Sync + Send,
{ {
let callback = ffi::SSL_get_ex_data(ssl, get_ssl_callback_idx::<F>()); let callback = ffi::SSL_get_ex_data(ssl, get_ssl_callback_idx::<F>());
let callback = &*(callback as *mut F); let callback = &*(callback as *mut F);
@ -275,7 +273,7 @@ where
pub unsafe extern "C" fn raw_tlsext_status<F>(ssl: *mut ffi::SSL, _: *mut c_void) -> c_int pub unsafe extern "C" fn raw_tlsext_status<F>(ssl: *mut ffi::SSL, _: *mut c_void) -> c_int
where where
F: Fn(&mut SslRef) -> Result<bool, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef) -> Result<bool, ErrorStack> + 'static + Sync + Send,
{ {
let ssl_ctx = ffi::SSL_get_SSL_CTX(ssl as *const _); let ssl_ctx = ffi::SSL_get_SSL_CTX(ssl as *const _);
let callback = ffi::SSL_CTX_get_ex_data(ssl_ctx, get_callback_idx::<F>()); let callback = ffi::SSL_CTX_get_ex_data(ssl_ctx, get_callback_idx::<F>());

View File

@ -1,4 +1,3 @@
use std::any::Any;
use std::error; use std::error;
use std::error::Error as StdError; use std::error::Error as StdError;
use std::fmt; use std::fmt;
@ -107,7 +106,7 @@ pub enum HandshakeError<S> {
WouldBlock(MidHandshakeSslStream<S>), WouldBlock(MidHandshakeSslStream<S>),
} }
impl<S: Any + fmt::Debug> StdError for HandshakeError<S> { impl<S: fmt::Debug> StdError for HandshakeError<S> {
fn description(&self) -> &str { fn description(&self) -> &str {
match *self { match *self {
HandshakeError::SetupFailure(_) => "stream setup failed", HandshakeError::SetupFailure(_) => "stream setup failed",
@ -124,7 +123,7 @@ impl<S: Any + fmt::Debug> StdError for HandshakeError<S> {
} }
} }
impl<S: Any + fmt::Debug> fmt::Display for HandshakeError<S> { impl<S: fmt::Debug> fmt::Display for HandshakeError<S> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(StdError::description(self))?; f.write_str(StdError::description(self))?;
match *self { match *self {

View File

@ -74,7 +74,6 @@ use ffi;
use foreign_types::{ForeignType, ForeignTypeRef, Opaque}; use foreign_types::{ForeignType, ForeignTypeRef, Opaque};
use libc::{c_int, c_long, c_ulong, c_void}; use libc::{c_int, c_long, c_ulong, c_void};
use libc::{c_uchar, c_uint}; use libc::{c_uchar, c_uint};
use std::any::Any;
use std::any::TypeId; use std::any::TypeId;
use std::cmp; use std::cmp;
use std::collections::HashMap; use std::collections::HashMap;
@ -351,7 +350,7 @@ lazy_static! {
// Creates a static index for user data of type T // Creates a static index for user data of type T
// Registers a destructor for the data which will be called // Registers a destructor for the data which will be called
// when context is freed // when context is freed
fn get_callback_idx<T: Any + 'static>() -> c_int { fn get_callback_idx<T: 'static>() -> c_int {
*INDEXES *INDEXES
.lock() .lock()
.unwrap() .unwrap()
@ -359,7 +358,7 @@ fn get_callback_idx<T: Any + 'static>() -> c_int {
.or_insert_with(|| get_new_idx::<T>()) .or_insert_with(|| get_new_idx::<T>())
} }
fn get_ssl_callback_idx<T: Any + 'static>() -> c_int { fn get_ssl_callback_idx<T: 'static>() -> c_int {
*SSL_INDEXES *SSL_INDEXES
.lock() .lock()
.unwrap() .unwrap()
@ -490,7 +489,7 @@ impl SslContextBuilder {
pub fn set_verify_callback<F>(&mut self, mode: SslVerifyMode, verify: F) pub fn set_verify_callback<F>(&mut self, mode: SslVerifyMode, verify: F)
where where
// FIXME should take a mutable reference to the store // FIXME should take a mutable reference to the store
F: Fn(bool, &mut X509StoreContextRef) -> bool + Any + 'static + Sync + Send, F: Fn(bool, &mut X509StoreContextRef) -> bool + 'static + Sync + Send,
{ {
unsafe { unsafe {
let verify = Box::new(verify); let verify = Box::new(verify);
@ -516,7 +515,7 @@ impl SslContextBuilder {
/// [`SSL_CTX_set_tlsext_servername_callback`]: https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_tlsext_servername_callback.html /// [`SSL_CTX_set_tlsext_servername_callback`]: https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_tlsext_servername_callback.html
pub fn set_servername_callback<F>(&mut self, callback: F) pub fn set_servername_callback<F>(&mut self, callback: F)
where where
F: Fn(&mut SslRef) -> Result<(), SniError> + Any + 'static + Sync + Send, F: Fn(&mut SslRef) -> Result<(), SniError> + 'static + Sync + Send,
{ {
unsafe { unsafe {
let callback = Box::new(callback); let callback = Box::new(callback);
@ -612,7 +611,7 @@ impl SslContextBuilder {
/// [`SSL_CTX_set_tmp_dh_callback`]: https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_tmp_dh.html /// [`SSL_CTX_set_tmp_dh_callback`]: https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_tmp_dh.html
pub fn set_tmp_dh_callback<F>(&mut self, callback: F) pub fn set_tmp_dh_callback<F>(&mut self, callback: F)
where where
F: Fn(&mut SslRef, bool, u32) -> Result<Dh, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef, bool, u32) -> Result<Dh, ErrorStack> + 'static + Sync + Send,
{ {
unsafe { unsafe {
let callback = Box::new(callback); let callback = Box::new(callback);
@ -650,7 +649,7 @@ impl SslContextBuilder {
#[cfg(any(all(feature = "v101", ossl101), all(feature = "v102", ossl102)))] #[cfg(any(all(feature = "v101", ossl101), all(feature = "v102", ossl102)))]
pub fn set_tmp_ecdh_callback<F>(&mut self, callback: F) pub fn set_tmp_ecdh_callback<F>(&mut self, callback: F)
where where
F: Fn(&mut SslRef, bool, u32) -> Result<EcKey, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef, bool, u32) -> Result<EcKey, ErrorStack> + 'static + Sync + Send,
{ {
unsafe { unsafe {
let callback = Box::new(callback); let callback = Box::new(callback);
@ -1022,7 +1021,7 @@ impl SslContextBuilder {
/// [`SSL_CTX_set_tlsext_status_cb`]: https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_tlsext_status_cb.html /// [`SSL_CTX_set_tlsext_status_cb`]: https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_tlsext_status_cb.html
pub fn set_status_callback<F>(&mut self, callback: F) -> Result<(), ErrorStack> pub fn set_status_callback<F>(&mut self, callback: F) -> Result<(), ErrorStack>
where where
F: Fn(&mut SslRef) -> Result<bool, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef) -> Result<bool, ErrorStack> + 'static + Sync + Send,
{ {
unsafe { unsafe {
let callback = Box::new(callback); let callback = Box::new(callback);
@ -1051,7 +1050,6 @@ impl SslContextBuilder {
pub fn set_psk_callback<F>(&mut self, callback: F) pub fn set_psk_callback<F>(&mut self, callback: F)
where where
F: Fn(&mut SslRef, Option<&[u8]>, &mut [u8], &mut [u8]) -> Result<usize, ErrorStack> F: Fn(&mut SslRef, Option<&[u8]>, &mut [u8], &mut [u8]) -> Result<usize, ErrorStack>
+ Any
+ 'static + 'static
+ Sync + Sync
+ Send, + Send,
@ -1500,7 +1498,7 @@ impl SslRef {
pub fn set_verify_callback<F>(&mut self, mode: SslVerifyMode, verify: F) pub fn set_verify_callback<F>(&mut self, mode: SslVerifyMode, verify: F)
where where
// FIXME should take a mutable reference to the x509 store // FIXME should take a mutable reference to the x509 store
F: Fn(bool, &mut X509StoreContextRef) -> bool + Any + 'static + Sync + Send, F: Fn(bool, &mut X509StoreContextRef) -> bool + 'static + Sync + Send,
{ {
unsafe { unsafe {
let verify = Box::new(verify); let verify = Box::new(verify);
@ -1531,7 +1529,7 @@ impl SslRef {
/// [`SSL_set_tmp_dh_callback`]: https://www.openssl.org/docs/man1.0.2/ssl/SSL_set_tmp_dh.html /// [`SSL_set_tmp_dh_callback`]: https://www.openssl.org/docs/man1.0.2/ssl/SSL_set_tmp_dh.html
pub fn set_tmp_dh_callback<F>(&mut self, callback: F) pub fn set_tmp_dh_callback<F>(&mut self, callback: F)
where where
F: Fn(&mut SslRef, bool, u32) -> Result<Dh, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef, bool, u32) -> Result<Dh, ErrorStack> + 'static + Sync + Send,
{ {
unsafe { unsafe {
let callback = Box::new(callback); let callback = Box::new(callback);
@ -1564,7 +1562,7 @@ impl SslRef {
#[cfg(any(all(feature = "v101", ossl101), all(feature = "v102", ossl102)))] #[cfg(any(all(feature = "v101", ossl101), all(feature = "v102", ossl102)))]
pub fn set_tmp_ecdh_callback<F>(&mut self, callback: F) pub fn set_tmp_ecdh_callback<F>(&mut self, callback: F)
where where
F: Fn(&mut SslRef, bool, u32) -> Result<EcKey, ErrorStack> + Any + 'static + Sync + Send, F: Fn(&mut SslRef, bool, u32) -> Result<EcKey, ErrorStack> + 'static + Sync + Send,
{ {
unsafe { unsafe {
let callback = Box::new(callback); let callback = Box::new(callback);