15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)package org.chromium.mojo.bindings;
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import org.chromium.mojo.system.Handle;
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import org.chromium.mojo.system.MessagePipeHandle;
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import java.nio.ByteBuffer;
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import java.util.List;
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/**
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * A raw message to be sent/received from a {@link MessagePipeHandle}. Note that this can contain
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * any data, not necessarily a Mojo message with a proper header. See also {@link ServiceMessage}.
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic class Message {
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /**
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * The data of the message.
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     */
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private final ByteBuffer mBuffer;
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /**
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * The handles of the message.
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     */
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private final List<? extends Handle> mHandle;
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    /**
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     * This message interpreted as a message for a mojo service with an appropriate header.
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     */
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private ServiceMessage mWithHeader = null;
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /**
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * Constructor.
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     *
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * @param buffer The buffer containing the bytes to send. This must be a direct buffer.
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * @param handles The list of handles to send.
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     */
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    public Message(ByteBuffer buffer, List<? extends Handle> handles) {
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        assert buffer.isDirect();
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        mBuffer = buffer;
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        mHandle = handles;
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    /**
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     * The data of the message.
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     */
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public ByteBuffer getData() {
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return mBuffer;
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    /**
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     * The handles of the message.
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     */
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public List<? extends Handle> getHandles() {
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return mHandle;
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    /**
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     * Returns the message interpreted as a message for a mojo service.
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     */
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public ServiceMessage asServiceMessage() {
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mWithHeader == null) {
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            mWithHeader = new ServiceMessage(this);
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return mWithHeader;
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
70