diff options
| author | Steven Fackler <[email protected]> | 2018-02-15 21:30:20 -0800 |
|---|---|---|
| committer | Steven Fackler <[email protected]> | 2018-02-15 21:30:20 -0800 |
| commit | a9d8bea33c0e9417c388cbac0491d75cffd7babf (patch) | |
| tree | 268e956e2164f8410fa7741173ebfcd093304ae3 /openssl/src/ssl/callbacks.rs | |
| parent | Merge pull request #839 from sfackler/openssl111 (diff) | |
| download | rust-openssl-a9d8bea33c0e9417c388cbac0491d75cffd7babf.tar.xz rust-openssl-a9d8bea33c0e9417c388cbac0491d75cffd7babf.zip | |
Add more session cache support
Diffstat (limited to 'openssl/src/ssl/callbacks.rs')
| -rw-r--r-- | openssl/src/ssl/callbacks.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/openssl/src/ssl/callbacks.rs b/openssl/src/ssl/callbacks.rs index 9a3d3de1..0a38952b 100644 --- a/openssl/src/ssl/callbacks.rs +++ b/openssl/src/ssl/callbacks.rs @@ -5,6 +5,8 @@ use std::ptr; use std::slice; use std::mem; use foreign_types::ForeignTypeRef; +#[cfg(any(all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] +use foreign_types::ForeignType; use error::ErrorStack; use dh::Dh; @@ -15,6 +17,8 @@ use ssl::{get_callback_idx, get_ssl_callback_idx, SniError, SslAlert, SslRef}; #[cfg(any(all(feature = "v102", ossl102), all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] use ssl::AlpnError; +#[cfg(any(all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] +use ssl::SslSession; use x509::X509StoreContextRef; pub extern "C" fn raw_verify<F>(preverify_ok: c_int, x509_ctx: *mut ffi::X509_STORE_CTX) -> c_int @@ -274,3 +278,24 @@ where } } } + +#[cfg(any(all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] +pub unsafe extern "C" fn raw_new_session<F>( + ssl: *mut ffi::SSL, + session: *mut ffi::SSL_SESSION, +) -> c_int +where + F: Fn(&mut SslRef, SslSession) + 'static + Sync + Send, +{ + 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 = &*(callback as *mut F); + + let ssl = SslRef::from_ptr_mut(ssl); + let session = SslSession::from_ptr(session); + + callback(ssl, session); + + // the return code doesn't indicate error vs success, but whether or not we consumed the session + 1 +} |