X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FQServer.c;h=2d77a6b2e92c2fcb837d5597141436d8c59db03d;hb=78e040af3fcc36ab684611c0f98b4381ff420878;hp=fd10beb46cd3965fab8a651b50d70160b8b99a8a;hpb=82f0cd1f3c2c0160944b0c627581f1994583e2b2;p=NeonServV5.git diff --git a/src/QServer.c b/src/QServer.c index fd10beb..2d77a6b 100644 --- a/src/QServer.c +++ b/src/QServer.c @@ -1,4 +1,4 @@ -/* QServer.c - NeonServ v5.3 +/* QServer.c - NeonServ v5.5 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -25,6 +25,10 @@ #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; @@ -69,12 +73,13 @@ static int qserver_write(struct QServerClient *client, char* msg, int len) { if (!(client && !(client->flags & QSERVER_FLAG_DISCONNECT))) return 0; if(!len) len = strlen(msg); + int ret = 1; #ifdef WIN32 - send(client->sock, msg, len, 0); + ret = send(client->sock, msg, len, 0); #else - write(client->sock, msg, len); + ret = write(client->sock, msg, len); #endif - return 1; + return ret; } static void qserver_put(struct QServerClient *client, const char *text, ...) { @@ -159,6 +164,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 +206,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 +296,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 +353,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];