]>
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"
12 void sphook_newserver(int hook
, void *arg
);
13 void sphook_lostserver(int hook
, void *arg
);
16 registerhook(HOOK_SERVER_NEWSERVER
, &sphook_newserver
);
17 registerhook(HOOK_SERVER_LOSTSERVER
, &sphook_lostserver
);
19 array_init(&splitlist
, sizeof(splitserver
));
20 array_setlim1(&splitlist
, 5);
21 array_setlim2(&splitlist
, 5);
23 sp_addsplit("default.split.quakenet.org", getnettime());
29 deregisterhook(HOOK_SERVER_NEWSERVER
, &sphook_newserver
);
30 deregisterhook(HOOK_SERVER_LOSTSERVER
, &sphook_lostserver
);
32 for (i
= 0; i
< splitlist
.cursi
; i
++) {
33 freesstring(((splitserver
*)splitlist
.content
)[i
].name
);
36 array_free(&splitlist
);
39 void sphook_newserver(int hook
, void *arg
) {
40 sp_deletesplit(serverlist
[(int)arg
].name
->content
);
43 void sphook_lostserver(int hook
, void *arg
) {
44 sp_addsplit(serverlist
[(int)arg
].name
->content
, getnettime());
47 int sp_countsplitservers(void) {
48 return splitlist
.cursi
;
51 int sp_issplitserver(const char *name
) {
54 for (i
= 0; i
< splitlist
.cursi
; i
++) {
55 if (strcmp(name
, ((splitserver
*)splitlist
.content
)[i
].name
->content
) == 0)
62 void sp_deletesplit(const char *name
) {
65 if (splitlist
.cursi
== 0)
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
);
76 void sp_addsplit(const char *name
, time_t ts
) {
80 slot
= array_getfreeslot(&splitlist
);
82 srv
= &(((splitserver
*)splitlist
.content
)[slot
]);
84 srv
->name
= getsstring(name
, HOSTLEN
);