-/* 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
#include "ConfigParser.h"
#include "bots.h"
+#ifdef WIN32
+typedef uint32_t socklen_t;
+#endif
+
#define QSERVER_TIMEOUT 30
#define QSERVER_MAXCLIENTS 100
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;
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, ...) {
}
void qserver_loop() {
+ if(!get_int_field("QServer.enabled"))
+ return;
struct timeval tv;
struct QServerClient *client, *next, *prev = NULL;
int ret;
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;
}
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) {
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];