]> git.stg.codes - stg.git/blobdiff - projects/sgauthstress/proto.cpp
Merge branch 'stg-2.409' into stg-2.409-radius
[stg.git] / projects / sgauthstress / proto.cpp
index 2e97fd2a0990c165c8d3089a0096866440f1a722..d1114f17aa105667e703ae1775870ea3f29a5b0f 100644 (file)
@@ -1,6 +1,10 @@
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
 #include <netdb.h>
 #include <arpa/inet.h>
 
+#include <csignal>
 #include <cerrno>
 #include <cstring>
 #include <cassert>
@@ -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<PROTO *>(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<std::pair<uint32_t, USER> >::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<std::pair<uint32_t, USER> >::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<std::pair<uint32_t, USER> >::iterator it;
 for (it = users.begin(); it != users.end(); ++it)
     {
@@ -222,7 +230,7 @@ bool PROTO::RecvPacket()
 bool result = true;
 std::vector<struct pollfd>::iterator it;
 std::list<std::pair<uint32_t, USER> >::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<const ERR_8 *>(buffer);
-const char * ptr = static_cast<const char *>(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++)