]> git.stg.codes - stg.git/blobdiff - projects/sgauth/web.cpp
Always think about \0 and block boundry during encryption.
[stg.git] / projects / sgauth / web.cpp
index caec33a00391cf0ff2b5e61810d36982391a3f17..61cd2b5846211b4840465dde392c84db9ba62f2c 100644 (file)
  $Date: 2010/03/15 12:58:17 $
  */
 
  $Date: 2010/03/15 12:58:17 $
  */
 
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
 #include <libintl.h>
 
 #include <libintl.h>
 
+#include <csignal>
+#include <cstdio>
+#include <cstring>
+#include <ctime>
+
+#include "stg/common.h"
+#include "stg/ia.h"
 #include "web.h"
 #include "web.h"
-#include "common.h"
-#include "ia_auth_c.h"
 
 extern WEB * web;
 extern IA_CLIENT_PROT * clnp;
 
 extern WEB * web;
 extern IA_CLIENT_PROT * clnp;
@@ -42,10 +44,15 @@ extern IA_CLIENT_PROT * clnp;
 //---------------------------------------------------------------------------
 #ifndef WIN32
 void * RunWeb(void *)
 //---------------------------------------------------------------------------
 #ifndef WIN32
 void * RunWeb(void *)
+{
+sigset_t signalSet;
+sigfillset(&signalSet);
+pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
+
 #else
 unsigned long WINAPI RunWeb(void *)
 #else
 unsigned long WINAPI RunWeb(void *)
-#endif
 {
 {
+#endif
 while (1)
     web->Run();
 return NULL;
 while (1)
     web->Run();
 return NULL;
@@ -56,8 +63,7 @@ WEB::WEB()
       listenSocket(0),
       outerSocket(0),
       refreshPeriod(0),
       listenSocket(0),
       outerSocket(0),
       refreshPeriod(0),
-      listenWebAddr(0),
-      outerAddrLen(0)
+      listenWebAddr(0)
 {
 #ifdef WIN32
 res = WSAStartup(MAKEWORD(2,0), &wsaData);
 {
 #ifdef WIN32
 res = WSAStartup(MAKEWORD(2,0), &wsaData);
@@ -67,6 +73,8 @@ for (int i = 0; i < DIR_NUM; i++)
     dirName[i] = "-";
 
 refreshPeriod = 5;
     dirName[i] = "-";
 
 refreshPeriod = 5;
+
+memset(&ls, 0, sizeof(ls));
 }
 //---------------------------------------------------------------------------
 void WEB::Start()
 }
 //---------------------------------------------------------------------------
 void WEB::Start()
@@ -89,13 +97,14 @@ pthread_create(&thread, NULL, RunWeb, NULL);
 void WEB::PrepareNet()
 {
 listenSocket = socket(PF_INET, SOCK_STREAM, 0);
 void WEB::PrepareNet()
 {
 listenSocket = socket(PF_INET, SOCK_STREAM, 0);
+
+struct sockaddr_in listenAddr;
 listenAddr.sin_family = AF_INET;
 listenAddr.sin_port = htons(LISTEN_PORT);
 listenAddr.sin_addr.s_addr = listenWebAddr;
 
 listenAddr.sin_family = AF_INET;
 listenAddr.sin_port = htons(LISTEN_PORT);
 listenAddr.sin_addr.s_addr = listenWebAddr;
 
-int lng = 1;
-
 #ifndef WIN32
 #ifndef WIN32
+int lng = 1;
 if (0 != setsockopt(listenSocket, SOL_SOCKET, SO_REUSEADDR, &lng, 4))
     {
     printf("Setsockopt Fail\n");
 if (0 != setsockopt(listenSocket, SOL_SOCKET, SO_REUSEADDR, &lng, 4))
     {
     printf("Setsockopt Fail\n");
@@ -120,8 +129,6 @@ if (res == -1)
     printf("Listen failed.\n");
     exit(0);
     }
     printf("Listen failed.\n");
     exit(0);
     }
-
-outerAddrLen = sizeof(outerAddr);
 }
 //---------------------------------------------------------------------------
 void WEB::SetRefreshPagePeriod(int p)
 }
 //---------------------------------------------------------------------------
 void WEB::SetRefreshPagePeriod(int p)
@@ -142,6 +149,14 @@ PrepareNet();
 char recvBuffer[4096];
 while (1)
     {
 char recvBuffer[4096];
 while (1)
     {
+    struct sockaddr_in outerAddr;
+
+    #ifndef WIN32
+    socklen_t outerAddrLen = sizeof(outerAddr);
+    #else
+    int outerAddrLen = sizeof(outerAddr);
+    #endif
+
     outerSocket = accept(listenSocket, (struct sockaddr*)&outerAddr, &outerAddrLen);
     if (outerSocket == -1)
         {
     outerSocket = accept(listenSocket, (struct sockaddr*)&outerAddr, &outerAddrLen);
     if (outerSocket == -1)
         {
@@ -174,7 +189,8 @@ while (1)
         #ifdef WIN32
         Sleep(1000);
         #else
         #ifdef WIN32
         Sleep(1000);
         #else
-        usleep(1000000);
+        struct timespec ts = {1, 0};
+        nanosleep(&ts, NULL);
         #endif
         exit(0);
         }
         #endif
         exit(0);
         }