1 /* shroud's splitlist */
4 #include "../irc/irc.h"
6 #include "../core/hooks.h"
7 #include "../lib/version.h"
13 static void sphook_newserver(int hook
, void *arg
);
14 static void sphook_lostserver(int hook
, void *arg
);
15 static void sp_addsplit(const char *name
, time_t ts
, flag_t flags
);
18 registerhook(HOOK_SERVER_NEWSERVER
, &sphook_newserver
);
19 registerhook(HOOK_SERVER_LOSTSERVER
, &sphook_lostserver
);
21 array_init(&splitlist
, sizeof(splitserver
));
22 array_setlim1(&splitlist
, 5);
23 array_setlim2(&splitlist
, 5);
25 sp_addsplit("default.split.quakenet.org", getnettime(), SERVERTYPEFLAG_CRITICAL_SERVICE
| SERVERTYPEFLAG_SERVICE
);
31 deregisterhook(HOOK_SERVER_NEWSERVER
, &sphook_newserver
);
32 deregisterhook(HOOK_SERVER_LOSTSERVER
, &sphook_lostserver
);
34 for (i
= 0; i
< splitlist
.cursi
; i
++) {
35 freesstring(((splitserver
*)splitlist
.content
)[i
].name
);
38 array_free(&splitlist
);
41 static void sphook_newserver(int hook
, void *arg
) {
42 sp_deletesplit(serverlist
[(long)arg
].name
->content
);
45 static void sphook_lostserver(int hook
, void *arg
) {
46 server
*server
= &serverlist
[(long)arg
];
47 sp_addsplit(server
->name
->content
, getnettime(), getservertype(server
));
50 int sp_countsplitservers(flag_t orflags
) {
54 for (i
= 0; i
< splitlist
.cursi
; i
++)
55 if((((splitserver
*)splitlist
.content
)[i
].type
| orflags
) != 0)
61 void sp_deletesplit(const char *name
) {
64 if (splitlist
.cursi
== 0)
67 for (i
= splitlist
.cursi
- 1; i
>= 0; i
--) {
68 if (strcmp(name
, ((splitserver
*)splitlist
.content
)[i
].name
->content
) == 0) {
69 freesstring(((splitserver
*)splitlist
.content
)[i
].name
);
70 array_delslot(&splitlist
, i
);
75 static void sp_addsplit(const char *name
, time_t ts
, flag_t type
) {
79 slot
= array_getfreeslot(&splitlist
);
81 srv
= &(((splitserver
*)splitlist
.content
)[slot
]);
83 srv
->name
= getsstring(name
, HOSTLEN
);