package Ġcom . flex so . flex same . services Ċ Ċ import Ġandroid . n fc . car dem ulation . Host Ap du Service Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġcom . flex so . flex same . utils . ByteArray Hex Util Ċ import Ġjava . nio . ByteBuffer ĊĊ Ċ class ĠHost Card Em ulator Service Ġ: ĠHost Ap du Service () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon De activated ( reason : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" De activated : Ġ" Ġ+ Ġreason ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Command Ap du ( command Ap du : ĠByteArray ?, Ġextras : ĠBundle ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" AP DU Ġprocess Ġcommand :") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( command Ap du Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray Hex Util . hex StringTo ByteArray ( STATUS _ FAILED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhex Command Ap du Ġ= ĠByteArray Hex Util . to Hex ( command Ap du ) ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġhex Command Ap du ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( hex Command Ap du . length Ġ< ĠMIN _ AP DU _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray Hex Util . hex StringTo ByteArray ( STATUS _ FAILED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( hex Command Ap du . substring ( 0 , Ġ 2 ) Ġ!= ĠDEFAULT _ CLA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray Hex Util . hex StringTo ByteArray ( CLA _ NOT _ SUPPORTED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( hex Command Ap du . substring ( 2 , Ġ 4 ) Ġ!= ĠSELECT _ INS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray Hex Util . hex StringTo ByteArray ( INS _ NOT _ SUPPORTED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( hex Command Ap du . substring ( 1 0 , Ġ 2 4 ) Ġ== ĠA ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent UserId Ġ= ĠCurrent Key . userId . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent DeviceId Ġ= ĠCurrent Key . deviceId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Key Token Ġ= ĠCurrent Key . current Key Token ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġ Ġcurrent UserId . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ("; ". toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( current DeviceId . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ("; ". toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( current Key Token . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( ByteArray Hex Util . hex StringTo ByteArray ( STATUS _ SUCCESS )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" SEND ING ĠRESP ONSE ĠAP DU :") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" userId Ġ= Ġ$ current UserId Ġ; ĠdeviceId Ġ= Ġ$ current DeviceId ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġtoken Ġ= Ġ$ current Key Token ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" FAILED ĠRESP ONSE ĠAP DU ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray Hex Util . hex StringTo ByteArray ( STATUS _ FAILED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Host ĠCard ĠEm ulator " ĊĠĠĠĠĠĠĠ Ġval ĠSTATUS _ SUCCESS Ġ= Ġ" 9 0 0 0 " ĊĠĠĠĠĠĠĠ Ġval ĠSTATUS _ FAILED Ġ= Ġ" 6 F 0 0 " ĊĠĠĠĠĠĠĠ Ġval ĠCLA _ NOT _ SUPPORTED Ġ= Ġ" 6 E 0 0 " ĊĠĠĠĠĠĠĠ Ġval ĠIN S _ NOT _ SUPPORTED Ġ= Ġ" 6 D 0 0 " ĊĠĠĠĠĠĠĠ Ġval ĠA ID Ġ= Ġ" A 0 0 0 0 0 0 1 0 2 0 3 0 4 " ĊĠĠĠĠĠĠĠ Ġval ĠSELECT _ INS Ġ= Ġ" A 4 " ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ CLA Ġ= Ġ" 0 0 " ĊĠĠĠĠĠĠĠ Ġval ĠMIN _ AP DU _ LENGTH Ġ= Ġ 1 2 ĊĠĠĠ Ġ} Ċ } ĊĊ