@@ -457,6 +457,7 @@ pub struct SslContext {
457457 cert_callback : callbacks:: CertCallbackConfig ,
458458 servername_callback : callbacks:: ServerNameCallbackConfig ,
459459 info_callback : callbacks:: InfoCallbackConfig ,
460+ client_hello_callback : callbacks:: ClientHelloCallbackConfig ,
460461 auth_keys : sign:: CertifiedKeySet ,
461462 max_early_data : u32 ,
462463}
@@ -488,6 +489,7 @@ impl SslContext {
488489 cert_callback : callbacks:: CertCallbackConfig :: default ( ) ,
489490 servername_callback : callbacks:: ServerNameCallbackConfig :: default ( ) ,
490491 info_callback : callbacks:: InfoCallbackConfig :: default ( ) ,
492+ client_hello_callback : callbacks:: ClientHelloCallbackConfig :: default ( ) ,
491493 auth_keys : sign:: CertifiedKeySet :: default ( ) ,
492494 max_early_data : 0 ,
493495 }
@@ -606,6 +608,15 @@ impl SslContext {
606608 self . info_callback . cb = callback;
607609 }
608610
611+ fn set_client_hello_callback (
612+ & mut self ,
613+ callback : entry:: SSL_client_hello_cb_func ,
614+ arg : * mut c_void ,
615+ ) {
616+ self . client_hello_callback . cb = callback;
617+ self . client_hello_callback . context = arg;
618+ }
619+
609620 fn set_max_early_data ( & mut self , max : u32 ) {
610621 self . max_early_data = max;
611622 }
@@ -784,6 +795,7 @@ struct Ssl {
784795 cert_callback : callbacks:: CertCallbackConfig ,
785796 info_callback : callbacks:: InfoCallbackConfig ,
786797 servername_callback : callbacks:: ServerNameCallbackConfig ,
798+ client_hello_callback : callbacks:: ClientHelloCallbackConfig ,
787799 sni_server_name : Option < ServerName < ' static > > ,
788800 server_name : Option < CString > ,
789801 bio : Option < bio:: Bio > ,
@@ -826,6 +838,7 @@ impl Ssl {
826838 cert_callback : inner. cert_callback . clone ( ) ,
827839 info_callback : inner. info_callback . clone ( ) ,
828840 servername_callback : inner. servername_callback . clone ( ) ,
841+ client_hello_callback : inner. client_hello_callback . clone ( ) ,
829842 sni_server_name : None ,
830843 server_name : None ,
831844 bio : None ,
@@ -1152,6 +1165,8 @@ impl Ssl {
11521165 unreachable ! ( ) ;
11531166 } ;
11541167
1168+ self . client_hello_callback . invoke ( ) ?;
1169+
11551170 self . server_name = accepted
11561171 . client_hello ( )
11571172 . server_name ( )
0 commit comments