*** VERSION 5.4.0 ***
[NeonServV5.git] / src / QServer.c
index fd0e8e6676a1486bc5ab12059dbf265a279ddfe2..a9e36faa7b21d907ff6b70cf36dd69ed4964af06 100644 (file)
@@ -1,4 +1,4 @@
-/* QServer.c - NeonServ v5.3
+/* QServer.c - NeonServ v5.4
  * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -163,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;
@@ -203,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;
@@ -288,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) {
@@ -345,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];