/*
* -------------------------------------------------------
* Copyright (C) 2002-2007 Tommi Saviranta <wnd@iki.fi>
* (C) 1998-2002 Sebastian Kienzl <zap@riot.org>
* -------------------------------------------------------
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif /* ifdef HAVE_CONFIG_H */
#ifdef CTCPREPLIES
#include "ignore.h"
#include "common.h"
#include "table.h"
#include "etc.h"
#include <stdlib.h>
typedef struct {
char *hostname;
int ttl;
int type;
} ignore_type;
typedef struct {
ignore_type **data;
int amount;
} ignores_type;
ignores_type ignores;
void
ignore_add(const char *hostname, int ttl, int type)
{
int i, indx;
if (hostname == NULL) return;
/* Already in table ? */
for (i = 0; i < ignores.amount; i++) {
if (ignores.data[i] != NULL
&& xstrcasecmp(ignores.data[i]->hostname,
hostname) == 0
&& ignores.data[i]->type == type) {
return;
}
}
ignores.data = (ignore_type **) table_add_item((void **) ignores.data,
sizeof(ignore_type), &ignores.amount, &indx);
ignores.data[indx]->hostname = xstrdup(hostname);
ignores.data[indx]->ttl = ttl;
ignores.data[indx]->type = type;
} /* void ignore_add(const char *hostname, int ttl, int type) */
void
ignore_del(const char *hostname)
{
int i;
for (i = 0; i < ignores.amount; i++) {
if (ignores.data[i] != NULL
&& (xstrcasecmp(ignores.data[i]->hostname,
hostname) == 0)) {
xfree(ignores.data[i]->hostname);
ignores.data = (ignore_type **)
table_rem_item((void **) ignores.data,
i, &ignores.amount);
}
}
} /* void ignore_del(const char *hostname) */
static void
ignore_del_by_number(int i)
{
if (i < ignores.amount && ignores.data[i] != NULL) {
xfree(ignores.data[i]->hostname);
ignores.data = (ignore_type **)
table_rem_item((void **) ignores.data,
i, &ignores.amount);
}
} /* void ignore_del_by_number(int i) */
void
ignores_process(void)
{
int i;
for (i = 0; i < ignores.amount; i++) {
if (ignores.data[i] != NULL) {
if (ignores.data[i]->ttl != 0) { /* > 0 */
ignores.data[i]->ttl--;
} else {
ignore_del_by_number(i);
}
}
}
} /* void ignores_process(void) */
int
is_ignore(const char *hostname, int type)
{
int i;
for (i = 0; i < ignores.amount; i++) {
if (ignores.data[i] != NULL
&& (xstrcasecmp(ignores.data[i]->hostname,
hostname) == 0)
&& (ignores.data[i]->type == type)) {
return 1;
}
}
return 0;
} /* int is_ignore(const char *hostname, int type) */
#endif /* ifdef CTCPREPLIES */
syntax highlighted by Code2HTML, v. 0.9.1