diff options
| author | alpine <[email protected]> | 2020-06-18 22:14:03 +0200 |
|---|---|---|
| committer | alpine <[email protected]> | 2020-06-18 22:14:03 +0200 |
| commit | e766ee369c75fdfdd41c810582f9ed99349fe672 (patch) | |
| tree | 257ed7e911b325f22cb8425fbc926bc3cc37eed5 /server | |
| parent | Renamed uid to session id. (diff) | |
| download | loader-e766ee369c75fdfdd41c810582f9ed99349fe672.tar.xz loader-e766ee369c75fdfdd41c810582f9ed99349fe672.zip | |
Finished session id on client and server.
Started expirementing with ways to send version.
Finished packet wrapper completely.
Small code and formatting changes.
Diffstat (limited to 'server')
| -rw-r--r-- | server/src/client/client.cpp | 2 | ||||
| -rw-r--r-- | server/src/client/client.h | 6 | ||||
| -rw-r--r-- | server/src/main.cpp | 23 | ||||
| -rw-r--r-- | server/src/server/packet.h | 16 | ||||
| -rw-r--r-- | server/src/server/server.cpp | 2 | ||||
| -rw-r--r-- | server/src/util/io.cpp | 14 | ||||
| -rw-r--r-- | server/src/util/io.h | 2 |
7 files changed, 34 insertions, 31 deletions
diff --git a/server/src/client/client.cpp b/server/src/client/client.cpp index 18818e7..5e28f26 100644 --- a/server/src/client/client.cpp +++ b/server/src/client/client.cpp @@ -32,7 +32,7 @@ void tcp::client::gen_session() { std::default_random_engine e1(r()); std::uniform_int_distribution<int> gen(33, 126); - for(int i = 0; i < session_id_len; i++) { + for (int i = 0; i < session_id_len; i++) { auto k = static_cast<char>(gen(e1)); m_session_id.insert(m_session_id.end(), k); } diff --git a/server/src/client/client.h b/server/src/client/client.h index b54cd22..f305638 100644 --- a/server/src/client/client.h +++ b/server/src/client/client.h @@ -2,7 +2,6 @@ #include "../server/packet.h" namespace tcp { -constexpr uint8_t client_version = 0; class client { int m_socket; @@ -14,6 +13,8 @@ class client { std::string m_session_id; public: + static constexpr int version = 1; + client() : m_socket{-1} {}; client(const int &socket, const std::string_view ip) : m_socket{std::move(socket)}, m_ip{ip}, m_ssl{nullptr} {} @@ -28,9 +29,12 @@ class client { } int write(void *data, size_t size) { return SSL_write(m_ssl, data, size); } + int write(const packet_t &packet) { + if (!packet) return 0; return SSL_write(m_ssl, packet.message.data(), packet.message.size()); } + int read(void *data, size_t size) { return SSL_read(m_ssl, data, size); } int stream(std::vector<char> &data); diff --git a/server/src/main.cpp b/server/src/main.cpp index 1727458..97eac24 100644 --- a/server/src/main.cpp +++ b/server/src/main.cpp @@ -12,20 +12,11 @@ int main(int argc, char *argv[]) { server.connect_event.add([&](tcp::client &client) { auto ip = client.get_ip(); - - io::logger->info("{} connected", ip); - - // generate unique client session client.gen_session(); + client.write(tcp::packet_t(std::to_string(client.version), tcp::packet_type::write, + client.get_session())); - auto session = client.get_session(); - - io::logger->info("generated session id {} for {}", session, - ip); - - // send the assigned session id to client - tcp::packet_t packet(session, tcp::packet_type::write); - client.write(packet); + io::logger->info("{} connected", ip); }); server.disconnect_event.add([&](tcp::client &client) { @@ -51,19 +42,15 @@ int main(int argc, char *argv[]) { return; } - if(packet_session != session) { + if (packet_session != session) { io::logger->info("{} sent wrong session id", ip); return; } io::logger->info("{} : {}", packet_session, packet.message); - tcp::packet_t resp("stream", tcp::packet_type::write, client.get_session()); + tcp::packet_t resp(packet.message, tcp::packet_type::write, client.get_session()); client.write(resp); - - std::vector<char> out; - io::read_file("test.dll", out); - client.stream(out); }); std::thread t{tcp::server::monitor, std::ref(server)}; diff --git a/server/src/server/packet.h b/server/src/server/packet.h index d60eae7..9ca991d 100644 --- a/server/src/server/packet.h +++ b/server/src/server/packet.h @@ -2,6 +2,7 @@ namespace tcp { constexpr size_t session_id_len = 10; +constexpr size_t message_len = 256 + session_id_len; enum packet_type : int { write = 0, read }; @@ -11,7 +12,8 @@ struct packet_t { std::string session_id; packet_t() {} - packet_t(const std::string_view msg, const packet_type &type, std::string_view session = "") { + packet_t(const std::string_view msg, const packet_type &type, + std::string_view session = "") { if (type == read) { if (msg.size() < session_id_len) { io::logger->error("packet message invalid!"); @@ -23,14 +25,22 @@ struct packet_t { action = msg[session_id_len]; message = msg.substr(session_id_len); } else { + if (msg.size() > message_len) { + io::logger->error("packet message exceeds limit"); + return; + } + session_id = session; message = fmt::format("{}{}", session_id, msg); } } - operator bool() const { - return !message.empty() && !session_id.empty(); + ~packet_t() { + message.clear(); + session_id.clear(); } + + operator bool() const { return !message.empty() && !session_id.empty(); } }; }; // namespace tcp diff --git a/server/src/server/server.cpp b/server/src/server/server.cpp index e0262d7..e8e1ce5 100644 --- a/server/src/server/server.cpp +++ b/server/src/server/server.cpp @@ -117,7 +117,7 @@ void tcp::server::accept_client() { } void tcp::server::receive() { - std::array<char, 4096> buf; + std::array<char, message_len> buf; for (auto &c : client_stack) { const int socket = c.get_socket(); diff --git a/server/src/util/io.cpp b/server/src/util/io.cpp index 1f9bca6..f2da690 100644 --- a/server/src/util/io.cpp +++ b/server/src/util/io.cpp @@ -3,18 +3,20 @@ std::shared_ptr<spdlog::logger> io::logger; -void io::init(const bool &trunc) { - auto sink = - std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); +void io::init(const bool &to_file) { + auto sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); sink->set_pattern("[%R][%^%l%$] %v"); - auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("server.log", trunc); + auto file_sink = + std::make_shared<spdlog::sinks::basic_file_sink_mt>("server.log", true); std::vector<spdlog::sink_ptr> log_sinks; log_sinks.emplace_back(sink); - log_sinks.emplace_back(file_sink); - logger = std::make_shared<spdlog::logger>("server", log_sinks.begin(), log_sinks.end()); + if (to_file) log_sinks.emplace_back(file_sink); + + logger = std::make_shared<spdlog::logger>("server", log_sinks.begin(), + log_sinks.end()); spdlog::register_logger(logger); spdlog::flush_every(std::chrono::seconds(1)); diff --git a/server/src/util/io.h b/server/src/util/io.h index 437b465..7f6e3a8 100644 --- a/server/src/util/io.h +++ b/server/src/util/io.h @@ -3,6 +3,6 @@ namespace io { extern std::shared_ptr<spdlog::logger> logger; -void init(const bool &trunc); +void init(const bool &to_file); void read_file(const std::string_view name, std::vector<char> &out); }; // namespace io |