X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/cf342bafa3e74d9af6f22479436ca20ad654e220..3b51da05ef42ecf59b78a6c29664d3e555bc57da:/projects/sgauthstress/proto.cpp?ds=sidebyside diff --git a/projects/sgauthstress/proto.cpp b/projects/sgauthstress/proto.cpp index 2e97fd2a..d1114f17 100644 --- a/projects/sgauthstress/proto.cpp +++ b/projects/sgauthstress/proto.cpp @@ -1,6 +1,10 @@ +#include +#include +#include #include #include +#include #include #include #include @@ -77,6 +81,10 @@ pthread_mutex_destroy(&mutex); void * PROTO::Runner(void * data) { +sigset_t signalSet; +sigfillset(&signalSet); +pthread_sigmask(SIG_BLOCK, &signalSet, NULL); + PROTO * protoPtr = static_cast(data); protoPtr->Run(); return NULL; @@ -126,7 +134,7 @@ return true; void PROTO::AddUser(const USER & user, bool connect) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); users.push_back(std::make_pair(user.GetIP(), user)); users.back().second.InitNetwork(); @@ -145,7 +153,7 @@ if (connect) bool PROTO::Connect(uint32_t ip) { std::list >::iterator it; -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); it = std::find_if(users.begin(), users.end(), HasIP(ip)); if (it == users.end()) return false; @@ -158,7 +166,7 @@ return RealConnect(&it->second); bool PROTO::Disconnect(uint32_t ip) { std::list >::iterator it; -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); it = std::find_if(users.begin(), users.end(), HasIP(ip)); if (it == users.end()) return false; @@ -174,7 +182,7 @@ while (running) { int res; { - STG_LOCKER lock(&mutex, __FILE__, __LINE__); + STG_LOCKER lock(&mutex); res = poll(&pollFds.front(), pollFds.size(), timeout); } if (res < 0) @@ -197,7 +205,7 @@ stopped = true; void PROTO::CheckTimeouts() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::list >::iterator it; for (it = users.begin(); it != users.end(); ++it) { @@ -222,7 +230,7 @@ bool PROTO::RecvPacket() bool result = true; std::vector::iterator it; std::list >::iterator userIt; -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); for (it = pollFds.begin(), userIt = users.begin(); it != pollFds.end() && userIt != users.end(); ++it, ++userIt) { if (it->revents) @@ -381,11 +389,8 @@ bool PROTO::INFO_Proc(const void * buffer, USER * user) return true; } -bool PROTO::ERR_Proc(const void * buffer, USER * user) +bool PROTO::ERR_Proc(const void * /*buffer*/, USER * user) { -const ERR_8 * packet = static_cast(buffer); -const char * ptr = static_cast(buffer); - //uint32_t len = packet->len; #ifdef ARCH_BE @@ -502,9 +507,8 @@ hdr.protoVer[0] = 0; hdr.protoVer[1] = 8; // IA_PROTO_VER unsigned char buffer[2048]; -memset(buffer, 0, sizeof(buffer)); -memcpy(buffer, packet, length); memcpy(buffer, &hdr, sizeof(hdr)); +memcpy(buffer + sizeof(hdr), packet, length); size_t offset = sizeof(HDR_8); for (size_t i = 0; i < IA_LOGIN_LEN / 8; i++)