ircd::net::acceptor: Remove backreference to wrapper object.

This commit is contained in:
Jason Volk 2023-03-08 08:36:04 -08:00
parent 9836f65c05
commit 2147d00dd4
6 changed files with 11 additions and 16 deletions

View File

@ -78,7 +78,7 @@ struct ircd::client
client &operator=(const client &) = delete;
~client() noexcept;
static void create(net::listener &, const std::shared_ptr<socket> &);
static void create(net::acceptor &, const std::shared_ptr<socket> &);
static size_t count(const net::ipport &remote); // cmp is by IP only, not port
static void terminate_all();
static void interrupt_all();

View File

@ -49,7 +49,6 @@ ircd::net::acceptor
static conf::item<std::string> ssl_cipher_list;
static conf::item<std::string> ssl_cipher_blacklist;
net::listener *listener_;
std::string name;
std::string opts;
std::string cname;
@ -81,7 +80,7 @@ ircd::net::acceptor
void handshake(const error_code &, const std::shared_ptr<socket>, const decltype(handshaking)::const_iterator) noexcept;
// Acceptance stack
static bool proffer_default(listener &, const ipport &);
static bool proffer_default(acceptor &, const ipport &);
bool check_handshake_limit(socket &, const ipport &) const;
bool check_accept_error(const error_code &ec, socket &) const;
void accept(const error_code &, const std::shared_ptr<socket>) noexcept;

View File

@ -46,8 +46,8 @@ namespace ircd::net
/// reject connections by returning false.
struct ircd::net::listener
{
using callback = std::function<void (listener &, const std::shared_ptr<socket> &)>;
using proffer = std::function<bool (listener &, const ipport &)>;
using callback = std::function<void (acceptor &, const std::shared_ptr<socket> &)>;
using proffer = std::function<bool (acceptor &, const ipport &)>;
IRCD_EXCEPTION(net::error, error)

View File

@ -333,7 +333,7 @@ ircd::client::terminate_all()
}
void
ircd::client::create(net::listener &,
ircd::client::create(net::acceptor &,
const std::shared_ptr<socket> &sock)
{
const auto client

View File

@ -282,11 +282,7 @@ ircd::net::acceptor::acceptor(net::listener &listener,
listener::callback cb,
listener::proffer pcb)
try
:listener_
{
&listener
}
,name
:name
{
name
}
@ -569,7 +565,7 @@ noexcept try
// Call the proffer-callback. This allows the application to check whether
// to allow or deny this remote before the handshake, as well as setting
// the next accept to shape the kernel's queue.
if(!pcb(*listener_, remote))
if(!pcb(*this, remote))
{
net::close(*sock, dc::RST, close_ignore);
return;
@ -708,10 +704,10 @@ const
/// next accept to take place as well. This is generally overriden by a
/// user callback to control this behavior.
bool
ircd::net::acceptor::proffer_default(listener &listener,
ircd::net::acceptor::proffer_default(acceptor &acceptor,
const ipport &ipport)
{
allow(listener);
allow(acceptor);
return true;
}
@ -758,7 +754,7 @@ noexcept try
// Toggles the behavior of non-async functions; see func comment
blocking(*sock, false);
cb(*listener_, sock);
cb(*this, sock);
}
catch(const ctx::interrupted &e)
{

View File

@ -317,7 +317,7 @@ listener_whitelist
};
static bool
_listener_proffer(net::listener &listener,
_listener_proffer(net::acceptor &listener,
const net::ipport &ipport)
{
thread_local char strbuf[256];