|  | // Copyright 2019 The Fuchsia 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 LIB_VFS_CPP_REMOTE_DIR_H_ | 
|  | #define LIB_VFS_CPP_REMOTE_DIR_H_ | 
|  |  | 
|  | #include <lib/vfs/cpp/internal/directory.h> | 
|  |  | 
|  | namespace vfs { | 
|  |  | 
|  | // A remote directory holds a channel to a remotely hosted directory to | 
|  | // which requests are delegated when opened. | 
|  | // | 
|  | // This class is designed to allow programs to publish remote filesystems | 
|  | // as directories without requiring a separate "mount" step.  In effect, | 
|  | // a remote directory is "mounted" at creation time. | 
|  | // | 
|  | // It is not possible for the client to detach the remote directory or | 
|  | // to mount a new one in its place. | 
|  | class RemoteDir final : public vfs::internal::Directory { | 
|  | public: | 
|  | // Binds to a remotely hosted directory using the specified | 
|  | // |fuchsia.io.Directory| client channel endpoint.The channel must be valid. | 
|  | explicit RemoteDir(zx::channel remote_dir, async_dispatcher_t* dispatcher = nullptr); | 
|  |  | 
|  | // Binds to a remotely hosted directory using the specified | 
|  | // InterfaceHandle. Handle must be valid. | 
|  | explicit RemoteDir(fidl::InterfaceHandle<fuchsia::io::Directory> dir, | 
|  | async_dispatcher_t* dispatcher = nullptr); | 
|  |  | 
|  | // Binds to a remotely hosted directory using the specified | 
|  | // |fuchsia::io::DirectoryPtr| endpoint. |dir_ptr| must be valid. | 
|  | explicit RemoteDir(fuchsia::io::DirectoryPtr dir_ptr); | 
|  |  | 
|  | ~RemoteDir() override; | 
|  |  | 
|  | protected: | 
|  | // |Node| implementation | 
|  | zx_status_t Connect(uint32_t flags, zx::channel request, async_dispatcher_t* dispatcher) final; | 
|  |  | 
|  | // |Directory| implementation | 
|  | zx_status_t Readdir(uint64_t offset, void* data, uint64_t len, uint64_t* out_offset, | 
|  | uint64_t* out_actual) final; | 
|  |  | 
|  | NodeKind::Type GetKind() const final; | 
|  |  | 
|  | private: | 
|  | fuchsia::io::DirectoryPtr dir_ptr_; | 
|  | }; | 
|  |  | 
|  | }  // namespace vfs | 
|  |  | 
|  | #endif  // LIB_VFS_CPP_REMOTE_DIR_H_ |