/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 , ĠMoment um ĠIde as ĠCo . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġb loom box . client . interfaces Ċ Ċ import Ġb loom box . client . internals . mt ls . Client Credentials Ċ import Ġb loom box . client . internals . rpc . RPC Client Ċ import Ġio . netty . handler . ssl . Client Auth Ċ import Ġjava . io . InputStream Ċ import Ġjava . time . Duration Ċ import Ġjava . util . concurrent . Executor Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ /** Ċ Ġ* ĠSpecifies Ġthe Ġinterface Ġthat Ġa Ġservice ĠRPC Ġclient Ġmust Ġcomp ly Ġwith , Ġto Ġmake Ġit Ġusable Ġand Ġtest able Ġby Ġthe Ġgreater ĠAPI Ċ Ġ* Ġclient Ġsystem . ĠUnder lying Ġtransport / connection Ġdetails Ġare Ġalso Ġmade Ġavailable Ġvia Ġthis Ġinterface . Ċ Ġ*/ Ċ internal Ġinterface ĠService Client Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠHost Ġto Ġsend ĠRPC s Ġto . ĠThis Ġis Ġa Ġregular Ġhostname Ġstring , Ġand Ġcan Ġbe Ġa Ġraw ĠIP Ġaddress Ġ( in Ġthe Ġcase Ġof Ġ" 1 2 7 . 0 . 0 . 1 ") ĊĠĠ Ġ* Ġor Ġa ĠDNS Ġname . ĊĠĠ Ġ*/ ĊĠ Ġval Ġhost : ĠString ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠPort Ġto Ġsend ĠRPC s Ġto . ĠIn Ġsome Ġcircumstances Ġthis Ġmay Ġbe Ġa Ġservice - specific Ġvalue , Ġand Ġso Ġit Ġis Ġspecified Ġhere , Ġbut ĊĠĠ Ġ* Ġby Ġand Ġlarge ĠRPC Ġtraffic Ġoccurs Ġover Ġports Ġ 4 4 3 Ġand Ġ 4 6 5 . ĊĠĠ Ġ*/ ĊĠ Ġval Ġport : ĠInt ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAPI Ġkey Ġin Ġuse Ġby Ġthis Ġclient . ĠIdent ifies Ġthe Ġimplementing / integr ating Ġproject Ġthat Ġis Ġoperating Ġthis Ġclient . ĠCan ĊĠĠ Ġ* Ġbe Ġobtained Ġvia Ġthe ĠB loom box ĠDashboard Ġor Ġa Ġproperly Ġintegrated ĠGoogle ĠCloud ĠPlatform Ġproject . ĊĠĠ Ġ*/ ĊĠ Ġval ĠapiKey : ĠString ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠExecutor Ġfor Ġfollow up Ġand ĠRPC Ġclient Ġactivities . ĠDefaults Ġto Ġa Ġsingle - threaded Ġexecutor Ġthat Ġconduct s ĠAPI Ġrequests ĊĠĠ Ġ* Ġand Ġany Ġrelated Ġfollow up Ġin Ġa Ġbackground Ġthread . ĊĠĠ Ġ*/ ĊĠ Ġval Ġexecutor : ĠExecutor ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠRPC Ġrequest Ġtimeout Ġto Ġapply . ĠAfter Ġthis Ġduration , Ġan Ġin - flight ĠRPC Ġrequest Ġwith Ġno Ġserver Ġresponse Ġdata Ġwill Ġbe ĊĠĠ Ġ* Ġconsidered Ġfailed Ġdue Ġto Ġa Ġ" time - out ." ĊĠĠ Ġ*/ ĊĠ Ġval Ġtimeout : ĠDuration ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠTransport Ġmode Ġsetting . ĠAvailable Ġoptions Ġare Ġ" INTERNAL " Ġand Ġ" SECURE ." ĠIn Ġnearly Ġall Ġcircumstances , Ġincluding ĊĠĠ Ġ* Ġnetwork - internal Ġtraffic , Ġ" SECURE " Ġshould Ġbe Ġused , Ġwhich Ġen forces Ġend - to - end ĠSSL . Ġ" INTERNAL " Ġmode Ġis Ġonly Ġuseful ĊĠĠ Ġ* Ġduring Ġdevelopment Ġand Ġfor Ġmachine - internal Ġtraffic . ĊĠĠ Ġ*/ ĊĠ Ġval Ġtransport Mode : ĠRPC Client . Transport Mode ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠClient ĠTLS Ġauth Ġmode . ĠThis Ġspecifies Ġwhether Ġclient Ġauth Ġis Ġenabled Ġor Ġnot Ġfor Ġa Ġgiven ĠAPI Ġclient Ġobject . ĠThe ĊĠĠ Ġ* Ġdefault Ġvalue Ġis Ġno Ġclient Ġauth . ĠClient Ġauthentication Ġ( m TLS ) Ġis Ġrequired Ġin Ġsome Ġcircumstances . ĊĠĠ Ġ*/ ĊĠ Ġval Ġclient Auth : ĠClient Auth ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠClient Ġcredential Ġinformation . ĠThis Ġspecifies Ġthe Ġclient - side Ġportion Ġof Ġm TLS Ġ( Mut ual ĠTransport - Layer ĠSecurity ) ĊĠĠ Ġ* Ġcredential Ġdata . ĠIn Ġparticular , Ġthis Ġincludes Ġa Ġprivate Ġkey Ġand Ġidentity Ġcertificate Ġchain . ĠFirst Ġposition Ġis Ġthe ĊĠĠ Ġ* Ġprivate Ġclient Ġkey , Ġsecond Ġis Ġthe Ġcertificate . ĊĠĠ Ġ*/ ĊĠ Ġval Ġclient Credentials : ĠClient Credentials ? ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAuthor ity Ġroots Ġto Ġaccept Ġfrom Ġthe Ġclient - side . ĠDefaults Ġto Ġthe Ġembedded Ġ' authority - roots . pem ', Ġwhich Ġincludes ĊĠĠ Ġ* Ġiss uing Ġauthority Ġcertificates Ġfor Ġall ĠB loom box Ġendpoints . ĊĠĠ Ġ*/ ĊĠ Ġval Ġclient Authority Roots : ĠInputStream ? ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠUtility Ġfunction Ġto Ġclose Ġany Ġexisting Ġclient Ġconnection . ĠOff ers Ġa Ġtimeout Ġand Ġ" soft " Ġshutdown Ġfunctionality , Ġwhich ĊĠĠ Ġ* Ġwaits Ġfor Ġany Ġpending Ġrequest Ġtraffic Ġto Ġfinish Ġbefore Ġterminating . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġclose ( soft : ĠBoolean , Ġblock : ĠBoolean , Ġtimeout : ĠPair < Long , ĠTimeUnit >) Ċ } Ċ