From 9b3487d567ae68a97cb99e9d288718095c4c310d Mon Sep 17 00:00:00 2001 From: Alec Obradovich Date: Mon, 5 Nov 2018 06:57:40 -0600 Subject: [PATCH] scroob applied --- resources/server/_mem_schema.db | Bin 20480 -> 28672 bytes src/common/sock/packet.cpp | 11 ++++++---- src/server/hosts/master.hpp | 10 +++++++-- src/server/hosts/master_client.cpp | 33 +++++++++++++++++------------ src/server/hosts/slave.cpp | 9 ++++++++ src/server/hosts/slave.hpp | 5 ++++- src/server/main.cpp | 19 +++++++++-------- src/server/sock/pool.hpp | 8 +++---- src/web/script.js | 10 +++++---- src/web/style.css | 8 +++---- 10 files changed, 72 insertions(+), 41 deletions(-) diff --git a/resources/server/_mem_schema.db b/resources/server/_mem_schema.db index 58faeed7594a131e3bb4447fa07a856fb6a0c660..bd290b09d20a3659d084c5c46eaf4c70d1a34946 100644 GIT binary patch delta 497 zcmZozz}WDBae}lUGXnzyI}o!1F%uB8P1G@#WMWae}lU69WSSD-go~(?lI(Q6>gG#wcFCs|+lB$_)Jae0TYj`4(*!6j;w| zQOnFOE-%m6=vk7Ol#?17>>3pB?HU;jXRtU2xjKfpDug&X`M4@1z{Mwf^O{Va#4F5X Y$TC@y&wvwTCkM#V%|OEq7bOS)0JT{lYXATM diff --git a/src/common/sock/packet.cpp b/src/common/sock/packet.cpp index 3e1ffeb..7cdfad8 100644 --- a/src/common/sock/packet.cpp +++ b/src/common/sock/packet.cpp @@ -94,18 +94,21 @@ int sosc::Packet::Parse(const std::string& data, std::string* extra) { switch(raw[ptr]) { default: region_length = raw[ptr]; + ++ptr; break; case 254: if(ptr + 2 >= length) return PCK_ERR; region_length = net::ntohv(data, ptr + 1); + ptr += 3; break; case 255: if(ptr + 4 >= length) return PCK_ERR; region_length = net::ntohv(data, ptr + 1); + ptr += 5; break; } @@ -113,12 +116,12 @@ int sosc::Packet::Parse(const std::string& data, std::string* extra) { body_length += region_length; } - if(body_length - ptr != 0) + if(body_length + ptr < expected_length) return PCK_ERR; - for(int i = 0; i < region_count; ++i) { - this->regions[i] = data.substr(ptr, region_lengths[i]); - ptr += region_lengths[i]; + for(const auto region_length : region_lengths) { + this->regions.push_back(data.substr(ptr, region_length)); + ptr += region_length; } if(length > expected_length && extra != nullptr) diff --git a/src/server/hosts/master.hpp b/src/server/hosts/master.hpp index b5b7a98..9ce99cc 100644 --- a/src/server/hosts/master.hpp +++ b/src/server/hosts/master.hpp @@ -24,8 +24,14 @@ public: bool Close(); bool Close(const Packet& message); - ~MasterClient(); + ~MasterClient() { this->Close(); }; private: + bool IsAuthed(); + + bool ProcessLogin(Packet& pck); + bool ProcessRegistration(Packet& pck); + bool ListServers(Packet& pck); + enum MasterToClientId { kLoginResponse = 0, kRegisterResponse, @@ -69,7 +75,7 @@ public: bool Close(); bool Close(const Packet& message); - ~MasterIntra(); + ~MasterIntra() { this->Close(); } private: bool Authentication(Packet& pck); bool StatusUpdate(Packet& pck); diff --git a/src/server/hosts/master_client.cpp b/src/server/hosts/master_client.cpp index 017aa0f..ce69814 100644 --- a/src/server/hosts/master_client.cpp +++ b/src/server/hosts/master_client.cpp @@ -20,25 +20,31 @@ void sosc::MasterClientPool::SetupQueries(db::Queries *queries) { "VALUES (?, ?, ?, 0, CURRENT_TIMESTAMP)" )); -#define QRY_USER_GET_PWD_HASH 2 +#define QRY_USER_NAME_EXISTS 2 queries->push_back(new db::Query( - "SELECT `ID`, `PASS_HASH` FROM `USERS` " - "WHERE `USERNAME` = ?" + "SELECT COUNT(*) FROM `USERS` " + "WHERE LOWER(`USERNAME`) = LOWER(?)" )); -#define QRY_USER_GENERATE_KEY 3 +#define QRY_USER_GET_PWD_HASH 3 + queries->push_back(new db::Query( + "SELECT `ID`, `PASS_HASH` FROM `USERS` " + "WHERE LOWER(`USERNAME`) = LOWER(?)" + )); + +#define QRY_USER_GENERATE_KEY 4 queries->push_back(new db::Query( "INSERT OR IGNORE INTO `USER_KEYS` " "(`ID`, `SECRET`) VALUES (?, RANDOMBLOB(128))" )); -#define QRY_USER_GET_KEY 4 +#define QRY_USER_GET_KEY 5 queries->push_back(new db::Query( "SELECT `SECRET` FROM `USER_KEYS` " "WHERE `ID` = ?" )); -#define QRY_USER_CHECK_KEY 5 +#define QRY_USER_CHECK_KEY 6 queries->push_back(new db::Query( "SELECT COUNT(*) FROM `USER_KEYS` " "WHERE `ID` = ? AND `SECRET` = ?" @@ -67,19 +73,20 @@ bool sosc::MasterClient::Process(const db::Queries *queries) { this->queries = queries; switch(pck.GetId()) { case kLoginRequest: - - break; + return ProcessLogin(pck); case kRegisterRequest: - - break; + return ProcessRegistration(pck); case kServerListRequest: - - break; + return ListServers(pck); default: return this->Close(); } } +bool sosc::MasterClient::IsAuthed() { + +} + bool sosc::MasterClient::Close() { this->sock.Close(); return false; @@ -87,5 +94,5 @@ bool sosc::MasterClient::Close() { bool sosc::MasterClient::Close(const Packet& message) { this->sock.Send(message); - this->Close(); + return this->Close(); } \ No newline at end of file diff --git a/src/server/hosts/slave.cpp b/src/server/hosts/slave.cpp index 82aa144..5d4caa4 100644 --- a/src/server/hosts/slave.cpp +++ b/src/server/hosts/slave.cpp @@ -4,3 +4,12 @@ sosc::SlaveClient::SlaveClient(const ScapeConnection& client) { this->sock = client; } +bool sosc::SlaveClient::Close() { + this->sock.Close(); + return false; +} + +bool sosc::SlaveClient::Close(const Packet& message) { + this->sock.Send(message); + return this->Close(); +} diff --git a/src/server/hosts/slave.hpp b/src/server/hosts/slave.hpp index a37ef07..fbe15d0 100644 --- a/src/server/hosts/slave.hpp +++ b/src/server/hosts/slave.hpp @@ -13,7 +13,10 @@ public: SlaveClient() = delete; explicit SlaveClient(const ScapeConnection& client); - ~SlaveClient(); + bool Close(); + bool Close(const Packet& message); + + ~SlaveClient() { this->Close(); } private: ScapeConnection sock; }; diff --git a/src/server/main.cpp b/src/server/main.cpp index fee8db2..241bcd7 100644 --- a/src/server/main.cpp +++ b/src/server/main.cpp @@ -28,6 +28,7 @@ int main(int argc, char **argv) { return -1; if(argv[1][0] == 'm') { + master_client(8008, sosc::poolinfo_t()); //master_intra(1234, sosc::poolinfo_t()); } else { @@ -41,7 +42,7 @@ bool master_intra(uint16_t port, const sosc::poolinfo_t& info) { using namespace sosc; IntraServer server; - IntraClient* client; + IntraClient client; if(!server.Listen(port)) return false; @@ -49,8 +50,8 @@ bool master_intra(uint16_t port, const sosc::poolinfo_t& info) { pool.Configure(info); pool.Start(); - while(server.Accept(client = new IntraClient())) - pool.AddClient(MasterIntra(client)); + while(server.Accept(&client)) + pool.AddClient(new MasterIntra(client)); pool.Stop(); return true; @@ -60,7 +61,7 @@ bool master_client(uint16_t port, const sosc::poolinfo_t& info) { using namespace sosc; ScapeServer server; - ScapeConnection* client; + ScapeConnection client; if(!server.Listen(port, true)) return false; @@ -68,8 +69,8 @@ bool master_client(uint16_t port, const sosc::poolinfo_t& info) { pool.Configure(info); pool.Start(); - while(server.Accept(client = new ScapeConnection())) - pool.AddClient(MasterClient(client)); + while(server.Accept(&client)) + pool.AddClient(new MasterClient(client)); pool.Stop(); return true; @@ -79,7 +80,7 @@ bool slave(uint16_t port, const sosc::poolinfo_t& info) { using namespace sosc; ScapeServer server; - ScapeConnection* client; + ScapeConnection client; if(!server.Listen(port)) return false; @@ -87,8 +88,8 @@ bool slave(uint16_t port, const sosc::poolinfo_t& info) { pool.Configure(info); pool.Start(); - while(server.Accept(client = new ScapeConnection())) - pool.AddClient(SlaveClient(client)); + while(server.Accept(&client)) + pool.AddClient(new SlaveClient(client)); pool.Stop(); return true; diff --git a/src/server/sock/pool.hpp b/src/server/sock/pool.hpp index 80bb4fa..7992f65 100644 --- a/src/server/sock/pool.hpp +++ b/src/server/sock/pool.hpp @@ -240,7 +240,7 @@ void Pool::Stack::StackThread() { while(this->is_running) { for(auto client = this->clients.begin(); - client != this->clients.end() && this->clients.size() > 0; + client != this->clients.end(); ++client) { if(!this->is_running) @@ -248,10 +248,10 @@ void Pool::Stack::StackThread() { this->clients_mtx.lock(); if(!this->pool->ProcessClient - (client, &this->pool->context, &this->queries)) + (*client, &this->pool->context, &this->queries)) { - this->clients.erase(client); - delete client; + delete *client; + client = this->clients.erase(client); } this->clients_mtx.unlock(); } diff --git a/src/web/script.js b/src/web/script.js index a3766ed..42b3616 100644 --- a/src/web/script.js +++ b/src/web/script.js @@ -81,8 +81,8 @@ function pack(id, regions) { throw Error("REGIONS ARGUMENT MALFORMED"); let pck; - let size = 8; - let head_size = size; + let size = 0; + let head_size = 8; for(let i in regions) { if(typeof regions[i] === "string") regions[i] = regions[i].toByteArray(); @@ -103,8 +103,8 @@ function pack(id, regions) { pck = new Uint8Array(size); pck.set(MAHOU, 0); pck.set(size.packUint32(), 2); - pck[6] = regions.length; - pck[7] = Math.min(id, 255); + pck[6] = Math.min(id, 255); + pck[7] = regions.length; let head_ptr = 8; let body_ptr = head_size; @@ -127,6 +127,8 @@ function pack(id, regions) { body_ptr += length; } + console.log(regions); + console.log(pck); return pck; } diff --git a/src/web/style.css b/src/web/style.css index c764d4e..c3abb80 100644 --- a/src/web/style.css +++ b/src/web/style.css @@ -2,10 +2,10 @@ body { padding-top: 36px; font-family: monospace; text-align: center; - /*background: #000; - color: #fff;*/ - background: #fff; - color: #000; + background: #000; + color: #fff; + /*background: #fff; + color: #000;*/ } .hidden {