forked from kofany/psotnic
-
Notifications
You must be signed in to change notification settings - Fork 0
/
class-wasop.cpp
129 lines (112 loc) · 3.13 KB
/
class-wasop.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/***************************************************************************
* Copyright (C) 2003-2005 by Grzegorz Rusin *
* *
* 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. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "prots.h"
#include "global-var.h"
/* entry */
wasoptest::entry::entry(char *n, char *i, char *h)
{
char *tmp = push(NULL, n, "!", i, "@", h, NULL);
entry(tmp, 0);
}
wasoptest::entry::entry(char *m, int alloc)
{
if(alloc) mem_strcpy(mask, m);
else mask = m;
when = NOW;
}
wasoptest::entry::~entry()
{
free(mask);
}
wasoptest::wasoptest(int life)
{
since = NOW;
TOL = life;
data.removePtrs();
}
/* add */
int wasoptest::add(chanuser *p)
{
add(p->nick, p->ident, p->host);
return data.entries();
}
int wasoptest::add(char *nick, char *ident, char *host)
{
add(push(NULL, nick, "!", ident, "@", host, NULL), 0);
return data.entries();
}
int wasoptest::add(char *mask, int alloc)
{
data.addLast(new entry(mask, alloc));
DEBUG(printf("### add@: %s\n", mask));
return data.entries();
}
int wasoptest::remove(chanuser *user)
{
return remove(user->nick, user->ident, user->host);
}
int wasoptest::remove(char *nick, char *ident, char *host)
{
char *mask = push(NULL, nick, "!", ident, "@", host, NULL);
int ret = remove(mask);
free(mask);
return ret;
}
int wasoptest::remove(char *mask)
{
ptrlist<entry>::iterator p = data.begin();
while(p)
{
if(!strcmp(p->mask, mask))
{
data.removeLink(p);
return 1;
}
p++;
}
return 0;
}
int wasoptest::checkSplit(const char *str)
{
char arg[2][MAX_LEN];
str2words(arg[0], str, 2, MAX_LEN);
if(match("*.* *.*", str) && strlen(arg[0]) + strlen(arg[1]) + 1 == strlen(str))
return 1;
else return 0;
}
void wasoptest::expire()
{
ptrlist<entry>::iterator q, p = data.begin();
while(p)
{
if(p->when + TOL <= NOW)
{
q = p;
q++;;
data.removeLink(p);
p = q;
}
else p++;
}
}
bool wasoptest::isEmpty()
{
return data.entries() == 0;
}