blob: a4d9aad62ceae12fe38125570195246f96595712 [file] [log] [blame]
// Copyright 2016 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 CONTAINER_UTILS_DEVICE_JAIL_SERVER_H_
#define CONTAINER_UTILS_DEVICE_JAIL_SERVER_H_
#include <linux/device_jail.h>
#include <memory>
#include <string>
#include <utility>
#include <base/files/scoped_file.h>
#include <base/logging.h>
#include <base/macros.h>
#include <base/message_loop/message_loop.h>
namespace device_jail {
class DeviceJailServer : base::MessageLoopForIO::Watcher {
public:
class Delegate {
public:
virtual ~Delegate() {}
// Called when a jail request is received.
virtual jail_request_result HandleRequest(const std::string& path) = 0;
};
static std::unique_ptr<DeviceJailServer> CreateAndListen(
std::unique_ptr<Delegate> delegate,
base::MessageLoopForIO* message_loop);
virtual ~DeviceJailServer();
// MessageLoopForIO::Watcher overrides
void OnFileCanReadWithoutBlocking(int fd) override;
void OnFileCanWriteWithoutBlocking(int fd) override {
NOTREACHED();
}
private:
DeviceJailServer(std::unique_ptr<Delegate> delegate, int fd)
: delegate_(std::move(delegate)), fd_(base::ScopedFD(fd)) {}
void Start(base::MessageLoopForIO* message_loop);
std::unique_ptr<Delegate> delegate_;
base::ScopedFD fd_;
base::MessageLoopForIO::FileDescriptorWatcher watcher_;
DISALLOW_COPY_AND_ASSIGN(DeviceJailServer);
};
} // namespace device_jail
#endif // CONTAINER_UTILS_DEVICE_JAIL_SERVER_H_