package Ġpl p . common . rpc . client Ċ Ċ import Ġio . grpc . Managed Channel Ċ import Ġio . grpc . Managed Channel Builder Ċ import Ġio . grpc . netty . sh aded . io . grpc . netty . Grpc Ssl Contexts Ċ import Ġio . grpc . netty . sh aded . io . grpc . netty . Net ty Channel Builder Ċ import Ġio . grpc . netty . sh aded . io . netty . handler . ssl . Ssl Context Ċ import Ġpl p . common . to Path Ċ import Ġpl p . logging . Kotlin Logging Ċ import Ġkotlin . io . path . Experimental Path Api Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġrepresents Ġa Ġchoice Ġmade Ġbetween Ġthe Ġtransport Ġprotocols Ġfor Ġa Ġchannel Ċ Ġ* Ġ( in secure , ĠTLS , Ġor Ġmut ual ĠTLS ) Ċ Ġ* Ġbut Ġthat Ġhas Ġnot Ġyet Ġbeen Ġinstantiated Ġinto Ġa Ġchannel . Ċ Ġ* Ġ( For Ġthat , Ġ@ see Ġ# make Channel ) Ċ Ġ*/ Ċ sealed Ġclass ĠGr pc Channel Choice Ġ{ ĊĠĠĠ Ġ/** ĠReturn Ġa Ġnew Ġchannel Ġconnecting Ġthe Ġchosen Ġtransport Ġwith Ġthe Ġprovided Ġserver Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġmake Channel ( host : ĠString , Ġport : ĠInt ): ĠManaged Channel ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Experimental Path Api ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Return Count ") ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Args ( root : ĠString ?, Ġkey : ĠString ?, Ġcert : ĠString ?): ĠGr pc Channel Choice Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( key Ġ!= Ġnull ) Ġ&& Ġ( cert Ġ!= Ġnull )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" for ĠRPC , Ġusing Ġmut ual Ġauthentication Ġwith Ġparameters Ġroot Ġ= Ġ$ root , Ġcert Ġ= Ġ$ cert , Ġkey Ġ= Ġ$ key " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMut ual Auth Channel ( root Ġ= Ġroot , Ġcert Ġ= Ġcert , Ġkey Ġ= Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" for ĠRPC , Ġusing ĠTLS Ġwith Ġparameter Ġroot Ġ= Ġ$ root , Ġcert Ġ= Ġ$ cert , Ġkey Ġ= Ġ$ key " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠT ls Channel ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warning (" for ĠRPC , Ġusing Ġno Ġauthentication Ġ( not Ġsecure Ġover Ġthe Ġnetwork ! )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIn secure Channel ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMut ual Auth Channel ( private Ġval Ġroot : ĠString , Ġprivate Ġval Ġcert : ĠString , Ġprivate Ġval Ġkey : ĠString ) Ġ: ĠGr pc Channel Choice () Ġ{ ĊĠĠĠ Ġ@ Experimental Path Api ĊĠĠĠ Ġoverride Ġfun Ġmake Channel ( host : ĠString , Ġport : ĠInt ): ĠManaged Channel Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" creating Ġa Ġmut ual ĠTLS Ġchannel Ġto Ġ$ host :$ port " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġssl Context : ĠS sl Context Ġ= ĠGr pc Ssl Contexts . for Client () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. trust Manager ( this . root . to Path (). to File ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. key Manager ( this . cert . to Path (). to File (), Ġthis . key . to Path (). to File ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠNet ty Channel Builder . for Address ( host , Ġport ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Transport Security () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ssl Context ( ssl Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠT ls Channel ( private Ġval Ġroot : ĠString ) Ġ: ĠGr pc Channel Choice () Ġ{ ĊĠĠĠ Ġ@ Experimental Path Api ĊĠĠĠ Ġoverride Ġfun Ġmake Channel ( host : ĠString , Ġport : ĠInt ): ĠManaged Channel Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" creating Ġa ĠTLS Ġchannel Ġto Ġ$ host :$ port " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġssl Context : ĠS sl Context Ġ= ĠGr pc Ssl Contexts . for Client () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. trust Manager ( this . root . to Path (). to File ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠNet ty Channel Builder . for Address ( host , Ġport ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Transport Security () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ssl Context ( ssl Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠIn secure Channel Ġ: ĠGr pc Channel Choice () Ġ{ ĊĠĠĠ Ġ@ Experimental Path Api ĊĠĠĠ Ġoverride Ġfun Ġmake Channel ( host : ĠString , Ġport : ĠInt ): ĠManaged Channel Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" creating Ġan Ġin secure Ġchannel Ġto Ġ$ host :$ port " Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠManaged Channel Builder . for Address ( host , Ġport ). use Pl aintext (). build () ĊĠĠĠ Ġ} Ċ } Ċ