Adding missing files under onlab-netty
diff --git a/utils/netty/src/main/java/org/onlab/netty/MessageDecoder.java b/utils/netty/src/main/java/org/onlab/netty/MessageDecoder.java
new file mode 100644
index 0000000..ecf2d62
--- /dev/null
+++ b/utils/netty/src/main/java/org/onlab/netty/MessageDecoder.java
@@ -0,0 +1,58 @@
+package org.onlab.netty;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+
+/**
+ * Decode bytes into a InternalMessage.
+ */
+public class MessageDecoder extends ByteToMessageDecoder {
+
+ private final NettyMessagingService messagingService;
+ private final Serializer serializer;
+
+ public MessageDecoder(NettyMessagingService messagingService, Serializer serializer) {
+ this.messagingService = messagingService;
+ this.serializer = serializer;
+ }
+
+ @Override
+ protected void decode(ChannelHandlerContext context, ByteBuf in,
+ List<Object> messages) throws Exception {
+
+ byte[] preamble = in.readBytes(MessageEncoder.PREAMBLE.length).array();
+ checkState(Arrays.equals(MessageEncoder.PREAMBLE, preamble), "Message has wrong preamble");
+
+ // read message Id.
+ long id = in.readLong();
+
+ // read message type; first read size and then bytes.
+ String type = new String(in.readBytes(in.readInt()).array());
+
+ // read sender host name; first read size and then bytes.
+ String host = new String(in.readBytes(in.readInt()).array());
+
+ // read sender port.
+ int port = in.readInt();
+
+ Endpoint sender = new Endpoint(host, port);
+
+ // read message payload; first read size and then bytes.
+ Object payload = serializer.decode(in.readBytes(in.readInt()).array());
+
+ InternalMessage message = new InternalMessage.Builder(messagingService)
+ .withId(id)
+ .withSender(sender)
+ .withType(type)
+ .withPayload(payload)
+ .build();
+
+ messages.add(message);
+ }
+}