]> jfr.im git - irc/quakenet/newserv.git/blob - splitlist/splitlist.c
add module version
[irc/quakenet/newserv.git] / splitlist / splitlist.c
1 /* shroud's splitlist */
2
3 #include <string.h>
4 #include "../irc/irc.h"
5 #include "splitlist.h"
6 #include "../core/hooks.h"
7
8 MODULE_VERSION("");
9
10 array splitlist;
11
12 void sphook_newserver(int hook, void *arg);
13 void sphook_lostserver(int hook, void *arg);
14
15 void _init(void) {
16 registerhook(HOOK_SERVER_NEWSERVER, &sphook_newserver);
17 registerhook(HOOK_SERVER_LOSTSERVER, &sphook_lostserver);
18
19 array_init(&splitlist, sizeof(splitserver));
20 array_setlim1(&splitlist, 5);
21 array_setlim2(&splitlist, 5);
22
23 sp_addsplit("default.split.quakenet.org", getnettime());
24 }
25
26 void _fini(void) {
27 int i;
28
29 deregisterhook(HOOK_SERVER_NEWSERVER, &sphook_newserver);
30 deregisterhook(HOOK_SERVER_LOSTSERVER, &sphook_lostserver);
31
32 for (i = 0; i < splitlist.cursi; i++) {
33 freesstring(((splitserver*)splitlist.content)[i].name);
34 }
35
36 array_free(&splitlist);
37 }
38
39 void sphook_newserver(int hook, void *arg) {
40 sp_deletesplit(serverlist[(int)arg].name->content);
41 }
42
43 void sphook_lostserver(int hook, void *arg) {
44 sp_addsplit(serverlist[(int)arg].name->content, getnettime());
45 }
46
47 int sp_countsplitservers(void) {
48 return splitlist.cursi;
49 }
50
51 int sp_issplitserver(const char *name) {
52 int i;
53
54 for (i = 0; i < splitlist.cursi; i++) {
55 if (strcmp(name, ((splitserver*)splitlist.content)[i].name->content) == 0)
56 return 1;
57 }
58
59 return 0;
60 }
61
62 void sp_deletesplit(const char *name) {
63 int i;
64
65 if (splitlist.cursi == 0)
66 return;
67
68 for (i = splitlist.cursi - 1; i >= 0; i--) {
69 if (strcmp(name, ((splitserver*)splitlist.content)[i].name->content) == 0) {
70 freesstring(((splitserver*)splitlist.content)[i].name);
71 array_delslot(&splitlist, i);
72 }
73 }
74 }
75
76 void sp_addsplit(const char *name, time_t ts) {
77 int slot;
78 splitserver *srv;
79
80 slot = array_getfreeslot(&splitlist);
81
82 srv = &(((splitserver*)splitlist.content)[slot]);
83
84 srv->name = getsstring(name, HOSTLEN);
85 srv->ts = ts;
86 }