| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_EDK_SYSTEM_PORTS_MESSAGE_H__ |
| #define MOJO_EDK_SYSTEM_PORTS_MESSAGE_H__ |
| |
| #include <memory> |
| #include <utility> |
| |
| #include "mojo/edk/embedder/platform_handle_vector.h" |
| #include "mojo/edk/system/channel.h" |
| #include "mojo/edk/system/ports/message.h" |
| #include "mojo/edk/system/ports/name.h" |
| |
| namespace mojo { |
| namespace edk { |
| |
| class NodeController; |
| |
| class PortsMessage : public ports::Message { |
| public: |
| static std::unique_ptr<PortsMessage> NewUserMessage(size_t num_payload_bytes, |
| size_t num_ports, |
| size_t num_handles); |
| |
| ~PortsMessage() override; |
| |
| size_t num_handles() const { return channel_message_->num_handles(); } |
| bool has_handles() const { return channel_message_->has_handles(); } |
| |
| void SetHandles(ScopedPlatformHandleVectorPtr handles) { |
| channel_message_->SetHandles(std::move(handles)); |
| } |
| |
| ScopedPlatformHandleVectorPtr TakeHandles() { |
| return channel_message_->TakeHandles(); |
| } |
| |
| Channel::MessagePtr TakeChannelMessage() { |
| return std::move(channel_message_); |
| } |
| |
| void set_source_node(const ports::NodeName& name) { source_node_ = name; } |
| const ports::NodeName& source_node() const { return source_node_; } |
| |
| private: |
| friend class NodeController; |
| |
| // Construct a new user PortsMessage backed by a new Channel::Message. |
| PortsMessage(size_t num_payload_bytes, size_t num_ports, size_t num_handles); |
| |
| // Construct a new PortsMessage backed by a Channel::Message. If |
| // |channel_message| is null, a new one is allocated internally. |
| PortsMessage(size_t num_header_bytes, |
| size_t num_payload_bytes, |
| size_t num_ports_bytes, |
| Channel::MessagePtr channel_message); |
| |
| Channel::MessagePtr channel_message_; |
| |
| // The node name from which this message was received, if known. |
| ports::NodeName source_node_ = ports::kInvalidNodeName; |
| }; |
| |
| } // namespace edk |
| } // namespace mojo |
| |
| #endif // MOJO_EDK_SYSTEM_PORTS_MESSAGE_H__ |