-/* IRCQueue.c - NeonServ v5.5
+/* IRCQueue.c - NeonServ v5.6
* Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
#include "IRCQueue.h"
#include "ClientSocket.h"
#include "IOHandler.h"
+#include "tools.h"
+#include "log.h"
#define MAXPENALTY 8 /* 4 messages */
static struct BotQueue *initialize_queue(struct ClientSocket *client) {
struct BotQueue *queue = malloc(sizeof(*queue));
if (!queue) {
- perror("malloc() failed");
+ printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__);
return NULL;
}
queue->client = client;
client->queue = queue;
+ queue->iofd = NULL;
queue->penalty = 0;
queue->fastqueue_first = NULL;
queue->fastqueue_last = NULL;
if(!queue->iofd) {
struct timeval timeout;
gettimeofday(&timeout, NULL);
- queue->rem_penalty = (MAXPENALTY - queue->penalty) + 1;
+ if(queue->penalty >= MAXPENALTY)
+ queue->rem_penalty = (queue->penalty - MAXPENALTY)+1;
+ else
+ queue->rem_penalty = queue->penalty;
timeout.tv_sec += queue->rem_penalty;
queue->iofd = iohandler_timer(timeout, queue_callback);
+ queue->iofd->data = queue;
}
} else {
struct QueueEntry *entry = malloc(sizeof(*entry));
if (!entry) {
- perror("malloc() failed");
+ printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__);
return 0;
}
entry->msg = strdup(msg);
if(queue->penalty > 0) {
struct timeval timeout;
gettimeofday(&timeout, NULL);
- queue->rem_penalty = (MAXPENALTY - queue->penalty) + 1;
+ if(queue->penalty >= MAXPENALTY)
+ queue->rem_penalty = (queue->penalty - MAXPENALTY)+1;
+ else
+ queue->rem_penalty = queue->penalty;
timeout.tv_sec += queue->rem_penalty;
queue->iofd = iohandler_timer(timeout, queue_callback);
+ queue->iofd->data = queue;
} else {
queue->iofd = NULL;
queue->penalty = 0;