// Copyright 2013 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. #include "mojo/core/dispatcher.h" #include "base/logging.h" #include "mojo/core/configuration.h" #include "mojo/core/data_pipe_consumer_dispatcher.h" #include "mojo/core/data_pipe_producer_dispatcher.h" #include "mojo/core/message_pipe_dispatcher.h" #include "mojo/core/platform_handle_dispatcher.h" #include "mojo/core/ports/event.h" #include "mojo/core/shared_buffer_dispatcher.h" namespace mojo { namespace core { Dispatcher::DispatcherInTransit::DispatcherInTransit() {} Dispatcher::DispatcherInTransit::DispatcherInTransit( const DispatcherInTransit& other) = default; Dispatcher::DispatcherInTransit::~DispatcherInTransit() {} MojoResult Dispatcher::WatchDispatcher(scoped_refptr dispatcher, MojoHandleSignals signals, MojoTriggerCondition condition, uintptr_t context) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::CancelWatch(uintptr_t context) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::Arm(uint32_t* num_blocking_events, MojoTrapEvent* blocking_events) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::WriteMessage( std::unique_ptr message) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::ReadMessage( std::unique_ptr* message) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::DuplicateBufferHandle( const MojoDuplicateBufferHandleOptions* options, scoped_refptr* new_dispatcher) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::MapBuffer( uint64_t offset, uint64_t num_bytes, std::unique_ptr* mapping) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::GetBufferInfo(MojoSharedBufferInfo* info) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::ReadData(const MojoReadDataOptions& options, void* elements, uint32_t* num_bytes) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::BeginReadData(const void** buffer, uint32_t* buffer_num_bytes) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::EndReadData(uint32_t num_bytes_read) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::WriteData(const void* elements, uint32_t* num_bytes, const MojoWriteDataOptions& options) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::BeginWriteData(void** buffer, uint32_t* buffer_num_bytes) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::EndWriteData(uint32_t num_bytes_written) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::AttachMessagePipe(base::StringPiece name, ports::PortRef remote_peer_port) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::ExtractMessagePipe(base::StringPiece name, MojoHandle* message_pipe_handle) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::SetQuota(MojoQuotaType type, uint64_t limit) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::QueryQuota(MojoQuotaType type, uint64_t* limit, uint64_t* usage) { return MOJO_RESULT_INVALID_ARGUMENT; } HandleSignalsState Dispatcher::GetHandleSignalsState() const { return HandleSignalsState(); } MojoResult Dispatcher::AddWatcherRef( const scoped_refptr& watcher, uintptr_t context) { return MOJO_RESULT_INVALID_ARGUMENT; } MojoResult Dispatcher::RemoveWatcherRef(WatcherDispatcher* watcher, uintptr_t context) { return MOJO_RESULT_INVALID_ARGUMENT; } void Dispatcher::StartSerialize(uint32_t* num_bytes, uint32_t* num_ports, uint32_t* num_platform_handles) { *num_bytes = 0; *num_ports = 0; *num_platform_handles = 0; } bool Dispatcher::EndSerialize(void* destination, ports::PortName* ports, PlatformHandle* handles) { LOG(ERROR) << "Attempting to serialize a non-transferrable dispatcher."; return true; } bool Dispatcher::BeginTransit() { return true; } void Dispatcher::CompleteTransitAndClose() {} void Dispatcher::CancelTransit() {} // static scoped_refptr Dispatcher::Deserialize( Type type, const void* bytes, size_t num_bytes, const ports::PortName* ports, size_t num_ports, PlatformHandle* platform_handles, size_t num_platform_handles) { switch (type) { case Type::MESSAGE_PIPE: return MessagePipeDispatcher::Deserialize(bytes, num_bytes, ports, num_ports, platform_handles, num_platform_handles); case Type::SHARED_BUFFER: return SharedBufferDispatcher::Deserialize(bytes, num_bytes, ports, num_ports, platform_handles, num_platform_handles); case Type::DATA_PIPE_CONSUMER: return DataPipeConsumerDispatcher::Deserialize( bytes, num_bytes, ports, num_ports, platform_handles, num_platform_handles); case Type::DATA_PIPE_PRODUCER: return DataPipeProducerDispatcher::Deserialize( bytes, num_bytes, ports, num_ports, platform_handles, num_platform_handles); case Type::PLATFORM_HANDLE: return PlatformHandleDispatcher::Deserialize(bytes, num_bytes, ports, num_ports, platform_handles, num_platform_handles); default: LOG(ERROR) << "Deserializing invalid dispatcher type."; return nullptr; } } Dispatcher::Dispatcher() {} Dispatcher::~Dispatcher() {} } // namespace core } // namespace mojo