package Ġcom . on eli ang . k tx . util . common Ċ Ċ import Ġcom . on eli ang . k tx . util . logging . Logger Manager Ċ import Ġkotlin . math . ceil Ċ Ċ object ĠPiece Util Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger Manager . getLogger ( Piece Util :: class ) ĊĠĠĠ Ġfun Ġsplit ( byteArray : ĠByteArray , Ġpiece Size : ĠInt , Ġpiece Index : ĠInt ): ĠPair < ByteArray , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠbyteArray Total Size Ġ= ĠbyteArray . size ĊĠĠĠĠĠĠĠ Ġval Ġpiece Count Ġ= Ġceil ( byteArray Total Size . toDouble () Ġ/ Ġpiece Size ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( piece Count Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( byteArray , Ġpiece Count ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp Piece Index Ġ= Ġpiece Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġif Ġ( temp Piece Index Ġ< Ġpiece Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpiece Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{// last Ġpiece ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Piece Index Ġ= Ġpiece Count Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbyteArray Total Size Ġ- Ġtemp Piece Index Ġ* Ġpiece Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpiece ByteArray Ġ= ĠByteArray ( length ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( byteArray , Ġtemp Piece Index Ġ* Ġpiece Size , Ġpiece ByteArray , Ġ 0 , Ġlength ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug ( String . format (" piece Ġcount :% s , Ġpiece Ġindex :% s , Ġlength :% s , Ġpiece Ġmd 5 :% s ", Ġpiece Count , Ġtemp Piece Index , Ġlength , Ġpiece ByteArray . MD 5 String ())) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( piece ByteArray , Ġpiece Count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsplit ( byteArray : ĠByteArray , Ġpiece Size : ĠInt , Ġsplit Processor : Ġ( piece ByteArray : ĠByteArray , Ġpiece Count : ĠInt , Ġpiece Index : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠbyteArray Total Size Ġ= ĠbyteArray . size ĊĠĠĠĠĠĠĠ Ġval Ġpiece Count Ġ= Ġceil ( byteArray Total Size . toDouble () Ġ/ Ġpiece Size ). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( piece Count Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Processor ( byteArray , Ġ 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpiece Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġif Ġ( i Ġ< Ġpiece Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpiece Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbyteArray Total Size Ġ- Ġi Ġ* Ġpiece Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpiece ByteArray Ġ= ĠByteArray ( length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( byteArray , Ġi Ġ* Ġpiece Size , Ġpiece ByteArray , Ġ 0 , Ġlength ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug ( String . format (" piece Ġcount :% s , Ġpiece Ġindex :% s , Ġlength :% s , Ġpiece Ġmd 5 :% s ", Ġpiece Count , Ġi , Ġlength , Ġpiece ByteArray . MD 5 String ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Processor ( piece ByteArray , Ġpiece Count , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Ġbyte Ġarray Ġto Ġresponse Ġresult :% s , Ġcost :% s , Ġmd 5 :% s ", Ġresult , Ġ( System . currentTimeMillis () Ġ- Ġbegin ), ĠbyteArray . MD 5 String ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmerge ( app ended ByteArray : ĠByteArray , Ġpiece ByteArray : ĠByteArray , Ġpiece Count : ĠInt , Ġpiece Index : ĠInt ): ĠPair < Boolean , ĠByteArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug ( String . format (" piece Ġcount :% s , Ġpiece Ġindex :% s , Ġlength :% s , Ġpiece Ġmd 5 :% s ", Ġpiece Count , Ġpiece Index , Ġpiece ByteArray . size , Ġpiece ByteArray . MD 5 String ())) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( piece Count Ġ== Ġ 1 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhole ByteArray Ġ= Ġpiece ByteArray ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( true , Ġpiece ByteArray ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Size Ġ= Ġappended ByteArray . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Response ByteArray Ġ= ĠByteArray ( current Size Ġ+ Ġpiece ByteArray . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( app ended ByteArray , Ġ 0 , Ġnew Response ByteArray , Ġ 0 , Ġcurrent Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( piece ByteArray , Ġ 0 , Ġnew Response ByteArray , Ġcurrent Size , Ġpiece ByteArray . size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhole ByteArray Ġ= Ġnew Response ByteArray Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpiece Count Ġ- Ġ 1 Ġ== Ġpiece Index ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( piece Count Ġ- Ġ 1 Ġ== Ġpiece Index , Ġnew Response ByteArray ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }