Index: mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java |
diff --git a/mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java b/mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java |
index f826a8e034c9215a8a8e6496e05c716619a32d0d..14bdbf1e7cbc1eb376ea6c39590804f41a4293d9 100644 |
--- a/mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java |
+++ b/mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java |
@@ -10,6 +10,7 @@ import org.chromium.mojo.system.MessagePipeHandle.ReadMessageResult; |
import org.chromium.mojo.system.MojoResult; |
import java.nio.ByteBuffer; |
+import java.nio.ByteOrder; |
import java.util.List; |
import javax.annotation.Nullable; |
@@ -29,6 +30,9 @@ public final class Message { |
*/ |
public final List<? extends Handle> handles; |
+ private MessageHeader mHeader = null; |
+ private Message mPayload = null; |
+ |
/** |
* Constructor. |
* |
@@ -60,4 +64,39 @@ public final class Message { |
} |
return result.getMojoResult(); |
} |
+ |
+ /** |
+ * Returns the header of the given message. This should only be called on message that are known |
+ * to have a header. This will throw a {@link DeserializationException} it the start of the |
rmcilroy
2014/07/10 19:03:57
/s/it/if
qsr
2014/07/11 11:42:07
Done.
|
+ * message is not a valid header. |
+ */ |
+ public MessageHeader getHeader() { |
rmcilroy
2014/07/10 19:03:57
I'm not sure I like the idea of a Message optional
qsr
2014/07/11 11:42:07
Done, except that I need to use header in all the
|
+ if (mHeader == null) { |
+ mHeader = new org.chromium.mojo.bindings.MessageHeader(this); |
+ } |
+ return mHeader; |
+ } |
+ |
+ /** |
+ * Returns the payload of the message. This should only be called on message that are known to |
+ * have a header. |
+ */ |
+ public Message getPayload() { |
+ if (mPayload == null) { |
+ ByteBuffer truncatedBuffer = ((ByteBuffer) buffer.position( |
+ getHeader().getSize())).slice(); |
+ truncatedBuffer.order(ByteOrder.nativeOrder()); |
+ mPayload = new Message(truncatedBuffer, handles); |
+ } |
+ return mPayload; |
+ } |
+ |
+ /** |
+ * Reset the cache header. Used by {@link MessageHeader} when it modified the message buffer. |
+ */ |
+ void resetHeader() { |
rmcilroy
2014/07/10 19:03:57
Having to remember to resetHeader also seems error
qsr
2014/07/11 11:42:07
Done.
|
+ mHeader = null; |
+ mPayload = null; |
+ } |
+ |
} |