0
0
mirror of https://github.com/OpenVPN/openvpn3.git synced 2024-09-20 04:02:15 +02:00
openvpn3/openvpn/acceptor/unix.hpp
Heiko Hund 8c8e96e138 streamline overriding virtual function syntax
In the code base three different syntaxes for overriding virtual member
functions could be found:

  1) virtual ... override
  2) virtual ...
  3) ... override

This converts all of them to the third syntax, as recommended by the ISO
C++ core guidelines in C.128

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-08-13 02:01:24 +02:00

79 lines
2.6 KiB
C++

// OpenVPN -- An application to securely tunnel IP networks
// over a single port, with support for SSL/TLS-based
// session authentication and key exchange,
// packet encryption, packet authentication, and
// packet compression.
//
// Copyright (C) 2012-2022 OpenVPN Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License Version 3
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program in the COPYING file.
// If not, see <http://www.gnu.org/licenses/>.
#pragma once
#include <unistd.h> // for unlink()
#include <sys/stat.h> // for chmod()
#include <openvpn/acceptor/base.hpp>
namespace openvpn::Acceptor {
struct Unix : public Base
{
OPENVPN_EXCEPTION(unix_acceptor_error);
typedef RCPtr<Unix> Ptr;
Unix(openvpn_io::io_context &io_context)
: acceptor(io_context)
{
}
void async_accept(ListenerBase *listener,
const size_t acceptor_index,
openvpn_io::io_context &io_context) override
{
AsioPolySock::Unix::Ptr sock(new AsioPolySock::Unix(io_context, acceptor_index));
acceptor.async_accept(sock->socket,
[listener = ListenerBase::Ptr(listener), sock](const openvpn_io::error_code &error) mutable
{ listener->handle_accept(std::move(sock), error); });
}
void close() override
{
acceptor.close();
}
static void pre_listen(const std::string &socket_path)
{
// remove previous socket instance
::unlink(socket_path.c_str());
}
// set socket permissions in filesystem
static void set_socket_permissions(const std::string &socket_path,
const mode_t unix_mode)
{
if (unix_mode)
{
if (::chmod(socket_path.c_str(), unix_mode) < 0)
throw unix_acceptor_error("chmod failed on unix socket");
}
}
openvpn_io::local::stream_protocol::endpoint local_endpoint;
openvpn_io::basic_socket_acceptor<openvpn_io::local::stream_protocol> acceptor;
};
} // namespace openvpn::Acceptor