aboutsummaryrefslogtreecommitdiff
path: root/server/src/client/client.h
diff options
context:
space:
mode:
authoralpine <[email protected]>2020-06-13 22:27:52 +0200
committeralpine <[email protected]>2020-06-13 22:27:52 +0200
commitbad7b4f2d19f95b278fdcb3056be01cae9af1dbb (patch)
tree5bef91f910a2c03d74df9693a077ee33b2fe7886 /server/src/client/client.h
parentInitial commit (diff)
downloadloader-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.h57
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