Add a cap_change hook
This commit is contained in:
parent
d0dc83b60a
commit
71f10f833f
3 changed files with 19 additions and 0 deletions
|
@ -45,6 +45,7 @@ extern int h_conf_read_start;
|
||||||
extern int h_conf_read_end;
|
extern int h_conf_read_end;
|
||||||
extern int h_outbound_msgbuf;
|
extern int h_outbound_msgbuf;
|
||||||
extern int h_rehash;
|
extern int h_rehash;
|
||||||
|
extern int h_cap_change;
|
||||||
|
|
||||||
void init_hook(void);
|
void init_hook(void);
|
||||||
int register_hook(const char *name);
|
int register_hook(const char *name);
|
||||||
|
@ -146,6 +147,14 @@ typedef struct
|
||||||
unsigned int oldsnomask;
|
unsigned int oldsnomask;
|
||||||
} hook_data_umode_changed;
|
} hook_data_umode_changed;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct Client *client;
|
||||||
|
int oldcaps;
|
||||||
|
int add;
|
||||||
|
int del;
|
||||||
|
} hook_data_cap_change;
|
||||||
|
|
||||||
enum message_type {
|
enum message_type {
|
||||||
MESSAGE_TYPE_NOTICE,
|
MESSAGE_TYPE_NOTICE,
|
||||||
MESSAGE_TYPE_PRIVMSG,
|
MESSAGE_TYPE_PRIVMSG,
|
||||||
|
|
|
@ -71,6 +71,7 @@ int h_conf_read_start;
|
||||||
int h_conf_read_end;
|
int h_conf_read_end;
|
||||||
int h_outbound_msgbuf;
|
int h_outbound_msgbuf;
|
||||||
int h_rehash;
|
int h_rehash;
|
||||||
|
int h_cap_change;
|
||||||
|
|
||||||
void
|
void
|
||||||
init_hook(void)
|
init_hook(void)
|
||||||
|
@ -95,6 +96,7 @@ init_hook(void)
|
||||||
h_conf_read_end = register_hook("conf_read_end");
|
h_conf_read_end = register_hook("conf_read_end");
|
||||||
h_outbound_msgbuf = register_hook("outbound_msgbuf");
|
h_outbound_msgbuf = register_hook("outbound_msgbuf");
|
||||||
h_rehash = register_hook("rehash");
|
h_rehash = register_hook("rehash");
|
||||||
|
h_cap_change = register_hook("cap_change");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* grow_hooktable()
|
/* grow_hooktable()
|
||||||
|
|
|
@ -312,6 +312,7 @@ cap_req(struct Client *source_p, const char *arg)
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int capadd = 0, capdel = 0;
|
int capadd = 0, capdel = 0;
|
||||||
int finished = 0, negate;
|
int finished = 0, negate;
|
||||||
|
hook_data_cap_change hdata;
|
||||||
|
|
||||||
if(!IsRegistered(source_p))
|
if(!IsRegistered(source_p))
|
||||||
source_p->flags |= FLAGS_CLICAP;
|
source_p->flags |= FLAGS_CLICAP;
|
||||||
|
@ -399,8 +400,15 @@ cap_req(struct Client *source_p, const char *arg)
|
||||||
sendto_one(source_p, "%s%s%s", buf_prefix, str_final, buf_list[0]);
|
sendto_one(source_p, "%s%s%s", buf_prefix, str_final, buf_list[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hdata.client = source_p;
|
||||||
|
hdata.oldcaps = source_p->localClient->caps;
|
||||||
|
hdata.add = capadd;
|
||||||
|
hdata.del = capdel;
|
||||||
|
|
||||||
source_p->localClient->caps |= capadd;
|
source_p->localClient->caps |= capadd;
|
||||||
source_p->localClient->caps &= ~capdel;
|
source_p->localClient->caps &= ~capdel;
|
||||||
|
|
||||||
|
call_hook(h_cap_change, &hdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct clicap_cmd
|
static struct clicap_cmd
|
||||||
|
|
Loading…
Reference in a new issue