module hunt.http.codec.websocket.utils.MaskedByteBuffer; import hunt.container.ByteBuffer; class MaskedByteBuffer { private enum byte[] mask = [0x00, cast(byte) 0xF0, 0x0F, cast(byte) 0xFF]; static void putMask(ByteBuffer buffer) { buffer.put(mask, 0, mask.length); } static void putPayload(ByteBuffer buffer, byte[] payload) { size_t len = payload.length; for (size_t i = 0; i < len; i++) { buffer.put(cast(byte) (payload[i] ^ mask[i % 4])); } } static void putPayload(ByteBuffer buffer, ByteBuffer payload) { int len = payload.remaining(); for (int i = 0; i < len; i++) { buffer.put(cast(byte) (payload.get() ^ mask[i % 4])); } } }