aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/ssl/test.rs
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2018-09-15 13:29:18 -0700
committerSteven Fackler <[email protected]>2018-09-15 13:29:18 -0700
commit22231d7547465eefc8a1bbb3ed439af24bb6970e (patch)
treef39cf232461c9cc708850c8df3d8300d595a53a0 /openssl/src/ssl/test.rs
parentRelease openssl 0.10.12 (diff)
downloadrust-openssl-22231d7547465eefc8a1bbb3ed439af24bb6970e.tar.xz
rust-openssl-22231d7547465eefc8a1bbb3ed439af24bb6970e.zip
Support the client hello callback
Diffstat (limited to 'openssl/src/ssl/test.rs')
-rw-r--r--openssl/src/ssl/test.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/openssl/src/ssl/test.rs b/openssl/src/ssl/test.rs
index e1a6a04b..e1ebff97 100644
--- a/openssl/src/ssl/test.rs
+++ b/openssl/src/ssl/test.rs
@@ -1793,3 +1793,49 @@ fn sni_callback_swapped_ctx() {
guard.join().unwrap();
}
+
+#[test]
+#[cfg(ossl111)]
+fn client_hello() {
+ use ssl::ClientHelloResponse;
+
+ static CALLED_BACK: AtomicBool = ATOMIC_BOOL_INIT;
+
+ let listener = TcpListener::bind("127.0.0.1:0").unwrap();
+ let addr = listener.local_addr().unwrap();
+
+ let guard = thread::spawn(move || {
+ let stream = listener.accept().unwrap().0;
+ let mut ctx = SslContext::builder(SslMethod::tls()).unwrap();
+ ctx.set_certificate_file(&Path::new("test/cert.pem"), SslFiletype::PEM)
+ .unwrap();
+ ctx.set_private_key_file(&Path::new("test/key.pem"), SslFiletype::PEM)
+ .unwrap();
+ ctx.set_client_hello_callback(|ssl, _| {
+ assert!(!ssl.client_hello_isv2());
+ assert_eq!(ssl.client_hello_legacy_version(), Some(SslVersion::TLS1_2));
+ assert!(ssl.client_hello_random().is_some());
+ assert!(ssl.client_hello_session_id().is_some());
+ assert!(ssl.client_hello_ciphers().is_some());
+ assert!(ssl.client_hello_compression_methods().is_some());
+
+ CALLED_BACK.store(true, Ordering::SeqCst);
+ Ok(ClientHelloResponse::SUCCESS)
+ });
+
+ let ssl = Ssl::new(&ctx.build()).unwrap();
+ let mut stream = ssl.accept(stream).unwrap();
+ stream.write_all(&mut [0]).unwrap();
+ });
+
+ let stream = TcpStream::connect(addr).unwrap();
+ let ctx = SslContext::builder(SslMethod::tls()).unwrap();
+ let ssl = Ssl::new(&ctx.build()).unwrap();
+
+ let mut stream = ssl.connect(stream).unwrap();
+ stream.read_exact(&mut [0]).unwrap();
+
+ assert!(CALLED_BACK.load(Ordering::SeqCst));
+
+ guard.join().unwrap();
+}