| // Copyright 2018 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. |
| |
| #include <lib/svc/outgoing.h> |
| #include <zircon/process.h> |
| #include <zircon/processargs.h> |
| |
| #include <utility> |
| |
| namespace svc { |
| |
| Outgoing::Outgoing(async_dispatcher_t* dispatcher) |
| : vfs_(dispatcher), |
| root_dir_(fbl::MakeRefCounted<fs::PseudoDir>()), |
| svc_dir_(fbl::MakeRefCounted<fs::PseudoDir>()) { |
| root_dir_->AddEntry("svc", svc_dir_); |
| } |
| |
| Outgoing::~Outgoing() = default; |
| |
| zx_status_t Outgoing::Serve(zx::channel dir_request) { |
| if (!dir_request) |
| return ZX_ERR_BAD_HANDLE; |
| return vfs_.ServeDirectory(root_dir_, std::move(dir_request)); |
| } |
| |
| zx_status_t Outgoing::ServeFromStartupInfo() { |
| zx_handle_t dir_request = zx_take_startup_handle(PA_DIRECTORY_REQUEST); |
| return Serve(zx::channel(dir_request)); |
| } |
| |
| } // namespace svc |