| // Copyright 2018 The Chromium OS 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 ARC_VM_MOJO_PROXY_SERVER_PROXY_H_ |
| #define ARC_VM_MOJO_PROXY_SERVER_PROXY_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <vector> |
| |
| #include <base/macros.h> |
| #include <base/memory/ref_counted.h> |
| |
| #include "arc/vm/mojo_proxy/message_stream.h" |
| #include "arc/vm/mojo_proxy/mojo_proxy.h" |
| #include "arc/vm/mojo_proxy/proxy_file_system.h" |
| |
| namespace arc { |
| |
| class ProxyFileSystem; |
| |
| // ServerProxy sets up the MojoProxy and handles initial socket negotiation. |
| class ServerProxy : public MojoProxy::Delegate, |
| public ProxyFileSystem::Delegate { |
| public: |
| ServerProxy(scoped_refptr<base::TaskRunner> proxy_file_system_task_runner, |
| const base::FilePath& proxy_file_system_mount_path, |
| base::OnceClosure quit_closure); |
| ServerProxy(const ServerProxy&) = delete; |
| ServerProxy& operator=(const ServerProxy&) = delete; |
| |
| ~ServerProxy() override; |
| |
| // Sets up the ServerProxy. Specifically, start listening on virtio-wl. |
| // Then, connect to /run/chrome/arc_bridge.sock. |
| bool Initialize(); |
| |
| // MojoProxy::Delegate overrides: |
| MojoProxy::Type GetType() const override { return MojoProxy::Type::SERVER; } |
| int GetPollFd() override { return message_stream_->Get(); } |
| base::ScopedFD CreateProxiedRegularFile(int64_t handle, |
| int32_t flags) override; |
| bool SendMessage(const arc_proxy::MojoMessage& message, |
| const std::vector<base::ScopedFD>& fds) override; |
| bool ReceiveMessage(arc_proxy::MojoMessage* message, |
| std::vector<base::ScopedFD>* fds) override; |
| void OnStopped() override; |
| |
| // ProxyFileSystem::Delegate overrides: |
| void Pread(int64_t handle, |
| uint64_t count, |
| uint64_t offset, |
| PreadCallback callback) override; |
| void Pwrite(int64_t handle, |
| std::string blob, |
| uint64_t offset, |
| PwriteCallback callback) override; |
| void Close(int64_t handle) override; |
| void Fstat(int64_t handle, FstatCallback callback) override; |
| |
| private: |
| scoped_refptr<base::TaskRunner> proxy_file_system_task_runner_; |
| ProxyFileSystem proxy_file_system_; |
| base::OnceClosure quit_closure_; |
| base::ScopedFD virtwl_socket_; |
| base::ScopedFD virtwl_context_; |
| std::unique_ptr<MessageStream> message_stream_; |
| std::unique_ptr<MojoProxy> mojo_proxy_; |
| }; |
| |
| } // namespace arc |
| |
| #endif // ARC_VM_MOJO_PROXY_SERVER_PROXY_H_ |