blob: 96473bb32e08f09f6ec99a18be0be5544f17f71e [file] [log] [blame]
// 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.
#include <lib/paver/provider.h>
#include <fuchsia/paver/llcpp/fidl.h>
#include <lib/fidl-async/cpp/bind.h>
#include <zircon/status.h>
#include <zircon/syscalls.h>
#include "paver.h"
namespace {
zx_status_t Connect(void* ctx, async_dispatcher_t* dispatcher, const char* service_name,
zx_handle_t request) {
if (!strcmp(service_name, ::llcpp::fuchsia::paver::Paver::Name)) {
auto* paver = reinterpret_cast<paver::Paver*>(ctx);
paver->set_dispatcher(dispatcher);
return fidl::Bind(dispatcher, zx::channel(request), paver);
}
zx_handle_close(request);
return ZX_ERR_NOT_SUPPORTED;
}
zx_status_t Init(void** out_ctx) {
*out_ctx = new paver::Paver;
return ZX_OK;
}
void Release(void* ctx) { delete static_cast<paver::Paver*>(ctx); }
constexpr const char* kPaverServices[] = {
::llcpp::fuchsia::paver::Paver::Name,
nullptr,
};
constexpr zx_service_ops_t kPaverOps = {
.init = Init,
.connect = Connect,
.release = Release,
};
constexpr zx_service_provider_t paver_service_provider = {
.version = SERVICE_PROVIDER_VERSION,
.services = kPaverServices,
.ops = &kPaverOps,
};
} // namespace
const zx_service_provider_t* paver_get_service_provider() { return &paver_service_provider; }