![thanwords24@gmail.com](/assets/img/avatar_default.png)
24 changed files with 369 additions and 2411 deletions
@ -0,0 +1,49 @@ |
|||||||
|
import { nextRandomInt } from "../../bin_utils"; |
||||||
|
import { Codec } from "./codec"; |
||||||
|
|
||||||
|
class IntermediatePacketCodec implements Codec { |
||||||
|
public tag = 0xee; |
||||||
|
public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]); |
||||||
|
|
||||||
|
public encodePacket(data: Uint8Array) { |
||||||
|
let len = data.byteLength; |
||||||
|
let header = new Uint8Array(new Uint32Array([len]).buffer); |
||||||
|
|
||||||
|
return header.concat(data); |
||||||
|
} |
||||||
|
|
||||||
|
public readPacket(data: Uint8Array) { |
||||||
|
let length = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); |
||||||
|
|
||||||
|
return data.slice(4, 4 + length); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/* Data packets are aligned to 4bytes. This codec adds random bytes of size |
||||||
|
from 0 to 3 bytes, which are ignored by decoder. */ |
||||||
|
class PaddedIntermediatePacketCodec extends IntermediatePacketCodec { |
||||||
|
public tag = 0xdd; |
||||||
|
public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]); |
||||||
|
|
||||||
|
public encodePacket(data: Uint8Array) { |
||||||
|
let padding = new Uint8Array(nextRandomInt(3)).randomize(); |
||||||
|
let len = data.byteLength + padding.byteLength; |
||||||
|
|
||||||
|
let header = new Uint8Array(new Uint32Array([len]).buffer); |
||||||
|
console.log('encodePacket', padding, len, data, header); |
||||||
|
|
||||||
|
return header.concat(data, padding); |
||||||
|
} |
||||||
|
|
||||||
|
public readPacket(data: Uint8Array) { |
||||||
|
let padLength = data.byteLength % 4; |
||||||
|
if(padLength > 0) { |
||||||
|
return data.slice(4, -padLength); |
||||||
|
} |
||||||
|
|
||||||
|
return data.slice(4); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export default new IntermediatePacketCodec(); |
||||||
|
//export default new PaddedIntermediatePacketCodec();
|
Loading…
Reference in new issue