]>
jfr.im git - irc/quakenet/newserv.git/blob - splitlist/splitlist.c
1 /* shroud's splitlist */
4 #include "../irc/irc.h"
6 #include "../core/hooks.h"
7 #include "../lib/version.h"
13 void sphook_newserver(int hook
, void *arg
);
14 void sphook_lostserver(int hook
, void *arg
);
17 registerhook(HOOK_SERVER_NEWSERVER
, &sphook_newserver
);
18 registerhook(HOOK_SERVER_LOSTSERVER
, &sphook_lostserver
);
20 array_init(&splitlist
, sizeof(splitserver
));
21 array_setlim1(&splitlist
, 5);
22 array_setlim2(&splitlist
, 5);
24 sp_addsplit("default.split.quakenet.org", getnettime());
30 deregisterhook(HOOK_SERVER_NEWSERVER
, &sphook_newserver
);
31 deregisterhook(HOOK_SERVER_LOSTSERVER
, &sphook_lostserver
);
33 for (i
= 0; i
< splitlist
.cursi
; i
++) {
34 freesstring(((splitserver
*)splitlist
.content
)[i
].name
);
37 array_free(&splitlist
);
40 void sphook_newserver(int hook
, void *arg
) {
41 sp_deletesplit(serverlist
[(long)arg
].name
->content
);
44 void sphook_lostserver(int hook
, void *arg
) {
45 sp_addsplit(serverlist
[(long)arg
].name
->content
, getnettime());
48 int sp_countsplitservers(void) {
49 return splitlist
.cursi
;
52 int sp_issplitserver(const char *name
) {
55 for (i
= 0; i
< splitlist
.cursi
; i
++) {
56 if (strcmp(name
, ((splitserver
*)splitlist
.content
)[i
].name
->content
) == 0)
63 void sp_deletesplit(const char *name
) {
66 if (splitlist
.cursi
== 0)
69 for (i
= splitlist
.cursi
- 1; i
>= 0; i
--) {
70 if (strcmp(name
, ((splitserver
*)splitlist
.content
)[i
].name
->content
) == 0) {
71 freesstring(((splitserver
*)splitlist
.content
)[i
].name
);
72 array_delslot(&splitlist
, i
);
77 void sp_addsplit(const char *name
, time_t ts
) {
81 slot
= array_getfreeslot(&splitlist
);
83 srv
= &(((splitserver
*)splitlist
.content
)[slot
]);
85 srv
->name
= getsstring(name
, HOSTLEN
);