aboutsummaryrefslogtreecommitdiff
path: root/openssl-sys/src/lib.rs
diff options
context:
space:
mode:
authorJethro Beekman <[email protected]>2015-07-01 21:49:11 -0700
committerJethro Beekman <[email protected]>2015-07-01 21:49:11 -0700
commitaeefa364b7fd386584d90040592ae9b4b3dc42b4 (patch)
treeecc4fe355dbcd06f608b86f9af851f64ed2d08bf /openssl-sys/src/lib.rs
parentMerge pull request #232 from jethrogb/topic/fix_nid (diff)
downloadrust-openssl-aeefa364b7fd386584d90040592ae9b4b3dc42b4.tar.xz
rust-openssl-aeefa364b7fd386584d90040592ae9b4b3dc42b4.zip
Decouple C SSL Option bit flags from Rust version
The OpenSSL "SSL_OP_*" flags are in constant flux between different OpenSSL versions. To avoid having to change the Rust definitions, we implement our own numbering system in Rust, and use an automatically-generated C shim to convert the bitflags at runtime.
Diffstat (limited to 'openssl-sys/src/lib.rs')
-rw-r--r--openssl-sys/src/lib.rs32
1 files changed, 26 insertions, 6 deletions
diff --git a/openssl-sys/src/lib.rs b/openssl-sys/src/lib.rs
index 9f2041a4..08b2199d 100644
--- a/openssl-sys/src/lib.rs
+++ b/openssl-sys/src/lib.rs
@@ -155,6 +155,14 @@ pub const SSL_TLSEXT_ERR_ALERT_WARNING: c_int = 1;
pub const SSL_TLSEXT_ERR_ALERT_FATAL: c_int = 2;
pub const SSL_TLSEXT_ERR_NOACK: c_int = 3;
+macro_rules! import_options {
+ ( $( $name:ident $val:expr )* ) => {
+ $( pub const $name: u64 = $val; )*
+ };
+}
+
+include!("ssl_options.rs");
+
#[cfg(feature = "npn")]
pub const OPENSSL_NPN_UNSUPPORTED: c_int = 0;
#[cfg(feature = "npn")]
@@ -262,8 +270,23 @@ pub fn init() {
}
}
+pub unsafe fn SSL_CTX_set_options(ssl: *mut SSL_CTX, op: u64) -> u64 {
+ rust_openssl_ssl_ctx_options_c_to_rust(SSL_CTX_set_options_shim(ssl, rust_openssl_ssl_ctx_options_rust_to_c(op)))
+}
+
+pub unsafe fn SSL_CTX_get_options(ssl: *mut SSL_CTX) -> u64 {
+ rust_openssl_ssl_ctx_options_c_to_rust(SSL_CTX_get_options_shim(ssl))
+}
+
+pub unsafe fn SSL_CTX_clear_options(ssl: *mut SSL_CTX, op: u64) -> u64 {
+ rust_openssl_ssl_ctx_options_c_to_rust(SSL_CTX_clear_options_shim(ssl, rust_openssl_ssl_ctx_options_rust_to_c(op)))
+}
+
// True functions
extern "C" {
+ fn rust_openssl_ssl_ctx_options_rust_to_c(rustval: u64) -> c_long;
+ fn rust_openssl_ssl_ctx_options_c_to_rust(cval: c_long) -> u64;
+
pub fn ASN1_INTEGER_set(dest: *mut ASN1_INTEGER, value: c_long) -> c_int;
pub fn ASN1_STRING_type_new(ty: c_int) -> *mut ASN1_STRING;
pub fn ASN1_TIME_free(tm: *mut ASN1_TIME);
@@ -615,12 +638,9 @@ extern "C" {
pub fn BIO_eof(b: *mut BIO) -> c_int;
#[link_name = "BIO_set_mem_eof_return_shim"]
pub fn BIO_set_mem_eof_return(b: *mut BIO, v: c_int);
- #[link_name = "SSL_CTX_set_options_shim"]
- pub fn SSL_CTX_set_options(ctx: *mut SSL_CTX, options: c_long) -> c_long;
- #[link_name = "SSL_CTX_get_options_shim"]
- pub fn SSL_CTX_get_options(ctx: *mut SSL_CTX) -> c_long;
- #[link_name = "SSL_CTX_clear_options_shim"]
- pub fn SSL_CTX_clear_options(ctx: *mut SSL_CTX, options: c_long) -> c_long;
+ pub fn SSL_CTX_set_options_shim(ctx: *mut SSL_CTX, options: c_long) -> c_long;
+ pub fn SSL_CTX_get_options_shim(ctx: *mut SSL_CTX) -> c_long;
+ pub fn SSL_CTX_clear_options_shim(ctx: *mut SSL_CTX, options: c_long) -> c_long;
#[link_name = "SSL_CTX_add_extra_chain_cert_shim"]
pub fn SSL_CTX_add_extra_chain_cert(ctx: *mut SSL_CTX, x509: *mut X509) -> c_long;
#[link_name = "SSL_CTX_set_read_ahead_shim"]