-/* 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
}
queue->client = client;
client->queue = queue;
+ queue->iofd = NULL;
queue->penalty = 0;
queue->fastqueue_first = NULL;
queue->fastqueue_last = NULL;
return queue;
}
+static int calculate_penalty(char *message) {
+ int msglen = strlen(message);
+ int penalty = (2 + msglen / 100);
+ return penalty;
+}
+
int queue_add(struct ClientSocket *client, char* msg, int len) {
if(!client->queue)
client->queue = initialize_queue(client);
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));
return 1;
}
-static int calculate_penalty(char *message) {
- int msglen = strlen(message);
- int penalty = (2 + msglen / 100);
- return penalty;
-}
-
static void dequeue_bot(struct ClientSocket *client) {
if(client->queue->penalty >= MAXPENALTY) return;
int penalty;
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;