#ifndef _ExternalClients #define _ExternalClients #include "Networking/sockets.h" #include "Networking/ssl_sockets.h" #include "Tools/Exceptions.h" #include "Tools/Lock.h" #include "ExternalIO/Client.h" #include #include #include #include #include #include class AnonymousServerSocket; /* * Manage the reading and writing of data from/to external clients via Sockets. * Generate the session keys for encryption/decryption of secret communication with external clients. */ class ExternalClients { map client_connection_servers; int party_num; // Maps holding per client values (indexed by unique 32-bit id) std::map external_client_sockets; std::map client_ports; ssl_service io_service; client_ctx* ctx; map peer_ctxs; Lock lock; public: ExternalClients(int party_num); ~ExternalClients(); void start_listening(int portnum_base); int get_client_connection(int portnum_base); int init_client_connection(const string& host, int portnum, int my_client_id); void close_connection(int client_id); // return the socket for a given client or server identifier client_socket* get_socket(int socket_id); int get_party_num(); }; #endif