plebble
server.h
Go to the documentation of this file.
1 /*
2 -------------------------------------------------------------------------------
3  PLEBBLE
4 -------------------------------------------------------------------------------
5  Copyright (C) 2019-2020 KATLAS Technology. (http://katlastechnology.com)
6  Copyright (C) 2017-2020 Marcos Mayorga. (mm@mm-studios.com)
7 
8  This file is part of our Plebble(R) Platform.
9 
10  The code below cannot be copied, used for any purpose other than the one
11  agreed and/or distributed without the express permission of
12  KATLAS Technology.
13 -------------------------------------------------------------------------------
14 
15 
16 */
17 #ifndef USGOV_c240798d9f2ba9cd92a0728e617b7d39e33fe0519df7744799c27d2312bc782b
18 #define USGOV_c240798d9f2ba9cd92a0728e617b7d39e33fe0519df7744799c27d2312bc782b
19 
20 #include <netinet/in.h>
21 #include <arpa/inet.h>
22 #include <string>
23 #include <vector>
24 #include <unordered_map>
25 #include <unordered_set>
26 #include <csignal>
27 #include <cassert>
28 #include <memory>
29 #include <mutex>
30 #include <condition_variable>
31 #include <random>
32 #include <thread>
33 #include <us/gov/crypto/ec.h>
34 #include <us/gov/config.h>
35 #include <us/gov/bgtask.h>
36 #include "client.h"
37 #include "datagram.h"
38 #include "clients.h"
39 #include <us/gov/config.h>
40 
41 namespace us { namespace gov {
42 namespace socket {
43  struct datagram;
44 
45  struct server: bgtask {
46  typedef bgtask b;
48 
49  #if CFG_COUNTERS==1
50  struct counters_t {
51  uint32_t select_cycles{0};
52  uint32_t select_errors{0};
53  uint32_t select_EINTR{0};
54  uint32_t select_EBADF{0};
55  uint32_t new_connections{0};
56  uint32_t closed_banned{0};
57  uint32_t data_arrived_unmapped_fd{0};
58  uint32_t blacklisted_addr{0};
59  void dump(ostream& os) const;
60  };
61  static counters_t counters;
62  #endif
63 
64  struct blacklist: unordered_map<uint32_t,pair<chrono::system_clock::time_point,string>> {
65  static constexpr chrono::seconds bantime{300}; //5m;
66  void add(uint32_t, const string& reason);
67  void purge();
68  void dump(ostream&) const;
69  };
70 
71  server();
72  server(uint16_t port);
73  virtual ~server();
74  virtual client* create_client(int sock);
75  virtual void attach(client*);
76  virtual void attach_noupdate(client*);
77  virtual void detach(client*);
78  virtual void receive_and_process(client*)=0;
79  virtual void on_destroy(client&) {}
81  int make_socket (uint16_t port);
82  bool banned_throttle(const string& addr);
83  void dump(const string& prefix, ostream& os) const;
84  void proc_evil(const vector<pair<uint32_t,string>>&);
85  static int set_not_blocking_mode(int sock);
86  void run();
87  void onwakeup();
88  ko start() override;
89  ko wait_ready(const chrono::system_clock::time_point& deadline) const override;
90  void stop() override;
91  void join() override;
92 
94  uint16_t port;
95  int sock{0};
98  #if CFG_LOGS==1
99  string logdir;
100  #endif
101  };
102 }
103 }}
104 
105 #endif
106 
c
us::gov::socket::server c
Definition: server.cpp:40
us::gov::socket::server::blacklist::purge
void purge()
us::gov::socket::server::blacklist
Definition: server.h:64
bgtask.h
us::gov::socket::server::detach
virtual void detach(client *)
us::gov::socket::server::b
bgtask b
Definition: server.h:46
us::gov::socket::client
Definition: client.h:44
us.ko
Definition: ko.java:20
log_start
#define log_start
Definition: gov.h:85
us
Definition: daemon.h:22
unlikely
#define unlikely(x)
Definition: likely.h:30
us::gov::socket::server::wait_ready
ko wait_ready(const chrono::system_clock::time_point &deadline) const override
us::gov::socket::server::banned_throttle
bool banned_throttle(const string &addr)
us::gov::socket::server::attach_noupdate
virtual void attach_noupdate(client *)
us::gov::socket::server::set_not_blocking_mode
static int set_not_blocking_mode(int sock)
us::gov::socket::server::ban
blacklist ban
Definition: server.h:96
us::gov::socket::queue_t
Definition: send_queue.h:48
likely.h
us::gov::socket::server::attach
virtual void attach(client *)
us::gov::socket::server::clients
clients_t clients
Definition: server.h:93
us::gov::socket::server::blacklist::add
void add(uint32_t, const string &reason)
us::gov::crypto::ec::keys::pub_t
Definition: ec.h:44
us::gov::socket::server::blacklist::bantime
static constexpr chrono::seconds bantime
Definition: server.h:65
us::gov::socket::server::sendq
client::queue_t sendq
Definition: server.h:97
us::gov::socket::datagram
Definition: datagram.h:44
us::gov::socket::server::proc_evil
void proc_evil(const vector< pair< uint32_t, string >> &)
us::gov::socket::server::start
ko start() override
us::gov::socket
Definition: busyled.h:23
us::gov::socket::server::dump
void dump(const string &prefix, ostream &os) const
us::gov::socket::server::server
server()
us::gov::socket::clients_t
Definition: clients.h:32
us::gov::socket::server::onwakeup
void onwakeup()
us::gov::socket::server::pub_t
crypto::ec::keys::pub_t pub_t
Definition: server.h:47
us::gov::socket::server::sock
int sock
Definition: server.h:95
datagram.h
us::gov::socket::server::run
void run()
us::gov::socket::server
Definition: server.h:45
c
Definition: client.cpp:417
us::ok
static constexpr ko ok
Definition: ko.h:28
us::gov::socket::server::port
uint16_t port
Definition: server.h:94
likely
#define likely(x)
Definition: likely.h:29
us::gov::socket::server::read_from_client
datagram * read_from_client(int sock)
std
Definition: app.h:380
us::gov::socket::server::on_destroy
virtual void on_destroy(client &)
Definition: server.h:79
us::gov::socket::server::create_client
virtual client * create_client(int sock)
us::gov::socket::server::make_socket
int make_socket(uint16_t port)
us::gov::socket::server::~server
virtual ~server()
us::gov::socket::server::stop
void stop() override
config.h
us::gov::socket::server::server
server(uint16_t port)
server.h
clients.h
us::gov::socket::server::join
void join() override
us::gov::socket::server::blacklist::dump
void dump(ostream &) const
us.pair
Definition: pair.java:19
gov.h
ec.h
client.h
log
#define log
Definition: gov.h:83
LOGDIR
#define LOGDIR
Definition: config.h:12
us::gov::socket::server::receive_and_process
virtual void receive_and_process(client *)=0
us::gov::bgtask
Definition: bgtask.h:31