1010#include < openssl/ssl.h>
1111#include < openssl/x509.h>
1212
13+ #include " bin/io_service.h"
1314#include " bin/lockers.h"
1415#include " bin/secure_socket_utils.h"
1516#include " bin/security_context.h"
@@ -34,6 +35,7 @@ bool SSLFilter::library_initialized_ = false;
3435Mutex* SSLFilter::mutex_ = nullptr ;
3536int SSLFilter::filter_ssl_index;
3637int SSLFilter::ssl_cert_context_index;
38+ Dart_Port SSLFilter::trust_evaluate_reply_port_ = ILLEGAL_PORT;
3739
3840void SSLFilter::Init () {
3941 ASSERT (SSLFilter::mutex_ == nullptr );
@@ -44,6 +46,7 @@ void SSLFilter::Cleanup() {
4446 ASSERT (SSLFilter::mutex_ != nullptr );
4547 delete SSLFilter::mutex_;
4648 SSLFilter::mutex_ = nullptr ;
49+ trust_evaluate_reply_port_ = ILLEGAL_PORT;
4750}
4851
4952const intptr_t SSLFilter::kInternalBIOSize = 10 * KB;
@@ -482,6 +485,17 @@ void SSLFilter::InitializeLibrary() {
482485 }
483486}
484487
488+ Dart_Port SSLFilter::TrustEvaluateReplyPort () {
489+ MutexLocker locker (mutex_);
490+ if (trust_evaluate_reply_port_ == ILLEGAL_PORT) {
491+ trust_evaluate_reply_port_ =
492+ Dart_NewConcurrentNativePort (" SSLCertContextTrustEvaluate" ,
493+ SSLCertContext::GetTrustEvaluateHandler (),
494+ IOService::max_concurrency ());
495+ }
496+ return trust_evaluate_reply_port_;
497+ }
498+
485499void SSLFilter::Connect (const char * hostname,
486500 SSLCertContext* context,
487501 bool is_server,
@@ -514,13 +528,6 @@ void SSLFilter::Connect(const char* hostname,
514528 context->RegisterCallbacks (ssl_);
515529 SSL_set_ex_data (ssl_, ssl_cert_context_index, context);
516530
517- TrustEvaluateHandlerFunc trust_evaluate_handler =
518- context->GetTrustEvaluateHandler ();
519- if (trust_evaluate_handler != nullptr ) {
520- trust_evaluate_reply_port_ = Dart_NewNativePort (
521- " SSLCertContextTrustEvaluate" , trust_evaluate_handler,
522- /* handle_concurrently=*/ false );
523- }
524531 if (is_server_) {
525532 int certificate_mode =
526533 request_client_certificate ? SSL_VERIFY_PEER : SSL_VERIFY_NONE;
@@ -714,10 +721,6 @@ void SSLFilter::Destroy() {
714721 Dart_DeletePersistentHandle (bad_certificate_callback_);
715722 bad_certificate_callback_ = nullptr ;
716723 }
717- if (trust_evaluate_reply_port_ != ILLEGAL_PORT) {
718- Dart_CloseNativePort (trust_evaluate_reply_port_);
719- trust_evaluate_reply_port_ = ILLEGAL_PORT;
720- }
721724 FreeResources ();
722725}
723726
0 commit comments