Adding missing files under onlab-netty
diff --git a/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java b/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java
new file mode 100644
index 0000000..bcf6f52
--- /dev/null
+++ b/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java
@@ -0,0 +1,85 @@
+package org.onlab.netty;
+
+import java.io.IOException;
+
+/**
+ * Internal message representation with additional attributes
+ * for supporting, synchronous request/reply behavior.
+ */
+public final class InternalMessage implements Message {
+
+ private long id;
+ private Endpoint sender;
+ private String type;
+ private Object payload;
+ private transient NettyMessagingService messagingService;
+ public static final String REPLY_MESSAGE_TYPE = "NETTY_MESSAGIG_REQUEST_REPLY";
+
+ // Must be created using the Builder.
+ private InternalMessage() {}
+
+ public long id() {
+ return id;
+ }
+
+ public String type() {
+ return type;
+ }
+
+ public Endpoint sender() {
+ return sender;
+ }
+
+ @Override
+ public Object payload() {
+ return payload;
+ }
+
+ @Override
+ public void respond(Object data) throws IOException {
+ Builder builder = new Builder(messagingService);
+ InternalMessage message = builder.withId(this.id)
+ // FIXME: Sender should be messagingService.localEp.
+ .withSender(this.sender)
+ .withPayload(data)
+ .withType(REPLY_MESSAGE_TYPE)
+ .build();
+ messagingService.sendAsync(sender, message);
+ }
+
+
+ /**
+ * Builder for InternalMessages.
+ */
+ public static class Builder {
+ private InternalMessage message;
+
+ public Builder(NettyMessagingService messagingService) {
+ message = new InternalMessage();
+ message.messagingService = messagingService;
+ }
+
+ public Builder withId(long id) {
+ message.id = id;
+ return this;
+ }
+
+ public Builder withType(String type) {
+ message.type = type;
+ return this;
+ }
+
+ public Builder withSender(Endpoint sender) {
+ message.sender = sender;
+ return this;
+ }
+ public Builder withPayload(Object payload) {
+ message.payload = payload;
+ return this;
+ }
+
+ public InternalMessage build() {
+ return message;
+ }
+ }
+}