#ifndef CHROMEOS_COMPONENTS_FIREWALL_HOLE_FIREWALL_HOLE_H_
#define CHROMEOS_COMPONENTS_FIREWALL_HOLE_FIREWALL_HOLE_H_
#include <stdint.h>
#include <memory>
#include <string>
#include "base/component_export.h"
#include "base/files/scoped_file.h"
#include "base/functional/callback_forward.h"
namespace chromeos {
class COMPONENT_EXPORT(CHROMEOS_FIREWALL_HOLE) FirewallHole {
public:
enum class PortType {
kUdp,
kTcp,
};
using OpenCallback = base::OnceCallback<void(std::unique_ptr<FirewallHole>)>;
static void Open(PortType type,
uint16_t port,
const std::string& interface,
OpenCallback callback);
~FirewallHole();
private:
static void PortAccessGranted(PortType type,
uint16_t port,
const std::string& interface,
base::ScopedFD lifeline_fd,
FirewallHole::OpenCallback callback,
bool success);
FirewallHole(PortType type,
uint16_t port,
const std::string& interface,
base::ScopedFD lifeline_fd);
const PortType type_;
const uint16_t port_;
const std::string interface_;
base::ScopedFD lifeline_fd_;
};
}
#endif