Line data Source code
1 : #include "socket_server_base.hpp"
2 :
3 : namespace thinger::asio {
4 :
5 658 : socket_server_base::socket_server_base(io_context_provider acceptor_context_provider,
6 : io_context_provider connection_context_provider,
7 : std::set<std::string> allowed_remotes,
8 658 : std::set<std::string> forbidden_remotes)
9 658 : : allowed_remotes_(std::move(allowed_remotes))
10 658 : , forbidden_remotes_(std::move(forbidden_remotes))
11 658 : , max_listening_attempts_(MAX_LISTENING_ATTEMPTS)
12 658 : , acceptor_context_provider_(std::move(acceptor_context_provider))
13 1974 : , connection_context_provider_(std::move(connection_context_provider))
14 : {
15 658 : }
16 :
17 658 : void socket_server_base::set_max_listening_attempts(int attempts) {
18 658 : max_listening_attempts_ = attempts;
19 658 : }
20 :
21 658 : void socket_server_base::set_handler(std::function<void(std::shared_ptr<socket>)> handler) {
22 658 : handler_ = std::move(handler);
23 658 : }
24 :
25 0 : void socket_server_base::set_allowed_remotes(std::set<std::string> allowed) {
26 0 : allowed_remotes_ = std::move(allowed);
27 0 : }
28 :
29 0 : void socket_server_base::set_forbidden_remotes(std::set<std::string> forbidden) {
30 0 : forbidden_remotes_ = std::move(forbidden);
31 0 : }
32 :
33 828 : bool socket_server_base::is_remote_allowed(const std::string& remote_ip) const {
34 828 : if (forbidden_remotes_.contains(remote_ip)) {
35 0 : return false;
36 : }
37 828 : if (!allowed_remotes_.empty() && !allowed_remotes_.contains(remote_ip)) {
38 0 : return false;
39 : }
40 828 : return true;
41 : }
42 :
43 658 : bool socket_server_base::start() {
44 658 : if (!running_ && handler_) {
45 658 : if (create_acceptor()) {
46 652 : running_ = true;
47 652 : accept_connection();
48 652 : return true;
49 : }
50 : }
51 6 : return false;
52 : }
53 :
54 709 : bool socket_server_base::stop() {
55 709 : running_ = false;
56 709 : return true;
57 : }
58 :
59 : } // namespace thinger::asio
|