summaryrefslogtreecommitdiff
path: root/src/identd/identd_server.hpp
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2017-06-24 09:21:31 +0200
committerJonas Smedegaard <dr@jones.dk>2017-06-24 09:21:31 +0200
commitc21cbbf9667991d2b928562a9c199e625d3f9bba (patch)
treeffd5e6895a578102ed9055fbb02a88031154ae0b /src/identd/identd_server.hpp
parentde62b6456bebd130f98ce6192cd63ff42e654fac (diff)
parent23a3372144215c9ba7a30d599164677284813fa4 (diff)
downloadbiboumi-c21cbbf9667991d2b928562a9c199e625d3f9bba.tar.gz
biboumi-c21cbbf9667991d2b928562a9c199e625d3f9bba.tar.bz2
biboumi-c21cbbf9667991d2b928562a9c199e625d3f9bba.tar.xz
biboumi-c21cbbf9667991d2b928562a9c199e625d3f9bba.zip
New upstream version 5.0
Diffstat (limited to 'src/identd/identd_server.hpp')
-rw-r--r--src/identd/identd_server.hpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/identd/identd_server.hpp b/src/identd/identd_server.hpp
new file mode 100644
index 0000000..b1c8ec8
--- /dev/null
+++ b/src/identd/identd_server.hpp
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <network/tcp_server_socket.hpp>
+#include <identd/identd_socket.hpp>
+#include <algorithm>
+#include <unistd.h>
+
+class BiboumiComponent;
+
+class IdentdServer: public TcpSocketServer<IdentdSocket>
+{
+ public:
+ IdentdServer(const BiboumiComponent& biboumi_component, std::shared_ptr<Poller>& poller, const uint16_t port):
+ TcpSocketServer<IdentdSocket>(poller, port),
+ biboumi_component(biboumi_component)
+ {}
+
+ const BiboumiComponent& get_biboumi_component() const
+ {
+ return this->biboumi_component;
+ }
+ void shutdown()
+ {
+ if (this->poller->is_managing_socket(this->socket))
+ this->poller->remove_socket_handler(this->socket);
+ ::close(this->socket);
+ }
+ void clean()
+ {
+ this->sockets.erase(std::remove_if(this->sockets.begin(), this->sockets.end(),
+ [](const std::unique_ptr<IdentdSocket>& socket)
+ {
+ return socket->get_socket() == -1;
+ }),
+ this->sockets.end());
+ }
+ private:
+ const BiboumiComponent& biboumi_component;
+};