blob: 49d4a4e01f7a856d4cd0206234ea29d1aba26474 [file] [log] [blame]
// 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 "src/virtualization/bin/vmm/guest_impl.h"
#include <lib/syslog/cpp/macros.h>
static zx::socket duplicate(const zx::socket& socket) {
zx::socket dup;
zx_status_t status = socket.duplicate(ZX_RIGHT_SAME_RIGHTS, &dup);
FX_CHECK(status == ZX_OK) << "Failed to duplicate socket " << status;
return dup;
}
GuestImpl::GuestImpl() {
zx_status_t status = zx::socket::create(0, &socket_, &remote_socket_);
FX_CHECK(status == ZX_OK) << "Failed to create socket";
}
zx_status_t GuestImpl::AddPublicService(sys::ComponentContext* context) {
return context->outgoing()->AddPublicService(bindings_.GetHandler(this));
}
zx::socket GuestImpl::SerialSocket() { return duplicate(socket_); }
void GuestImpl::GetSerial(GetSerialCallback callback) { callback(duplicate(remote_socket_)); }