aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authoralpine <[email protected]>2020-06-18 22:14:03 +0200
committeralpine <[email protected]>2020-06-18 22:14:03 +0200
commite766ee369c75fdfdd41c810582f9ed99349fe672 (patch)
tree257ed7e911b325f22cb8425fbc926bc3cc37eed5 /server
parentRenamed uid to session id. (diff)
downloadloader-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.cpp2
-rw-r--r--server/src/client/client.h6
-rw-r--r--server/src/main.cpp23
-rw-r--r--server/src/server/packet.h16
-rw-r--r--server/src/server/server.cpp2
-rw-r--r--server/src/util/io.cpp14
-rw-r--r--server/src/util/io.h2
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