OpenVPN 3 Core Library
Loading...
Searching...
No Matches
unix.hpp
Go to the documentation of this file.
1// OpenVPN -- An application to securely tunnel IP networks
2// over a single port, with support for SSL/TLS-based
3// session authentication and key exchange,
4// packet encryption, packet authentication, and
5// packet compression.
6//
7// Copyright (C) 2012- OpenVPN Inc.
8//
9// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10//
11
12#pragma once
13
14#include <unistd.h> // for unlink()
15#include <sys/stat.h> // for chmod()
16
18
19namespace openvpn::Acceptor {
20
21struct Unix : public Base
22{
23 OPENVPN_EXCEPTION(unix_acceptor_error);
24
26
27 Unix(openvpn_io::io_context &io_context)
28 : acceptor(io_context)
29 {
30 }
31
32 void async_accept(ListenerBase *listener,
33 const size_t acceptor_index,
34 openvpn_io::io_context &io_context) override
35 {
36 AsioPolySock::Unix::Ptr sock(new AsioPolySock::Unix(io_context, acceptor_index));
37 acceptor.async_accept(sock->socket,
38 [listener = ListenerBase::Ptr(listener), sock](const openvpn_io::error_code &error) mutable
39 { listener->handle_accept(std::move(sock), error); });
40 }
41
42 void close() override
43 {
44 acceptor.close();
45 }
46
47 static void pre_listen(const std::string &socket_path)
48 {
49 // remove previous socket instance
50 ::unlink(socket_path.c_str());
51 }
52
53 // set socket permissions in filesystem
54 static void set_socket_permissions(const std::string &socket_path,
55 const mode_t unix_mode)
56 {
57 if (unix_mode)
58 {
59 if (::chmod(socket_path.c_str(), unix_mode) < 0)
60 throw unix_acceptor_error("chmod failed on unix socket");
61 }
62 }
63
64 openvpn_io::local::stream_protocol::endpoint local_endpoint;
65 openvpn_io::basic_socket_acceptor<openvpn_io::local::stream_protocol> acceptor;
66};
67
68} // namespace openvpn::Acceptor
The smart pointer class.
Definition rc.hpp:119
openvpn_io::local::stream_protocol::endpoint local_endpoint
Definition unix.hpp:64
static void set_socket_permissions(const std::string &socket_path, const mode_t unix_mode)
Definition unix.hpp:54
RCPtr< Unix > Ptr
Definition unix.hpp:25
void async_accept(ListenerBase *listener, const size_t acceptor_index, openvpn_io::io_context &io_context) override
Definition unix.hpp:32
static void pre_listen(const std::string &socket_path)
Definition unix.hpp:47
OPENVPN_EXCEPTION(unix_acceptor_error)
Unix(openvpn_io::io_context &io_context)
Definition unix.hpp:27
void close() override
Definition unix.hpp:42
openvpn_io::basic_socket_acceptor< openvpn_io::local::stream_protocol > acceptor
Definition unix.hpp:65