/* Ċ Ġ* Ġ ĠNext cloud ĠAndroid ĠLibrary Ġis Ġavailable Ġunder ĠMIT Ġlicense Ċ Ġ* Ċ Ġ* Ġ Ġ@ author ĠÃ ģ l var o ĠB rey ĠV il as Ċ Ġ* Ġ ĠCopyright Ġ( C ) Ġ 2 0 2 2 ĠÃ ģ l var o ĠB rey ĠV il as Ċ Ġ* Ġ ĠCopyright Ġ( C ) Ġ 2 0 2 2 ĠNext cloud ĠGmbH Ċ Ġ* Ċ Ġ* Ġ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* Ġ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġ Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* Ġ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , Ċ Ġ* Ġ ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF Ċ Ġ* Ġ ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND Ċ Ġ* Ġ ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS Ċ Ġ* Ġ ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN Ċ Ġ* Ġ ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN Ċ Ġ* Ġ ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* Ġ ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . next cloud . common Ċ Ċ import Ġcom . own cloud . android . lib . common . utils . Log _ OC Ċ import Ġokhttp 3 . Connection Pool Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . net . Socket TimeoutException Ċ Ċ class ĠIPv 4 Fallback Interceptor ( private Ġval Ġconnection Pool : ĠConnection Pool ) Ġ: ĠInter ceptor Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" IPv 4 Fallback Interceptor " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSERVER _ ERROR _ RANGE Ġ= Ġ 5 0 0 .. 5 9 9 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Too Generic Exception Ca ught ") ĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġchain . proceed ( request ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhostname Ġ= Ġrequest . url . host ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code Ġin ĠSERVER _ ERROR _ RANGE Ġ&& ĠD N SC ache . is IPV 6 First ( hostname )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog _ OC . d ( TAG , Ġ" Response Ġerror Ġwith ĠIPv 6 , Ġtrying ĠIPv 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry With IPv 4 ( hostname , Ġchain , Ġrequest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DN SC ache . is IPV 6 First ( hostname ) Ġ&& Ġ( e Ġis ĠSocket TimeoutException Ġ|| Ġe Ġis ĠConnect Exception )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġretry With IPv 4 ( hostname , Ġchain , Ġrequest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretry With IPv 4 ( ĊĠĠĠĠĠĠĠ Ġhostname : ĠString , ĊĠĠĠĠĠĠĠ Ġchain : ĠInter ceptor . Chain , ĊĠĠĠĠĠĠĠ Ġrequest : ĠRequest ĊĠĠĠ Ġ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ ĠLog _ OC . d ( TAG , Ġ" Error Ġwith ĠIPv 6 , Ġtrying ĠIPv 4 ") ĊĠĠĠĠĠĠĠ ĠD N SC ache . set IP Version Preference ( hostname , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġconnection Pool . ev ict All () ĊĠĠĠĠĠĠĠ Ġreturn Ġchain . proceed ( request ) ĊĠĠĠ Ġ} Ċ } Ċ