// ĠCopyright Ġ 2 0 2 1 ĠGoogle ĠLLC Ċ // Ċ // Ġ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 . google . android . libraries . car . trust agent Ċ Ċ import Ġcom . google . android . comp anion protos . Capabilities Exchange Proto . Capabilities Exchange . O ob Channel Type Ċ import Ġcom . google . android . libraries . car . trust agent . ble message stream . Bluetooth ConnectionManager Ċ import Ġcom . google . android . libraries . car . trust agent . util . lo ge Ċ Ċ /** ĠHandles Ġversion Ġand Ġcapabilities Ġexchange . Ġ*/ Ċ internal Ġclass ĠConnection Resolver () Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Connection Resolver " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRes olves Ġversion Ġby Ġex changing Ġversion Ġwith Ġ[ manager ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠReturns Ġ[ Resolved Connection ] Ġbased Ġon Ġthe Ġmessage Ġversion Ġof ĠI HU ; Ġ` null ` Ġif Ġlocal Ġand Ġremote ĊĠĠĠĠ Ġ* Ġversions Ġare Ġincompatible Ġor Ġan Ġerror Ġoccurred . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġresolve ( ĊĠĠĠĠĠ Ġmanager : ĠBluetooth ConnectionManager , ĊĠĠĠĠĠ Ġo ob Data : ĠO ob Data ? Ġ= Ġnull , ĊĠĠĠĠĠ Ġis Associ ating : ĠBoolean , ĊĠĠĠ Ġ): ĠResolved Connection ? Ġ{ ĊĠĠĠĠĠ Ġval Ġresolved Version Ġ= ĠVersion Resolver . resolve ( manager ) ĊĠĠĠĠĠ Ġif Ġ( resolved Version Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo ge ( TAG , Ġ" Could Ġnot Ġexchange Ġversion .") ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġresolved Channel Types Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( Capability Resolver . should Exchange Capabilities ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Associ ating Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolved Version . security Version ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠAttempt Ġto Ġuse ĠO OB Ġassociation Ġover ĠRF COMM Ġwhen Ġo ob Data Ġis Ġnot Ġavailable . ĠOtherwise , ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġskip ĠRF COMM Ġbecause Ġbefore Ġsecurity ĠV 4 , ĠI HU Ġwill Ġstuck Ġat Ġestablish ing ĠRF COMM Ġchannel ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġwhile Ġmobile Ġsends Ġthe Ġencryption Ġinit Ġmessage , Ġwhich Ġwill Ġbe Ġignored Ġby ĠI HU . ĊĠĠĠĠĠĠĠĠĠ Ġval Ġsupported Channel Types Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( oob Data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( O ob Channel Type . BT _ RF COMM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( O ob Channel Type . PRE _ ASS OCI ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĠCap ability Resolver . resolve ( manager , Ġsupported Channel Types ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn ĠResolved Connection ( ĊĠĠĠĠĠĠĠ Ġresolved Version . message Version , ĊĠĠĠĠĠĠĠ Ġresolved Version . security Version , ĊĠĠĠĠĠĠĠ Ġresolved Channel Types ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠResolved Connection ( ĊĠ Ġval Ġmessage Version : ĠInt , ĊĠ Ġval Ġsecurity Version : ĠInt , ĊĠ Ġval Ġo ob Channels : ĠList < O ob Channel Type > Ċ ) Ċ