package Ġplay torrent . com . play torrent Ċ Ċ import Ġandroid . util . Log Ċ import Ġjava . nio . ByteBuffer Ċ Ċ /** Ċ Ġ* ĠPiece Ġmessage Ċ Ġ*/ Ċ class ĠPiece Message ( val Ġpiece Index : Int , Ġval Ġoffset : Long , Ġval Ġbuffer : ByteArray ): ĠI Bit Message Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Piece Message " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEBUG Ġ= ĠBuild Config . DEBUG ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBASE _ MESSAGE _ LENGTH Ġ= Ġ 1 3 ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse ( message : ByteBuffer , Ġlength : Int ): ĠPiece Message ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( length Ġ<= ĠBASE _ MESSAGE _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Invalid Ġpiece Ġmessage Ġlength Ġ[$ length ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message . remaining () Ġ!= Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Expected Ġbytes Ġis Ġ$ length Ġbut Ġremaining Ġis Ġ${ message . remaining () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpiece Index Ġ= Ġmessage . int ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġmessage . int ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( message . remaining ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . get ( buffer , Ġ 0 , Ġmessage . remaining ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" parsed Ġfinished . ĠPayload Ġlength Ġis Ġ${ buffer . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPiece Message ( piece Index , Ġoffset . to Long (), Ġbuffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMessage (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠByteBuffer . allocate Direct ( BASE _ MESSAGE _ LENGTH Ġ+ Ġbuffer . size ) ĊĠĠĠĠĠĠĠ Ġmessage . put Int ( 1 3 ) Ġ// Ġ 4 Ġbytes ĊĠĠĠĠĠĠĠ Ġmessage . put ( IB it Message . Type . PI E CE . value . to Byte ()) Ġ// Ġ 1 Ġbyte ĊĠĠĠĠĠĠĠ Ġmessage . put Int ( piece Index ) Ġ// Ġ 4 Ġbytes ĊĠĠĠĠĠĠĠ Ġmessage . put Int ( offset . toInt ()) Ġ// Ġ 4 Ġbytes ĊĠĠĠĠĠĠĠ Ġmessage . put Int ( buffer . size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage . array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType (): ĠI Bit Message . Type Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠI Bit Message . Type . PI E CE ĊĠĠĠ Ġ} Ċ } Ċ