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
);
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(), SERVERTYPEFLAG_CRITICAL_SERVICE
| SERVERTYPEFLAG_SERVICE
);
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 static void sphook_newserver(int hook
, void *arg
) {
41 sp_deletesplit(serverlist
[(long)arg
].name
->content
);
44 static void sphook_lostserver(int hook
, void *arg
) {
45 server
*server
= &serverlist
[(long)arg
];
46 sp_addsplit(server
->name
->content
, getnettime(), getservertype(server
));
49 int sp_countsplitservers(flag_t orflags
) {
53 for (i
= 0; i
< splitlist
.cursi
; i
++)
54 if((((splitserver
*)splitlist
.content
)[i
].type
| orflags
) != 0)
60 void sp_deletesplit(const char *name
) {
63 if (splitlist
.cursi
== 0)
66 for (i
= splitlist
.cursi
- 1; i
>= 0; i
--) {
67 if (strcmp(name
, ((splitserver
*)splitlist
.content
)[i
].name
->content
) == 0) {
68 freesstring(((splitserver
*)splitlist
.content
)[i
].name
);
69 array_delslot(&splitlist
, i
);
74 void sp_addsplit(const char *name
, time_t ts
, flag_t type
) {
78 slot
= array_getfreeslot(&splitlist
);
80 srv
= &(((splitserver
*)splitlist
.content
)[slot
]);
82 srv
->name
= getsstring(name
, HOSTLEN
);