aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/ssl/callbacks.rs
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2018-02-15 21:30:20 -0800
committerSteven Fackler <[email protected]>2018-02-15 21:30:20 -0800
commita9d8bea33c0e9417c388cbac0491d75cffd7babf (patch)
tree268e956e2164f8410fa7741173ebfcd093304ae3 /openssl/src/ssl/callbacks.rs
parentMerge pull request #839 from sfackler/openssl111 (diff)
downloadrust-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.rs25
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
+}