package Ġeu . kan ade . t 4 chi y omi . network Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġokhttp 3 .* Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . Socket Ċ import Ġjava . net . Unknown Host Exception Ċ import Ġjava . security . Key Management Exception Ċ import Ġjava . security . KeyStore Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjavax . net . ssl .* Ċ Ċ class ĠNetwork Helper ( context : ĠContext ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcache Dir Ġ= ĠFile ( context . cacheDir , Ġ" network _ cache ") ĊĊĠĠĠ Ġprivate Ġval Ġcache Size Ġ= Ġ 5 L Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 Ġ// Ġ 5 ĠM iB ĊĊĠĠĠ Ġval Ġcookie Manager Ġ= ĠAndroid Cookie Jar ( context ) ĊĊĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cookie Jar ( cookie Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache ( Cache ( cacheDir , Ġcache Size )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable TLS 1 2 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġval Ġcloud flare Client Ġ= Ġclient . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( Cloud flare Interceptor ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun ĠOk HttpClient . Builder . enable TLS 1 2 (): ĠOk HttpClient . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ> ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrust ManagerFactory Ġ= ĠTrust ManagerFactory . getInstance ( Trust ManagerFactory . getDefault Algorithm ()) ĊĠĠĠĠĠĠĠ Ġtrust ManagerFactory . init ( null Ġas ĠKey Store ?) ĊĠĠĠĠĠĠĠ Ġval Ġtrust Managers Ġ= Ġtrust ManagerFactory . trust Managers ĊĠĠĠĠĠĠĠ Ġif Ġ( trust Managers . size Ġ== Ġ 1 Ġ&& Ġtrust Managers [ 0 ] Ġis ĠX 5 0 9 Trust Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠTL SS ocket Factory Ġ@ Throws ( Key Management Exception :: class , ĠNoSuch AlgorithmException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor () Ġ: ĠSSL Socket Factory () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġinternal SS LS ocket Factory : ĠSSL Socket Factory ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠSSL Context . getInstance (" TLS ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . init ( null , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal SS LS ocket Factory Ġ= Ġcontext . socket Factory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetDefault Cipher Su ites (): ĠArray < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinternal SS LS ocket Factory . default Cipher Su ites ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Supported Cipher Su ites (): ĠArray < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinternal SS LS ocket Factory . supported Cipher Su ites ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Socket (): ĠSocket ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġenable TLS On Socket ( internal SS LS ocket Factory . create Socket ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Socket ( s : ĠSocket , Ġhost : ĠString , Ġport : ĠInt , Ġauto Close : ĠBoolean ): ĠSocket ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġenable TLS On Socket ( internal SS LS ocket Factory . create Socket ( s , Ġhost , Ġport , Ġauto Close )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class , ĠUnknown Host Exception :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Socket ( host : ĠString , Ġport : ĠInt ): ĠSocket ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġenable TLS On Socket ( internal SS LS ocket Factory . create Socket ( host , Ġport )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class , ĠUnknown Host Exception :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Socket ( host : ĠString , Ġport : ĠInt , Ġlocal Host : ĠInet Address , Ġlocal Port : ĠInt ): ĠSocket ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġenable TLS On Socket ( internal SS LS ocket Factory . create Socket ( host , Ġport , Ġlocal Host , Ġlocal Port )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Socket ( host : ĠInet Address , Ġport : ĠInt ): ĠSocket ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġenable TLS On Socket ( internal SS LS ocket Factory . create Socket ( host , Ġport )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Socket ( address : ĠInet Address , Ġport : ĠInt , Ġlocal Address : ĠInet Address , Ġlocal Port : ĠInt ): ĠSocket ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġenable TLS On Socket ( internal SS LS ocket Factory . create Socket ( address , Ġport , Ġlocal Address , Ġlocal Port )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġenable TLS On Socket ( socket : ĠSocket ?): ĠSocket ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( socket Ġ!= Ġnull Ġ&& Ġsocket Ġis ĠSSL Socket ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . enabled Protocols Ġ= Ġsocket . supported Protocols ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsocket ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġssl Socket Factory ( TL SS ocket Factory (), Ġtrust Managers [ 0 ] Ġas ĠX 5 0 9 Trust Manager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġspec Compat Ġ= ĠConnection Spec . Builder ( Connection Spec . MO DER N _ TLS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. tls Versions ( Tls Version . TLS _ 1 _ 2 , ĠT ls Version . TLS _ 1 _ 1 , ĠT ls Version . TLS _ 1 _ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cipher Su ites ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Connection Spec . MO DER N _ TLS . cipher Su ites (). or Empty (). to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCipher Suite . TLS _ ECD HE _ ECD SA _ WITH _ AES _ 1 2 8 _ CBC _ SHA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCipher Suite . TLS _ ECD HE _ ECD SA _ WITH _ AES _ 2 5 6 _ CBC _ SHA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġspecs Ġ= ĠlistOf ( spec Compat , ĠConnection Spec . CLE ART EXT ) ĊĠĠĠĠĠĠĠ Ġconnection Specs ( specs ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ