package Ġcom . github . j async . sql . db . util Ċ Ċ import Ġcom . github . j async . sql . db . Configuration Ċ import Ġcom . github . j async . sql . db . SSL Configuration Ċ import Ġio . netty . channel . Channel Ċ import Ġio . netty . channel . EventLoop Group Ċ import Ġio . netty . channel . ep oll . E poll Ċ import Ġio . netty . channel . ep oll . E poll Domain SocketChannel Ċ import Ġio . netty . channel . ep oll . E poll EventLoop Group Ċ import Ġio . netty . channel . ep oll . E poll SocketChannel Ċ import Ġio . netty . channel . k queue . K Queue Ċ import Ġio . netty . channel . k queue . K Queue Domain SocketChannel Ċ import Ġio . netty . channel . k queue . K Queue EventLoop Group Ċ import Ġio . netty . channel . k queue . K Queue SocketChannel Ċ import Ġio . netty . channel . nio . Nio EventLoop Group Ċ import Ġio . netty . channel . socket . nio . Nio SocketChannel Ċ import Ġio . netty . channel . unix . Domain SocketAddress Ċ import Ġio . netty . handler . ssl . Ssl Context Ċ import Ġio . netty . handler . ssl . Ssl Context Builder Ċ import Ġio . netty . handler . ssl . util . In secure Trust ManagerFactory Ċ import Ġio . netty . util . internal . logging . Internal LoggerFactory Ċ import Ġio . netty . util . internal . logging . Slf 4 J LoggerFactory Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . net . Inet SocketAddress Ċ import Ġjava . net . SocketAddress Ċ import Ġjava . security . KeyStore Ċ import Ġjavax . net . ssl . SSL Engine Ċ import Ġjavax . net . ssl . Trust ManagerFactory Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ object ĠNet ty Utils Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠInternal LoggerFactory . setDefault Factory ( Slf 4 J LoggerFactory . INSTANCE ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Or False Ġ{ ĠE poll . is Available () Ġ} Ġ-> Ġlogger . info Ġ{ Ġ" j async Ġavailable Ġtransport Ġ- Ġnative Ġ( ep oll )" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Or False Ġ{ ĠK Queue . is Available () Ġ} Ġ-> Ġlogger . info Ġ{ Ġ" j async Ġavailable Ġtransport Ġ- Ġnative Ġ( k queue )" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlogger . info Ġ{ Ġ" j async Ġselected Ġtransport Ġ- Ġn io " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠDefault EventLoop Group : ĠEvent Loop Group Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Or False Ġ{ ĠE poll . is Available () Ġ} Ġ-> ĠE poll EventLoop Group ( 0 , ĠDa emon Threads Factory (" db - sql - netty ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Or False Ġ{ ĠK Queue . is Available () Ġ} Ġ-> ĠK Queue EventLoop Group ( 0 , ĠDa emon Threads Factory (" db - sql - netty ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠN io EventLoop Group ( 0 , ĠDa emon Threads Factory (" db - sql - netty ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget SocketChannel Class ( event Loop Group : ĠEvent Loop Group , Ġuse Domain Socket : ĠBoolean Ġ= Ġfalse ): ĠClass < out ĠChannel > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Or False Ġ{ Ġevent Loop Group Ġis ĠE poll EventLoop Group Ġ} Ġ-> Ġif Ġ( use Domain Socket ) ĠE poll Domain SocketChannel :: class . java Ġelse ĠE poll SocketChannel :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Or False Ġ{ Ġevent Loop Group Ġis ĠK Queue EventLoop Group Ġ} Ġ-> Ġif Ġ( use Domain Socket ) ĠK Queue Domain SocketChannel :: class . java Ġelse ĠK Queue SocketChannel :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( use Domain Socket ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" domain Ġsocket Ġis Ġnot Ġsupported Ġby ĠN io EventLoop Group , Ġuse Domain Socket Ġflag Ġis Ġskipped " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN io SocketChannel :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget SocketChannel Class And SocketAddress ( ĊĠĠĠĠĠĠĠ Ġevent Loop Group : ĠEvent Loop Group , ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠConfiguration ĊĠĠĠ Ġ): ĠPair < Class < out ĠChannel >, ĠSocket Address > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġuse Domain Socket Ġ= Ġconfiguration . socket Path Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġsocket Channel Class Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Or False Ġ{ Ġevent Loop Group Ġis ĠE poll EventLoop Group Ġ} Ġ-> Ġif Ġ( use Domain Socket ) ĠE poll Domain SocketChannel :: class . java Ġelse ĠE poll SocketChannel :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Or False Ġ{ Ġevent Loop Group Ġis ĠK Queue EventLoop Group Ġ} Ġ-> Ġif Ġ( use Domain Socket ) ĠK Queue Domain SocketChannel :: class . java Ġelse ĠK Queue SocketChannel :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( use Domain Socket ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" domain Ġsocket Ġis Ġnot Ġsupported Ġby ĠN io EventLoop Group , Ġconfiguration Ġfor Ġsocket Path Ġis Ġignored " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Domain Socket Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN io SocketChannel :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsocket Address Ġ= Ġif Ġ( use Domain Socket ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain SocketAddress ( configuration . socket Path ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInet SocketAddress ( configuration . host , Ġconfiguration . port ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsocket Channel Class Ġto Ġsocket Address ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Ssl Context ( ssl Configuration : ĠSSL Configuration ): ĠS sl Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Builder Ġ= ĠS sl Context Builder . for Client () ĊĠĠĠĠĠĠĠ Ġif Ġ( ssl Configuration . mode Ġ>= ĠSSL Configuration . Mode . Verify CA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ssl Configuration . root Cert Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt mf Ġ= ĠTrust ManagerFactory . getInstance ( Trust ManagerFactory . getDefault Algorithm ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġks Ġ= ĠKey Store . getInstance ( KeyStore . getDefault Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc ac erts Ġ= ĠFileInputStream ( System . getProperty (" java . home ") Ġ+ Ġ"/ lib / security / cac erts ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ac erts . use Ġ{ Ġks . load ( it , Ġ" change it ". toCharArray ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt mf . init ( ks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx Builder . trust Manager ( tm f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx Builder . trust Manager ( ssl Configuration . root Cert ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx Builder . trust Manager ( In secure Trust ManagerFactory . INSTANCE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġctx Builder . key Manager ( ssl Configuration . client Cert , Ġssl Configuration . client PrivateKey ) ĊĠĠĠĠĠĠĠ Ġreturn Ġctx Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġhost Ġname Ġidentity Ġverification Ġby Ġchecking Ġthe Ġhost Ġname Ġthe Ġdriver Ġuses Ġfor Ġconnecting Ġto Ġthe Ġserver ĊĠĠĠĠ Ġ* Ġagainst Ġthe Ġidentity Ġin Ġthe Ġcertificate Ġthat Ġthe Ġserver Ġsends Ġback . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠSSL Configuration . Mode . Verify Full ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġverify Host Identity ( ssl Engine : ĠSSL Engine ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġssl Params Ġ= Ġssl Engine . ssl Parameters ĊĠĠĠĠĠĠĠ Ġssl Params . endpoint Identification Algorithm Ġ= Ġ" HTTPS " ĊĠĠĠĠĠĠĠ Ġssl Engine . ssl Parameters Ġ= Ġssl Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtry Or False ( fn : Ġ() Ġ-> ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfn . invoke () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ