The Hull is the base class for both the client and server.
More...
#include "Hull.hpp"


Public Member Functions | |
| Hull (const EPS::EMode m, int argc, char **argv) | |
| Constructor. More... | |
| virtual | ~Hull (void) |
| Destructor. More... | |
| void | stop_asio (void) |
| Attempt to cleanly shutdown/close all ASIO activity. More... | |
| void | start_signal_handling (void) |
| Start/initialize the signal handling for the hull. More... | |
| void | get_uuid (void) |
| Get the UUID from the configuration file, or generate a new one if necessary. More... | |
| void | save_uuid (void) |
| Save the UUID into the configuration file. More... | |
| void | write_blank_configuration_file (void) |
| Create a new blank configuration file template with helpful comments. More... | |
| void | read_configuration_file (void) |
| Read, parse, and store the configuration file. More... | |
| void | parse_options (void) |
| Parse command-line options. More... | |
| void | run_first_stage (void) |
| Called by main() to setup exception handling and calls run_second_stage(). More... | |
| void | setup_encryption_and_decryption (void) |
| Initialize what we need for OpenSSL encryption/decryption. More... | |
| virtual void | run_second_stage (void)=0 |
| Pure virtual to run EPS. More... | |
| void | readComm (const EPS::TConnPtr &connection) |
| Read (async) a communication command from the peer and act on it. More... | |
| virtual void | processComm (const EPS::TConnPtr &connection, EPS::NetBuffer *nb) |
| Process a communication command that has already been read by readComm(). More... | |
| virtual void | processComm (const EPS::TConnPtr &connection, EPS::NetBuffer *nb, const EPS::CommHeader1 *header, const EPS::ECommType type)=0 |
| Derived classes can use this method to get a callback when a communication command is received. More... | |
| void | start_connect_timer (void) |
| See if we have peers to which we want to connect. More... | |
| void | send_stats (void) |
| Send the latest statistics to the server. More... | |
| void | start_stats_timer (void) |
| Start an asynchronous wait on the stats timer. More... | |
| void | setup_listener (void) |
| Setup socket listener. More... | |
| void | start_async_accept (void) |
| Make the necessary calls to asynchronously accept a new TCP beam. More... | |
| virtual void | connection_failed (const EPS::TConnPtr &connection)=0 |
| Callback when a connection has failed and needs to be cleaned up. More... | |
| virtual void | connection_failed (EPS::TCPConnection *connection) |
| Callback when a connection has failed and needs to be cleaned up. More... | |
| void | validate_new_connection (const EPS::TConnPtr &connection) |
| Exchange information and validate connection to peer. More... | |
| void | validate_new_connection (EPS::TCPConnection *connection) |
| Exchange information and validate connection to peer. More... | |
| void | async_write (const EPS::TConnPtr &connection, EPS::NetBuffer *nb) |
| Asynchronous write of the buffer. More... | |
| void | async_write (const EPS::TConnPtr &connection) |
| Exchange information and validate connection to peer. More... | |
Static Public Member Functions | |
| static Hull & | get (void) |
| Returns the single instance of Hull, which is at time necessary since the asio service_io is part of the hull. More... | |
Public Attributes | |
| const EPS::EMode | mode |
| client or server mode More... | |
| const std::string | mode_string |
| client or server mode string More... | |
| bool | done |
EPS will exit when this is set to TRUE More... | |
| int | signal_number |
| set by the signal handler for logging purposes if a fatal signal is raised More... | |
| int | ac |
| argc More... | |
| char ** | av |
| argv More... | |
| const std::chrono::seconds | seconds_between_retries |
| EC | ec |
| boost error code More... | |
| EPS::StrMap | configuration |
| the content of the configuration file More... | |
| UUID | uuid |
| uuid for this EPS instance More... | |
| boost::asio::io_service | io_service |
| boost::asio's link to the operating system's I/O services More... | |
| boost::asio::signal_set | signal_set |
| register (through asio) for signal handling More... | |
| boost::asio::ip::tcp::resolver | tcp_resolver |
| tcp resolver for async name resolution More... | |
| boost::asio::ip::tcp::acceptor | acceptor |
| accept incoming client connections More... | |
| EPS::IPv4 | address |
| EPS address, e.g. 192.168.43.12. More... | |
| EPS::IPv4 | network |
| EPS network, e.g. 192.168.43.0. More... | |
| EPS::IPv4 | netmask |
| EPS netmask, e.g. 255.255.255.0. More... | |
| EPS::Tracker | tracker |
| keep track of all clients, uuids, and ip addresses More... | |
| EPS::IPv4Set | local_addresses |
| set of all interesting local addresses More... | |
| boost::asio::system_timer | connect_timer |
| see if we have new connections to establish to create the mesh More... | |
| boost::asio::system_timer | stats_timer |
| statistics timer which is triggered every 60 seconds More... | |
| EPS::Stats | stats |
| statistics are updated every minute when stats_timer expires More... | |
| IPv4Vec | ipv4_pool |
| pool of available addresses to give to clients More... | |
| EPS::UUIDSet | pending_uuids |
| set of UUIDs to which we'd like to connect More... | |
| EPS::TCPConns | server_conns |
| server connections More... | |
| time_t | start_time |
| when EPS was started More... | |
| boost::asio::system_timer | upnp_renew_timer |
| UPnP information. More... | |
| EPS::IPv4 | upnp_lan_address |
| LAN ip address according to UPnP. More... | |
| EPS::IPv4 | upnp_wan_address |
| WAN ip address according to UPnP. More... | |
| uint16_t | upnp_wan_port |
| port opened up on WAN side of UPnP device More... | |
| UPNPDev * | upnp_dev |
| structure used by libminiupnpc More... | |
| UPNPUrls | upnp_urls |
| structure used by libminiupnpc More... | |
| IGDdatas | upnp_data |
| structure used by libminiupnpc More... | |
Static Public Attributes | |
| static std::string | addr = "" |
| Configuration item read from CLI or eps.conf file. More... | |
| static uint16_t | port = 0 |
| TCP/UDP port to which we'll connect. More... | |
| static std::string | network_str = "" |
| network (with optional mask) to create for the EPS conduit network More... | |
| static std::string | scorecard = "" |
| filename of the scorecard where stats are written More... | |
| static bool | sequential = false |
| should IP addresses be assigned in a sequential manner to new clients More... | |
| static std::string | conf_filename = "/etc/eps.conf" |
| name of the configuration file More... | |
| static std::string | log_filename = "" |
| name of the file to which log entries will be written More... | |
| static std::string | gv_filename = "" |
| name of the graphviz network diagram file More... | |
| static bool | upnp_enabled = false |
| whether UPnP is enabled/disabled More... | |
| static int | upnp_timeout = 1000 |
| number of seconds to wait for UPnP (or -1 to disable) More... | |
The Hull is the base class for both the client and server.
| EPS::Hull::Hull | ( | const EPS::EMode | m, |
| int | argc, | ||
| char ** | argv | ||
| ) |
Constructor.

|
virtual |
Destructor.

| void EPS::Hull::async_write | ( | const EPS::TConnPtr & | connection, |
| EPS::NetBuffer * | nb | ||
| ) |
| void EPS::Hull::async_write | ( | const EPS::TConnPtr & | connection | ) |
Exchange information and validate connection to peer.

|
pure virtual |
Callback when a connection has failed and needs to be cleaned up.
Implemented in EPS::ServerHull, and EPS::ClientHull.

|
virtual |
Callback when a connection has failed and needs to be cleaned up.

|
static |
Returns the single instance of Hull, which is at time necessary since the asio service_io is part of the hull.

| void EPS::Hull::get_uuid | ( | void | ) |
Get the UUID from the configuration file, or generate a new one if necessary.


| void EPS::Hull::parse_options | ( | void | ) |
Parse command-line options.
For historical reasons, not all of the configuration settings are read/parsed using boost::program_options. For example, see the UUID values as well as cipher_iv and cipher_key in EPS::Hull::read_configuration_file().


|
virtual |
Process a communication command that has already been read by readComm().


|
pure virtual |
Derived classes can use this method to get a callback when a communication command is received.
Implemented in EPS::ServerHull, and EPS::ClientHull.
| void EPS::Hull::read_configuration_file | ( | void | ) |
Read, parse, and store the configuration file.


| void EPS::Hull::readComm | ( | const EPS::TConnPtr & | connection | ) |
Read (async) a communication command from the peer and act on it.


| void EPS::Hull::run_first_stage | ( | void | ) |
Called by main() to setup exception handling and calls run_second_stage().


|
pure virtual |
Pure virtual to run EPS.
Implemented in EPS::ServerHull, and EPS::ClientHull.

| void EPS::Hull::save_uuid | ( | void | ) |
Save the UUID into the configuration file.

| void EPS::Hull::send_stats | ( | void | ) |
Send the latest statistics to the server.


| void EPS::Hull::setup_encryption_and_decryption | ( | void | ) |
Initialize what we need for OpenSSL encryption/decryption.


| void EPS::Hull::setup_listener | ( | void | ) |
Setup socket listener.


| void EPS::Hull::start_async_accept | ( | void | ) |
Make the necessary calls to asynchronously accept a new TCP beam.


| void EPS::Hull::start_connect_timer | ( | void | ) |
See if we have peers to which we want to connect.


| void EPS::Hull::start_signal_handling | ( | void | ) |
Start/initialize the signal handling for the hull.

| void EPS::Hull::start_stats_timer | ( | void | ) |
Start an asynchronous wait on the stats timer.


| void EPS::Hull::stop_asio | ( | void | ) |
Attempt to cleanly shutdown/close all ASIO activity.


| void EPS::Hull::validate_new_connection | ( | const EPS::TConnPtr & | connection | ) |
Exchange information and validate connection to peer.


| void EPS::Hull::validate_new_connection | ( | EPS::TCPConnection * | connection | ) |
Exchange information and validate connection to peer.

| void EPS::Hull::write_blank_configuration_file | ( | void | ) |
Create a new blank configuration file template with helpful comments.


| int EPS::Hull::ac |
argc
| boost::asio::ip::tcp::acceptor EPS::Hull::acceptor |
accept incoming client connections
|
static |
Configuration item read from CLI or eps.conf file.
name or ip address to which the client will connect
| char** EPS::Hull::av |
argv
|
static |
name of the configuration file
| EPS::StrMap EPS::Hull::configuration |
the content of the configuration file
| boost::asio::system_timer EPS::Hull::connect_timer |
see if we have new connections to establish to create the mesh
| bool EPS::Hull::done |
EPS will exit when this is set to TRUE
| EC EPS::Hull::ec |
boost error code
|
static |
name of the graphviz network diagram file
| boost::asio::io_service EPS::Hull::io_service |
boost::asio's link to the operating system's I/O services
| IPv4Vec EPS::Hull::ipv4_pool |
pool of available addresses to give to clients
| EPS::IPv4Set EPS::Hull::local_addresses |
set of all interesting local addresses
|
static |
name of the file to which log entries will be written
| const EPS::EMode EPS::Hull::mode |
client or server mode
| const std::string EPS::Hull::mode_string |
client or server mode string
|
static |
network (with optional mask) to create for the EPS conduit network
| EPS::UUIDSet EPS::Hull::pending_uuids |
set of UUIDs to which we'd like to connect
|
static |
TCP/UDP port to which we'll connect.
|
static |
filename of the scorecard where stats are written
| const std::chrono::seconds EPS::Hull::seconds_between_retries |
|
static |
should IP addresses be assigned in a sequential manner to new clients
| EPS::TCPConns EPS::Hull::server_conns |
server connections
| int EPS::Hull::signal_number |
set by the signal handler for logging purposes if a fatal signal is raised
| boost::asio::signal_set EPS::Hull::signal_set |
register (through asio) for signal handling
| time_t EPS::Hull::start_time |
when EPS was started
| EPS::Stats EPS::Hull::stats |
statistics are updated every minute when stats_timer expires
| boost::asio::system_timer EPS::Hull::stats_timer |
statistics timer which is triggered every 60 seconds
| boost::asio::ip::tcp::resolver EPS::Hull::tcp_resolver |
tcp resolver for async name resolution
| EPS::Tracker EPS::Hull::tracker |
keep track of all clients, uuids, and ip addresses
| IGDdatas EPS::Hull::upnp_data |
structure used by libminiupnpc
| UPNPDev* EPS::Hull::upnp_dev |
structure used by libminiupnpc
|
static |
whether UPnP is enabled/disabled
| EPS::IPv4 EPS::Hull::upnp_lan_address |
LAN ip address according to UPnP.
| boost::asio::system_timer EPS::Hull::upnp_renew_timer |
UPnP information.
timer used to regularly attempt to renew any UPnP port mappings
|
static |
| UPNPUrls EPS::Hull::upnp_urls |
structure used by libminiupnpc
| EPS::IPv4 EPS::Hull::upnp_wan_address |
WAN ip address according to UPnP.
| uint16_t EPS::Hull::upnp_wan_port |
port opened up on WAN side of UPnP device
| UUID EPS::Hull::uuid |
uuid for this EPS instance