aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorauth <[email protected]>2020-07-05 12:00:04 +0200
committerauth <[email protected]>2020-07-05 12:00:04 +0200
commit6a33a72c7b423afb143a67a3e88d27e4bcafd116 (patch)
tree93766d360a2eb76ec35362bb2645910f7297a742
parentMerge branch 'master' of github.com:auth12/loader (diff)
downloadloader-6a33a72c7b423afb143a67a3e88d27e4bcafd116.tar.xz
loader-6a33a72c7b423afb143a67a3e88d27e4bcafd116.zip
More assembler implementations.
Small changes to client on server.
-rw-r--r--client/src/assembler/assembler.cpp16
-rw-r--r--client/src/assembler/assembler.h4
-rw-r--r--client/src/main.cpp5
-rw-r--r--server/src/client/client.h15
-rw-r--r--server/src/main.cpp7
-rw-r--r--server/src/server/server.cpp11
6 files changed, 34 insertions, 24 deletions
diff --git a/client/src/assembler/assembler.cpp b/client/src/assembler/assembler.cpp
index 43816fd..5311833 100644
--- a/client/src/assembler/assembler.cpp
+++ b/client/src/assembler/assembler.cpp
@@ -1,14 +1,24 @@
#include "../include.h"
#include "assembler.h"
+void assembler::assembler::start() {}
+
void assembler::assembler::push(const std::vector<uintptr_t>& args) {
- for (auto it = args.rbegin(); it != args.rend(); ++it) {
- m_assembler.push(*it);
+ if (!m_x64) {
+ for (auto it = args.rbegin(); it != args.rend(); ++it) {
+ m_assembler.push(*it);
+ }
+ return;
}
+
+ // 64bit impl
}
+void assembler::assembler::call(const uintptr_t addr) {}
+
void assembler::assembler::end() {
- // epilogue here
+ if (m_x64) {
+ }
void* func;
m_runtime.add(&func, &m_code);
diff --git a/client/src/assembler/assembler.h b/client/src/assembler/assembler.h
index 390cd42..3dcdeaf 100644
--- a/client/src/assembler/assembler.h
+++ b/client/src/assembler/assembler.h
@@ -13,13 +13,15 @@ class assembler {
JitRuntime m_runtime;
x86::Assembler m_assembler;
+ bool m_x64;
public:
- assembler(const bool x64 = false) {
+ assembler(const bool x64 = false) : m_x64{x64} {
Environment env(x64 ? Environment::kArchX64 : Environment::kArchX86);
m_code.init(env);
m_code.attach(&m_assembler);
}
+
void start();
void push(const std::vector<uintptr_t> &args);
void call(const uintptr_t addr);
diff --git a/client/src/main.cpp b/client/src/main.cpp
index 727e3a0..8e742de 100644
--- a/client/src/main.cpp
+++ b/client/src/main.cpp
@@ -28,9 +28,6 @@ int main(int argc, char* argv[]) {
auto message = packet();
auto action = packet.act;
- // move ?
- int ret = -1;
-
if (action == tcp::packet_action::session) {
client.session_id = packet.session_id;
tcp::version_t v{0, 1, 0};
@@ -50,7 +47,7 @@ int main(int argc, char* argv[]) {
}
io::logger->info("{}:{}->{} {}", packet.id, packet.session_id, message,
- packet.act);
+ action);
});
while (client) {
diff --git a/server/src/client/client.h b/server/src/client/client.h
index 4dad02e..141ac67 100644
--- a/server/src/client/client.h
+++ b/server/src/client/client.h
@@ -15,7 +15,6 @@ class client {
public:
std::string hwid;
-
client() : m_socket{-1} {};
client(const int& socket, const std::string_view ip)
: m_socket{std::move(socket)}, m_ip{ip}, m_ssl{nullptr} {}
@@ -27,6 +26,8 @@ class client {
close(m_socket);
SSL_shutdown(m_ssl);
SSL_free(m_ssl);
+
+ m_socket = -1;
}
void reset() { std::time(&m_time); }
@@ -46,12 +47,12 @@ class client {
int stream(std::vector<char>& data, float* dur = nullptr);
int read_stream(std::vector<char>& out);
- int stream(std::string &str) {
+ int stream(std::string& str) {
std::vector<char> vec(str.begin(), str.end());
return stream(vec);
}
- int read_stream(std::string &str) {
+ int read_stream(std::string& str) {
std::vector<char> out;
int ret = read_stream(out);
str.assign(out.begin(), out.end());
@@ -60,8 +61,10 @@ class client {
void gen_session();
- int &get_socket() { return m_socket; }
- auto &get_ip() { return m_ip; }
- auto &get_session() { return m_session_id; }
+ int& get_socket() { return m_socket; }
+ auto& get_ip() { return m_ip; }
+ auto& get_session() { return m_session_id; }
+
+ operator bool() const { return m_ssl && m_socket > 0; }
};
}; // namespace tcp \ No newline at end of file
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 77269a9..e7e0253 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -26,12 +26,6 @@ int main(int argc, char* argv[]) {
});
client_server.disconnect_event.add([&](tcp::client& client) {
- auto it = std::find_if(client_server().begin(),
- client_server().end(), [&](tcp::client& c) {
- return client.get_socket() == c.get_socket();
- });
-
- client_server().erase(it);
client.cleanup();
io::logger->info("{} disconnected", client.get_ip());
@@ -67,6 +61,7 @@ int main(int argc, char* argv[]) {
});
client_server.timeout_event.add([&](tcp::client& client) {
+ client.cleanup();
io::logger->info("{} timed out.", client.get_ip());
});
diff --git a/server/src/server/server.cpp b/server/src/server/server.cpp
index 5996eb3..b7f7606 100644
--- a/server/src/server/server.cpp
+++ b/server/src/server/server.cpp
@@ -57,7 +57,13 @@ tcp::select_status tcp::server::peek() {
int maxfd = m_socket;
- for (auto& c : client_stack) {
+ for (int i = 0; i < client_stack.size(); i++) {
+ auto c = client_stack[i];
+ if(!c) {
+ client_stack.erase(client_stack.begin() + i);
+ continue;
+ }
+
const int s = c.get_socket();
FD_SET(s, &m_server_set);
@@ -144,9 +150,6 @@ void tcp::server::check_timeout() {
if (it != client_stack.end()) {
timeout_event.call(*it);
-
- it->cleanup();
- client_stack.erase(it);
}
}