fixed WIN32 compatibility
[NeonServV5.git] / src / QServer.c
index fd10beb46cd3965fab8a651b50d70160b8b99a8a..1f0d435e937ab569a1bec34b310cc48578c0836c 100644 (file)
 #include "ConfigParser.h"
 #include "bots.h"
 
+#ifdef WIN32
+typedef uint32_t socklen_t;
+#endif
+
 #define QSERVER_TIMEOUT 30
 #define QSERVER_MAXCLIENTS 100
 
@@ -52,7 +56,7 @@ void qserver_init() {
         if (server_sockfd < 0) 
             return;
         struct sockaddr_in serv_addr;
-        bzero((char *) &serv_addr, sizeof(serv_addr));
+        memset(&serv_addr, 0, sizeof(serv_addr));
         int portno = get_int_field("QServer.port");
         if(!portno)
             portno = 7499;
@@ -159,6 +163,8 @@ static void qserver_parse(struct QServerClient *client, char *line, int len) {
 }
 
 void qserver_loop() {
+    if(!get_int_field("QServer.enabled"))
+        return;
     struct timeval tv;
     struct QServerClient *client, *next, *prev = NULL;
     int ret;
@@ -199,15 +205,20 @@ void qserver_loop() {
     if(FD_ISSET(server_sockfd, &fds)) {
         //new connection
         struct sockaddr_in cli_addr;
+        #ifdef WIN32
+        int clilen;
+        #else
         socklen_t clilen;
+        #endif
+        client = malloc(sizeof(*client));
+        clilen = sizeof(cli_addr);
+        client->sock = accept(server_sockfd, (struct sockaddr *) &cli_addr, &clilen);
+        client->flags = 0;
         if(qserver_clientcount >= QSERVER_MAXCLIENTS) {
             qserver_put(client, "E :Maximum QServer Connections reached");
             close(client->sock);
+            free(client);
         } else {
-            client = malloc(sizeof(*client));
-            clilen = sizeof(cli_addr);
-            client->sock = accept(server_sockfd, (struct sockaddr *) &cli_addr, &clilen);
-            client->flags = 0;
             client->lastmsg = now;
             client->bufferpos = 0;
             client->references = 0;
@@ -284,7 +295,7 @@ static void qserver_parse_U(struct QServerClient *client, char **argv, int argc)
     }
     client->references++;
     client->flags |= QSERVER_FLAG_IN_USE;
-    get_userauth(cuser, qserver_parse_U_async, client);
+    get_userauth(cuser, 0, qserver_parse_U_async, client);
 }
 
 static USERAUTH_CALLBACK(qserver_parse_U_async) {
@@ -341,7 +352,7 @@ static void qserver_parse_ACU(struct QServerClient *client, char **argv, int arg
     if(argc > 1 && !stricmp(argv[1], "1")) {
         client->references++;
         client->flags |= QSERVER_FLAG_IN_USE;
-        get_userlist_if_invisible(chan, qserver_parse_ACU_async, client);
+        get_userlist_if_invisible(chan, 0, qserver_parse_ACU_async, client);
         return;
     }
     char tmpStr[6];