/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠPeter ĠKen ji ĠY aman aka Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . py am soft . py d roid . bootstrap . network Ċ Ċ import Ġandroid . net . Traffic Stats Ċ import Ġandroidx . annotation . Check Result Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . Socket Ċ import Ġjavax . net . Socket Factory Ċ Ċ /** ĠDeleg ates Ġwhich Ġtags Ġsockets Ġfor ĠAndroid ĠO ĠStrict - Mode Ġcompatibility Ġ*/ Ċ public Ġopen Ġclass ĠDeleg ating Socket Factory Ċ protected Ġconstructor ( private Ġval Ġdelegate : ĠSocket Factory ) Ġ: ĠSocket Factory () Ġ{ ĊĊĠ Ġ/** ĠSee Ġ[ Socket Factory . create Socket ] Ġ*/ ĊĠ Ġfinal Ġoverride Ġfun Ġcreate Socket (): ĠSocket Ġ{ ĊĠĠĠ Ġreturn Ġdelegate . create Socket (). also Ġ{ Ġconfigure Socket ( it ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠSee Ġ[ Socket Factory . create Socket ] Ġ*/ ĊĠ Ġfinal Ġoverride Ġfun Ġcreate Socket ( host : ĠString ?, Ġport : ĠInt ): ĠSocket Ġ{ ĊĠĠĠ Ġreturn Ġdelegate . create Socket ( host , Ġport ). also Ġ{ Ġconfigure Socket ( it ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠSee Ġ[ Socket Factory . create Socket ] Ġ*/ ĊĠ Ġfinal Ġoverride Ġfun Ġcreate Socket ( ĊĠĠĠĠĠ Ġhost : ĠString ?, ĊĠĠĠĠĠ Ġport : ĠInt , ĊĠĠĠĠĠ Ġlocal Address : ĠInet Address ?, ĊĠĠĠĠĠ Ġlocal Port : ĠInt ĊĠ Ġ): ĠSocket Ġ{ ĊĠĠĠ Ġreturn Ġdelegate . create Socket ( host , Ġport , Ġlocal Address , Ġlocal Port ). also Ġ{ Ġconfigure Socket ( it ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠSee Ġ[ Socket Factory . create Socket ] Ġ*/ ĊĠ Ġfinal Ġoverride Ġfun Ġcreate Socket ( host : ĠInet Address ?, Ġport : ĠInt ): ĠSocket Ġ{ ĊĠĠĠ Ġreturn Ġdelegate . create Socket ( host , Ġport ). also Ġ{ Ġconfigure Socket ( it ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠSee Ġ[ Socket Factory . create Socket ] Ġ*/ ĊĠ Ġfinal Ġoverride Ġfun Ġcreate Socket ( ĊĠĠĠĠĠ Ġhost : ĠInet Address ?, ĊĠĠĠĠĠ Ġport : ĠInt , ĊĠĠĠĠĠ Ġlocal Address : ĠInet Address ?, ĊĠĠĠĠĠ Ġlocal Port : ĠInt ĊĠ Ġ): ĠSocket Ġ{ ĊĠĠĠ Ġreturn Ġdelegate . create Socket ( host , Ġport , Ġlocal Address , Ġlocal Port ). also Ġ{ Ġconfigure Socket ( it ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠTag Ġeach Ġsocket Ġwith Ġtraffic Ġstats Ġfor ĠStrict Mode Ġcompliance Ġon ĠAndroid ĠO Ġ*/ ĊĠ Ġ@ Check Result ĊĠ Ġprotected Ġopen Ġfun Ġconfigure Socket ( socket : ĠSocket ): ĠSocket Ġ{ ĊĠĠĠ Ġ// ĠOn ĠAndroid ĠO Ġand Ġabove , ĠStrict Mode Ġcauses Ġunt agged Ġsocket Ġerrors ĊĠĠĠ Ġ// ĠSetting Ġthe ĠThread Stats Tag Ġseems Ġto Ġfix Ġit ĊĠĠĠ ĠTraffic Stats . set Thread Stats Tag ( 1 ) ĊĊĠĠĠ Ġreturn Ġsocket ĊĠ Ġ} ĊĊĠ Ġpublic Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġ/** ĠCreate Ġa Ġnew Ġsocket Ġfactory Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Check Result ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġpublic Ġfun Ġcreate ( factory : ĠSocket Factory Ġ= ĠgetDefault ()): ĠSocket Factory Ġ{ ĊĠĠĠĠĠ Ġreturn ĠDeleg ating Socket Factory ( factory ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ