diff options
| author | alpine <[email protected]> | 2020-06-13 22:27:52 +0200 |
|---|---|---|
| committer | alpine <[email protected]> | 2020-06-13 22:27:52 +0200 |
| commit | bad7b4f2d19f95b278fdcb3056be01cae9af1dbb (patch) | |
| tree | 5bef91f910a2c03d74df9693a077ee33b2fe7886 /server/src/client/client.h | |
| parent | Initial commit (diff) | |
| download | loader-bad7b4f2d19f95b278fdcb3056be01cae9af1dbb.tar.xz loader-bad7b4f2d19f95b278fdcb3056be01cae9af1dbb.zip | |
Client.
Message encryption.
Packet handler.
Disconnect event handler.
Diffstat (limited to 'server/src/client/client.h')
| -rw-r--r-- | server/src/client/client.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/server/src/client/client.h b/server/src/client/client.h new file mode 100644 index 0000000..5242ae7 --- /dev/null +++ b/server/src/client/client.h @@ -0,0 +1,57 @@ +#pragma once +#include "../server/packet.h" + +namespace tcp { +constexpr uint8_t client_version = 0; + +class client { + int m_socket; + SSL *m_ssl; + + time_t m_time; + + std::string m_ip; + std::array<char, tcp::uid_len> m_uid; + public: + client() : m_socket{-1} {}; + client(const int &socket, const std::string_view ip) + : m_socket{std::move(socket)}, m_ip{ip}, m_ssl{nullptr} { + + } + ~client() = default; + + bool init_ssl(SSL_CTX *server_ctx); + + void cleanup() { + close(m_socket); + SSL_shutdown(m_ssl); + SSL_free(m_ssl); + } + + int write(void *data, size_t size) { + return SSL_write(m_ssl, data, size); + } + + int read(void *data, size_t size) { + return SSL_read(m_ssl, data, size); + } + + bool set_uid(const std::string_view uid_str) { + const size_t uid_str_len = uid_str.size(); + if (uid_str_len != tcp::uid_len) { + io::logger->error("packet uid len mismatch!"); + return false; + } + + for (size_t i = 0; i < uid_len; ++i) { + m_uid[i] = uid_str[i]; + } + + return true; + } + + int &get_socket() { return m_socket; } + auto &get_ip() { return m_ip; } + auto &get_uid() { return m_uid; } +}; +}; // namespace tcp
\ No newline at end of file |