Fix the LispMessageEncoder to reply with UDP message sender

- Add AbstractLispMessage to store sender IP address per message
- Fix the LispMacAuthentication class to accept byte array as input
- Rename LispMessageEncoderTest class
- Try to use MessageToMessageEncoder to result in UDP message

Change-Id: I977302cdadf5c96c60c889be291ad5d90e3bc7cf
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
index d628838..6c723a6 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
@@ -19,6 +19,7 @@
 import io.netty.channel.ChannelInboundHandlerAdapter;
 import io.netty.handler.timeout.IdleState;
 import io.netty.handler.timeout.IdleStateEvent;
+import io.netty.util.ReferenceCountUtil;
 import org.onosproject.lisp.msg.protocols.LispEncapsulatedControl;
 import org.onosproject.lisp.msg.protocols.LispMapNotify;
 import org.onosproject.lisp.msg.protocols.LispMapRegister;
@@ -46,10 +47,12 @@
 
         if (msg instanceof LispMapRegister) {
             LispMapServer mapServer = new LispMapServer();
-            LispMapNotify mapNotify =
-                    (LispMapNotify) mapServer.processMapRegister((LispMapRegister) msg);
+            LispMapNotify mapNotify = mapServer.processMapRegister((LispMapRegister) msg);
 
-            // TODO: deserialize mapNotify message and write to channel
+            // try to remove the received map-register message from buffer
+            ReferenceCountUtil.release(msg);
+
+            ctx.writeAndFlush(mapNotify);
         }
 
         if (msg instanceof LispMapRequest) {
@@ -57,7 +60,7 @@
             LispMapReply mapReply =
                     (LispMapReply) mapResolver.processMapRequest((LispMapRequest) msg);
 
-            // TODO: deserialize mapReply message and write to channel
+            // TODO: serialize mapReply message and write to channel
         }
     }
 
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
index d021a8f..9f6ab35 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.lisp.ctl;
 
+import org.onosproject.lisp.msg.protocols.LispMapReply;
 import org.onosproject.lisp.msg.protocols.LispMessage;
 
 /**
@@ -23,8 +24,8 @@
  */
 public class LispMapResolver {
 
-    public LispMessage processMapRequest(LispMessage message) {
-        // TODO: need to implement map-register message processing logic
+    public LispMapReply processMapRequest(LispMessage message) {
+        // TODO: need to implement map-request message processing logic
         return null;
     }
 }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
index 409d360..7c82672 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.lisp.ctl;
 
+import org.onosproject.lisp.msg.protocols.LispMapNotify;
 import org.onosproject.lisp.msg.protocols.LispMessage;
 
 /**
@@ -23,8 +24,8 @@
  */
 public class LispMapServer {
 
-    public LispMessage processMapRegister(LispMessage message) {
-        // TODO: need to implement map-request message processing logic
+    public LispMapNotify processMapRegister(LispMessage message) {
+        // TODO: need to implement map-register message processing logic
         return null;
     }
 }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
index 94668d3..75a6ab8 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
@@ -36,6 +36,7 @@
         ByteBuf byteBuf = msg.content();
         LispMessageReader reader = LispMessageReaderFactory.getReader(byteBuf);
         LispMessage message = (LispMessage) reader.readFrom(byteBuf);
+        message.configSender(msg.sender());
         list.add(message);
     }
 }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
index 3ddbf64..562ccf9 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
@@ -17,8 +17,10 @@
 
 
 import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.MessageToByteEncoder;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.handler.codec.MessageToMessageEncoder;
 import org.onosproject.lisp.msg.protocols.LispMessage;
 
 import java.util.List;
@@ -27,13 +29,14 @@
  * Encode a LISP message for output into a ByteBuffer,
  * for use in a netty pipeline.
  */
-public class LispMessageEncoder extends MessageToByteEncoder {
+public class LispMessageEncoder extends MessageToMessageEncoder {
 
     @Override
-    protected void encode(ChannelHandlerContext ctx, Object msg,
-                          ByteBuf out) throws Exception {
+    protected void encode(ChannelHandlerContext ctx, Object msg, List out) throws Exception {
         if (!(msg instanceof List)) {
-            ((LispMessage) msg).writeTo(out);
+            ByteBuf byteBuf = Unpooled.buffer();
+            ((LispMessage) msg).writeTo(byteBuf);
+            out.add(new DatagramPacket(byteBuf, ((LispMessage) msg).getSender()));
             return;
         }
 
@@ -41,7 +44,9 @@
 
         for (LispMessage message : msgList) {
             if (message != null) {
-                message.writeTo(out);
+                ByteBuf byteBuf = Unpooled.buffer();
+                message.writeTo(byteBuf);
+                out.add(new DatagramPacket(byteBuf, ((LispMessage) msg).getSender()));
             }
         }
     }