Skip to content

Commit

Permalink
Removed remnants of own MessagePack codec
Browse files Browse the repository at this point in the history
  • Loading branch information
RoganDawes committed Feb 4, 2022
1 parent aab91b1 commit af477ea
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 308 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.sensepost.mallet.handlers.messagepack;

import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.msgpack.jackson.dataformat.MessagePackFactory;

Expand All @@ -14,7 +11,6 @@
import io.netty.buffer.ByteBufInputStream;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.util.CharsetUtil;

class MessagePackDecoder extends ByteToMessageDecoder {

Expand All @@ -23,137 +19,12 @@ class MessagePackDecoder extends ByteToMessageDecoder {
public MessagePackDecoder() {
}

/*
private Object readValue(ByteBuf in) {
int type = in.readUnsignedByte();
if ((type & 0x80) == 0) { // positive fixint
return Integer.valueOf(type & 0x7F);
} else if ((type & 0xF0) == 0x80) { // fixmap
int len = (type & 0xF);
Map<Object, Object> map = new HashMap<>();
for (int i=0; i<len; i++) {
map.put(readValue(in), readValue(in));
}
return map;
} else if ((type & 0xF0) == 0x90) { // fixarray
int len = (type & 0xF);
List<Object> list = new LinkedList<>();
for (int i=0; i<len; i++) {
list.add(readValue(in));
}
return list;
} else if ((type & 0xE0) == 0xa0) { // fixstr
int len = (type & 0x1F);
return in.readCharSequence(len, CharsetUtil.UTF_8);
} else if (type == 0xc0) { // nil
return null;
} else if (type == 0xc1) { // never used
throw new UnsupportedOperationException();
} else if (type == 0xc2) { // false
return Boolean.FALSE;
} else if (type == 0xc3) { // true
return Boolean.TRUE;
} else if (type == 0xc4) { // bin 8
int len = in.readUnsignedByte();
byte[] bytes = new byte[len];
in.readBytes(bytes);
return bytes;
} else if (type == 0xc5) { // bin 16
int len = in.readUnsignedShort();
byte[] bytes = new byte[len];
in.readBytes(bytes);
return bytes;
} else if (type == 0xc6) { // bin 32
long len = in.readUnsignedInt();
byte[] bytes = new byte[(int)len];
in.readBytes(bytes);
return bytes;
} else if (type == 0xc7) { // ext 8
throw new UnsupportedOperationException();
} else if (type == 0xc8) { // ext 16
throw new UnsupportedOperationException();
} else if (type == 0xc9) { // ext 32
throw new UnsupportedOperationException();
} else if (type == 0xca) { // float 32
return in.readFloat();
} else if (type == 0xcb) { // float 64
return in.readDouble();
} else if (type == 0xcc) { // uint8
return in.readUnsignedByte();
} else if (type == 0xcd) { // uint16
return in.readUnsignedShort();
} else if (type == 0xce) { // uint32
return in.readUnsignedInt();
} else if (type == 0xcf) { // uint64
throw new UnsupportedOperationException();
} else if (type == 0xd0) { // int8
return in.readByte();
} else if (type == 0xd1) { // int16
return in.readShort();
} else if (type == 0xd2) { // int32
return in.readInt();
} else if (type == 0xd3) { // int64
throw new UnsupportedOperationException();
} else if (type == 0xd4) { // fixext1
throw new UnsupportedOperationException();
} else if (type == 0xd5) { // fixext2
throw new UnsupportedOperationException();
} else if (type == 0xd6) { // fixext4
throw new UnsupportedOperationException();
} else if (type == 0xd7) { // fixext8
throw new UnsupportedOperationException();
} else if (type == 0xd8) { // fixext16
throw new UnsupportedOperationException();
} else if (type == 0xd9) { // str8
int len = in.readUnsignedByte();
return in.readCharSequence(len, CharsetUtil.UTF_8).toString();
} else if (type == 0xda) { // str16
int len = in.readUnsignedShort();
return in.readCharSequence(len, CharsetUtil.UTF_8).toString();
} else if (type == 0xdb) { // str32
long len = in.readUnsignedInt();
return in.readCharSequence((int) len, CharsetUtil.UTF_8).toString();
} else if (type == 0xdc) { // array16
int len = in.readUnsignedShort();
List<Object> list = new LinkedList<>();
for (int i=0; i<len; i++) {
list.add(readValue(in));
}
return list;
} else if (type == 0xdd) { // array32
long len = in.readUnsignedInt();
List<Object> list = new LinkedList<>();
for (int i=0; i<len; i++) {
list.add(readValue(in));
}
return list;
} else if (type == 0xde) { // map16
int len = in.readUnsignedShort();
Map<Object, Object> map = new HashMap<>();
for (int i=0; i<len; i++) {
map.put(readValue(in), readValue(in));
}
return map;
} else if (type == 0xdf) { // map32
long len = in.readUnsignedInt();
Map<Object, Object> map = new HashMap<>();
for (int i=0; i<len; i++) {
map.put(readValue(in), readValue(in));
}
return map;
} else if ((type & 0xe0) == 0xe0) { // negative fixint
return - (32 - Integer.valueOf(type & 0x1F));
}
throw new UnsupportedOperationException();
}
*/
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
if (in.readableBytes() > 0) {
InputStream is = new ByteBufInputStream(in);
while (in.readableBytes() > 0) {
out.add(objectMapper.readValue(is, Object.class));
// out.add(readValue(in));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,198 +1,20 @@
package com.sensepost.mallet.handlers.messagepack;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.msgpack.jackson.dataformat.MessagePackFactory;

import com.fasterxml.jackson.databind.ObjectMapper;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import io.netty.util.CharsetUtil;

class MessagePackEncoder extends MessageToByteEncoder<Object> {

private ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory());
public MessagePackEncoder() {
}

/*
private void encodeByte(Byte v, ByteBuf out) {
if (v < 0) {
if(v >= -(1 << 5)) { // int5
out.writeByte(0xe0 | (32 + v));
} else {
out.writeByte(0xd0);
out.writeByte(v);
}
} else {
out.writeByte(v);
}
}
private void encodeShort(Short v, ByteBuf out) {
if (v >= Byte.MIN_VALUE && v <= Byte.MAX_VALUE) {
encodeByte(v.byteValue(), out);
} else if (v < Byte.MIN_VALUE) {
out.writeByte(0xd1);
out.writeShort(v);
} else if (v < (Byte.MAX_VALUE+1) * 2) {
out.writeByte(0xcc);
out.writeByte(v & 0xFF);
} else {
out.writeByte(0xcd);
out.writeShort(v);
}
}
private void encodeInt(Integer v, ByteBuf out) {
if (v >= Short.MIN_VALUE && v <= Short.MAX_VALUE) {
encodeShort(v.shortValue(), out);
} else if (v < Short.MIN_VALUE) {
out.writeByte(0xd2);
out.writeInt(v);
} else if (v < (Short.MAX_VALUE+1) * 2) {
out.writeByte(0xcd);
out.writeShort(v & 0xFFFF);
} else {
out.writeByte(0xce);
out.writeInt(v);
}
}
private void encodeLong(Long v, ByteBuf out) {
if (v >= Integer.MIN_VALUE && v <= Integer.MAX_VALUE) {
encodeInt(v.intValue(), out);
} else if (v < Integer.MIN_VALUE) {
out.writeByte(0xd3);
out.writeLong(v);
} else if (v < ((long)Integer.MAX_VALUE+1) * 2) {
out.writeByte(0xce);
out.writeInt((int)(v & 0xFFFFFFFF));
} else {
out.writeByte(0xcf);
out.writeLong(v);
}
}

private void encodeCharSequence(CharSequence cs, ByteBuf out) {
int len = cs.length();
if (len < Math.pow(2, 5)) {
out.writeByte(0xa0 | (len & 0x1F));
out.writeCharSequence(cs, CharsetUtil.UTF_8);
} else if (len < Math.pow(2, 8)) {
out.writeByte(0xd9);
out.writeByte((int)(len & 0xFF));
out.writeCharSequence(cs, CharsetUtil.UTF_8);
} else if (len < Math.pow(2, 16)) {
out.writeByte(0xda);
out.writeShort((int)(len & 0xFFFF));
out.writeCharSequence(cs, CharsetUtil.UTF_8);
} else if (len < Math.pow(2, 32)) {
out.writeByte(0xdb);
out.writeInt((int)(len & 0xFFFFFFFF));
out.writeCharSequence(cs, CharsetUtil.UTF_8);
}
public MessagePackEncoder() {
}

private void encodeList(List<Object> list, ByteBuf out) {
int len = list.size();
if (len < Math.pow(2, 4)) {
out.writeByte(0x90 | (int)(len & 0x0F));
} else if (len < Math.pow(2, 16)) {
out.writeByte(0xdc);
out.writeShort((int)(len & 0xFFFF));
} else if (len < Math.pow(2, 32)) {
out.writeByte(0xdd);
out.writeInt((int)(len & 0xFFFFFFFF));
}
Iterator<Object> it = list.iterator();
while (it.hasNext()) {
encode(it.next(), out);
}
}
private void encodeMap(Map<Object, Object> map, ByteBuf out) {
int len = map.size();
if (len < Math.pow(2, 4)) {
out.writeByte(0x80 | (int)(len & 0x0F));
} else if (len < Math.pow(2, 16)) {
out.writeByte(0xde);
out.writeShort((int)(len & 0xFFFF));
} else if (len < Math.pow(2, 32)) {
out.writeByte(0xdf);
out.writeInt((int)(len & 0xFFFFFFFF));
}
Iterator<Entry<Object, Object>> it = map.entrySet().iterator();
while (it.hasNext()) {
Entry<Object, Object> e = it.next();
encode(e.getKey(), out);
encode(e.getValue(), out);
}
}
private void encodeBytes(byte[] bytes, ByteBuf out) {
int len = bytes.length;
if (len <= 0xFF) {
out.writeByte(0xc4);
out.writeByte(len & 0xFF);
} else if (len <= 0xFFFF) {
out.writeByte(0xc5);
out.writeShort(len & 0xFFFF);
} else if (len <= 0xFFFFFFFF) {
out.writeByte(0xc6);
out.writeInt(len);
}
out.writeBytes(bytes);
}
private void encode(Object msg, ByteBuf out) {
if (msg == null) {
out.writeByte(0xc0);
} else if (msg instanceof Boolean) {
Boolean b = (Boolean) msg;
if (!b) {
out.writeByte(0xc2);
} else {
out.writeByte(0xc3);
}
} else if (msg instanceof Byte) {
encodeByte((Byte) msg, out);
} else if (msg instanceof Short) {
encodeShort((Short) msg, out);
} else if (msg instanceof Integer) {
encodeInt((Integer) msg, out);
} else if (msg instanceof Long) {
encodeLong((Long) msg, out);
} else if (CharSequence.class.isAssignableFrom(msg.getClass())) {
encodeCharSequence((CharSequence) msg, out);
} else if (List.class.isAssignableFrom(msg.getClass())) {
@SuppressWarnings("unchecked")
List<Object> list = (List<Object>) msg;
encodeList(list, out);
} else if (Map.class.isAssignableFrom(msg.getClass())) {
@SuppressWarnings("unchecked")
Map<Object, Object> map = (Map<Object, Object>) msg;
encodeMap(map, out);
} else if (msg instanceof byte[]) {
encodeBytes((byte[]) msg, out);
} else if (msg instanceof Float) {
Float f = (Float) msg;
out.writeByte(0xca);
out.writeFloat(f);
} else if (msg instanceof Double) {
Double d = (Double) msg;
out.writeByte(0xcb);
out.writeDouble(d);
} else throw new UnsupportedOperationException("Encoding of " + msg.getClass() + " objects is not yet implemented");
}
*/

@Override
protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
out.writeBytes(objectMapper.writeValueAsBytes(msg));
Expand Down

0 comments on commit af477ea

Please sign in to comment.