]> jfr.im git - irc/quakenet/newserv.git/blame - core/hooks.h
BUILD: add require-all build mode
[irc/quakenet/newserv.git] / core / hooks.h
CommitLineData
2c5db955
CP
1/* hooks.h */
2
3#ifndef __HOOKS_H
4#define __HOOKS_H
5
5c86c36f
CP
6#include <limits.h>
7
2c5db955
CP
8#define HOOKMAX 5000
9
10/* This is the authoritative registry of all known hook numbers */
11
f69c0032 12#define HOOK_CORE_REHASH 0 /* Argument is an int */
2c5db955
CP
13#define HOOK_CORE_STATSREQUEST 1
14#define HOOK_CORE_STATSREPLY 2
526e7c1d 15#define HOOK_CORE_ENDOFHOOKSQUEUE 3
d931d0f7 16#define HOOK_CORE_STOPERROR 4
280505a5 17#define HOOK_CORE_ERROR 5 /* Argument is a struct error_event * */
b8e79109 18#define HOOK_CORE_SIGUSR1 6
efa44d15 19#define HOOK_CORE_SIGINT 7
2c5db955 20
eb8dffd0 21#define HOOK_IRC_CONNECTED 100 /* Located in server.c now to fix burst bug */
2c5db955 22#define HOOK_IRC_DISCON 101
eb8dffd0
C
23#define HOOK_IRC_SENDBURSTSERVERS 102 /* Located in server.c now to fix burst bug */
24#define HOOK_IRC_SENDBURSTNICKS 103 /* Located in server.c now to fix burst bug */
25#define HOOK_IRC_SENDBURSTBURSTS 104 /* Located in server.c now to fix burst bug */
e609eb1f 26#define HOOK_IRC_PRE_DISCON 105
2c5db955
CP
27
28#define HOOK_SERVER_NEWSERVER 200 /* Argument is number of new server */
29#define HOOK_SERVER_LOSTSERVER 201 /* Argument is number of lost server */
e609eb1f
CP
30#define HOOK_SERVER_END_OF_BURST 202
31#define HOOK_SERVER_PRE_LOSTSERVER 203 /* Argument is number of lost server */
b6049faf 32#define HOOK_SERVER_LINKED 204 /* Argument is number of server */
2c5db955
CP
33
34#define HOOK_NICK_NEWNICK 300 /* Argument is nick* */
2fdef282 35#define HOOK_NICK_RENAME 301 /* Argument is void*[2] (nick *, oldnick) */
2c5db955 36#define HOOK_NICK_LOSTNICK 302 /* Argument is nick* */
a7697869 37#define HOOK_NICK_WHOISCHANNELS 303 /* Argument is void*[3] (sender, target, sourcenum) */
2c5db955
CP
38#define HOOK_NICK_ACCOUNT 304 /* Argument is nick* */
39#define HOOK_NICK_QUIT 305 /* Argument is void*[2] (nick, reason) */
40#define HOOK_NICK_SETHOST 306 /* Argument is nick* */
3e3692bf 41#define HOOK_NICK_MODEOPER 307 /* Argument is void*[2] (nick, modes) */
acd438c7 42#define HOOK_NICK_KILL 308 /* Argument is void*[2] (nick, reason) */
6885ae9c 43#define HOOK_NICK_MASKPRIVMSG 309 /* Argument is void*[3] (nick, target, message) ** NICK COULD BE NULL ** */
474d3d62 44#define HOOK_NICK_MODECHANGE 310 /* Argument is void*[2] (nick *, oldmodes) */
80e32fcd 45#define HOOK_NICK_MESSAGE 311 /* Argument is void*[3] (nick *, message, isnotice) */
6b05a378 46#define HOOK_NICK_PRE_LOSTNICK 312 /* Argument is nick* */
2c5db955
CP
47
48#define HOOK_CHANNEL_BURST 400 /* Argument is channel pointer */
49#define HOOK_CHANNEL_CREATE 401 /* Argument is void*[2] (channel, nick) */
50#define HOOK_CHANNEL_JOIN 402 /* Argument is void*[2] (channel, nick) */
51#define HOOK_CHANNEL_PART 403 /* Argument is void*[3] (channel, nick, reason) */
52#define HOOK_CHANNEL_KICK 404 /* Argument is void*[4] (channel, kicked, kicker, reason) ** KICKER COULD BE NULL ***/
53#define HOOK_CHANNEL_TOPIC 405 /* Argument is void*[2] (channel, nick) ** NICK COULD BE NULL ** */
d968d1fe 54#define HOOK_CHANNEL_MODECHANGE 406 /* Argument is void*[3] (channel, nick, flags, oldchanmodes) ** NICK COULD BE NULL ** */
2c5db955
CP
55#define HOOK_CHANNEL_BANSET 407 /* Argument is void*[2] (channel, nick) ** NICK COULD BE NULL **, ban will be first ban on channel */
56#define HOOK_CHANNEL_BANCLEAR 408 /* Argument is void*[2] (channel, nick) ** NICK COULD BE NULL **, ban will be gone. XXX - could we care what the ban was? */
57#define HOOK_CHANNEL_OPPED 409 /* Argument is void*[3] (channel, nick, target) ** NICK COULD BE NULL ** */
58#define HOOK_CHANNEL_DEOPPED 410 /* Argument is void*[3] (channel, nick, target) ** NICK COULD BE NULL ** */
59#define HOOK_CHANNEL_VOICED 411 /* Argument is void*[3] (channel, nick, target) ** NICK COULD BE NULL ** */
60#define HOOK_CHANNEL_DEVOICED 412 /* Argument is void*[3] (channel, nick, target) ** NICK COULD BE NULL ** */
61
62#define HOOK_CHANNEL_NEWCHANNEL 413 /* Argument is channel pointer */
63#define HOOK_CHANNEL_LOSTCHANNEL 414 /* Argument is channel pointer */
64
65#define HOOK_CHANNEL_NEWNICK 415 /* Argument is void*[2] (channel, nick) */
66#define HOOK_CHANNEL_LOSTNICK 416 /* Argument is void*[2] (channel, nick) */
67
8dabf9c9 68#define HOOK_CHANSERV_DBLOADED 500 /* No arg */
6e3ceea8 69/* 501 spare for now */
8dabf9c9 70#define HOOK_CHANSERV_RUNNING 502 /* No arg */
6e3ceea8 71
1b75afa4 72#define HOOK_CHANSERV_AUTH 503 /* Argument is void*[2] (nick *, lastauth) */ /* note: not triggered for REMOTEAUTH */
d72584f9 73#define HOOK_CHANSERV_PWCHANGE 504 /* Argument is nick * */
74#define HOOK_CHANSERV_CHANLEVMOD 505 /* Argument is void*[3] (nick *, regchanuser *, oldflags) */
75#define HOOK_CHANSERV_CHANLEVDUMP 506 /* Argument is nick * */
76#define HOOK_CHANSERV_WHOIS 507 /* Argument is nick * */
77#define HOOK_CHANSERV_WHOAMI 508 /* Argument is nick * */
78#define HOOK_CHANSERV_CMD 509 /* Argument is nick * */
79
3e3692bf
CP
80#define HOOK_CONTROL_REGISTERED 600 /* Argument is nick* */
81#define HOOK_CONTROL_WHOISREQUEST 601 /* Argument is nick* */
82#define HOOK_CONTROL_WHOISREPLY 602 /* Argument is char* */
83
444d2433
CP
84#define HOOK_SHADOW_SERVER 701 /* Argument is char* */
85
92acf9ae 86#define HOOK_AUTH_FLAGSUPDATED 801 /* Argument is void*[2] (authname*, u_int64_t*) */
04b12064 87#define HOOK_AUTH_LOSTAUTHNAME 802 /* Argument is authname* */
c4ffdb9b 88
83bccee3 89#define HOOK_TRUSTS_DB_CLOSED 900 /* No arg */
be2823bc 90#define HOOK_TRUSTS_DB_LOADED 901 /* No arg */
9097ab05
CP
91#define HOOK_TRUSTS_NEWNICK 902 /* Argument is void*[2] (nick*, long) */
92#define HOOK_TRUSTS_LOSTNICK 903 /* Argument is void*[2] (nick*, long) */
2129448c
CP
93#define HOOK_TRUSTS_NEWGROUP 904 /* Argument is trustgroup* */
94#define HOOK_TRUSTS_LOSTGROUP 905 /* Argument is trustgroup* */
82a316e7
CP
95#define HOOK_TRUSTS_ADDGROUP 906 /* Argument is trustgroup* */
96#define HOOK_TRUSTS_DELGROUP 907 /* Argument is trustgroup* */
97#define HOOK_TRUSTS_ADDHOST 908 /* Argument is trusthost* */
98#define HOOK_TRUSTS_DELHOST 909 /* Argument is trusthost* */
2ab0a1e7
CP
99#define HOOK_TRUSTS_MODIFYGROUP 910 /* Argument is trustgroup* */
100#define HOOK_TRUSTS_LOSTHOST 911 /* Argument is trusthost* */
c1da06f9 101#define HOOK_TRUSTS_MODIFYHOST 912 /* Argument is trusthost* */
be2823bc 102
39e9e93e
CP
103#define HOOK_SIGNONTRACKER_HAVETIME 1100 /* Argument is nick* */
104
dd33b9ca
GB
105#define HOOK_WHOWAS_NEWRECORD 1200 /* Argument is void*[2] (whowas *, nick *) */
106#define HOOK_WHOWAS_LOSTRECORD 1201 /* Argument is whowas * */
107
41bfdb81 108#define HOOK_LUA_LOADSCRIPT 1300 /* Argument is void*[2] (char *, lua_State *) */
6e1aa3b3 109#define HOOK_LUA_UNLOADSCRIPT 1301 /* Argument is lua_State* */
41bfdb81 110
5c86c36f
CP
111#define PRIORITY_DEFAULT 0
112
113#define PRIORITY_MAX LONG_MIN
114#define PRIORITY_MIN LONG_MAX
115
2c5db955
CP
116typedef void (*HookCallback)(int, void *);
117
a451a113 118extern unsigned int hookqueuelength;
526e7c1d 119
2c5db955
CP
120void inithooks();
121int registerhook(int hooknum, HookCallback callback);
122int deregisterhook(int hooknum, HookCallback callback);
123void triggerhook(int hooknum, void *arg);
5c86c36f 124int registerpriorityhook(int hooknum, HookCallback callback, long priority);
2c5db955
CP
125
126#endif