X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/34ef822e81b9f236b2f5edf52d351a0f82d59a0c..20a6f8130099fb69d67e7a58fa9935caa9be32c5:/projects/sgauthstress/proto.cpp diff --git a/projects/sgauthstress/proto.cpp b/projects/sgauthstress/proto.cpp index 7c547daf..b89681f6 100644 --- a/projects/sgauthstress/proto.cpp +++ b/projects/sgauthstress/proto.cpp @@ -7,6 +7,7 @@ #include #include "stg/common.h" +#include "stg/ia_packets.h" #include "proto.h" @@ -14,9 +15,9 @@ PROTO::PROTO(const std::string & server, uint16_t port, uint16_t localPort, int to) - : running(false), - stopped(true), - timeout(to) + : timeout(to), + running(false), + stopped(true) { uint32_t ip = inet_addr(server.c_str()); if (ip == INADDR_NONE) @@ -65,6 +66,7 @@ void * PROTO::Runner(void * data) { PROTO * protoPtr = static_cast(data); protoPtr->Run(); +return NULL; } bool PROTO::Start() @@ -111,7 +113,7 @@ return true; void PROTO::AddUser(const USER & user) { - users.insert(std::make_pair(user.GetIP(), user)); + users.push_back(std::make_pair(user.GetIP(), user)); struct pollfd pfd; pfd.fd = user.GetSocket(); pfd.events = POLLIN; @@ -121,10 +123,10 @@ void PROTO::AddUser(const USER & user) bool PROTO::Connect(uint32_t ip) { -std::map::const_iterator it; +/*std::vector >::const_iterator it; it = users.find(ip); if (it == users.end()) - return false; + return false;*/ // Do something @@ -133,10 +135,10 @@ return true; bool PROTO::Disconnect(uint32_t ip) { -std::map::const_iterator it; +/*std::vector >::const_iterator it; it = users.find(ip); if (it == users.end()) - return false; + return false;*/ // Do something @@ -163,8 +165,8 @@ bool PROTO::RecvPacket() { bool result = true; std::vector::iterator it; -std::map::iterator userIt(users.begin()); -for (it = pollFds.begin(); it != pollFds.end(); ++it) +std::vector >::iterator userIt; +for (it = pollFds.begin(), userIt = users.begin(); it != pollFds.end() && userIt != users.end(); ++it, ++userIt) { if (it->revents) { @@ -173,18 +175,16 @@ for (it = pollFds.begin(); it != pollFds.end(); ++it) struct sockaddr_in addr; socklen_t fromLen = sizeof(addr); char buffer[2048]; - int res = recvfrom(userIt->second.GetSocket(), buffer, sizeof(buffer), 0, (struct sockaddr*)&addr, &fromLen); + int res = recvfrom(userIt->second.GetSocket(), buffer, sizeof(buffer), 0, (struct sockaddr *)&addr, &fromLen); if (res == -1) { result = false; - ++userIt; continue; } result = result && HandlePacket(buffer, &(userIt->second)); } - ++userIt; } return result; @@ -203,6 +203,8 @@ it = processors.find(packetName); if (it != processors.end()) return (this->*it->second)(buffer, user); +printfd(__FILE__, "PROTO::HandlePacket() - invalid packet signature: '%s'\n", packetName.c_str()); + return false; } @@ -319,9 +321,10 @@ return true; bool PROTO::ERR_Proc(const void * buffer, USER * user) { const ERR_8 * packet = static_cast(buffer); +const char * ptr = static_cast(buffer); -for (int i = 0; i < len/8; i++) - Blowfish_Decrypt(&ctxPass, (uint32_t*)(buffer + i*8), (uint32_t*)(buffer + i*8 + 4)); +for (size_t i = 0; i < sizeof(ERR_8) / 8; i++) + Blowfish_Decrypt(user->GetCtx(), (uint32_t *)(ptr + i * 8), (uint32_t *)(ptr + i * 8 + 4)); //uint32_t len = packet->len; @@ -435,7 +438,7 @@ assert(sizeof(hdr) + length < 2048 && "Packet length must not exceed 2048 bytes" strncpy((char *)hdr.magic, IA_ID, 6); hdr.protoVer[0] = 0; -hdr.protoVer[1] = IA_PROTO_VER; +hdr.protoVer[1] = 8; // IA_PROTO_VER unsigned char buffer[2048]; memcpy(buffer, &hdr, sizeof(hdr));