char *mark; /* only filled if they are marked */
char *version_reply; /* only filled in if a version query was triggered */
+ char *sslfp; /* only filled in if a mark SSLCLIFP is received */
time_t timestamp; /* Time of last nick change */
time_t idle_since;
void reg_server_link_func(server_link_func_t handler, void *extra);
void call_server_link_funcs(struct server *server);
-typedef int (*new_user_func_t) (struct userNode *user);
-void reg_new_user_func(new_user_func_t handler);
-typedef void (*del_user_func_t) (struct userNode *user, struct userNode *killer, const char *why);
-void reg_del_user_func(del_user_func_t handler);
-void unreg_del_user_func(del_user_func_t handler);
+typedef int (*new_user_func_t) (struct userNode *user, void *extra);
+void reg_new_user_func(new_user_func_t handler, void *extra);
+void call_new_user_funcs(struct userNode *user);
+typedef void (*del_user_func_t) (struct userNode *user, struct userNode *killer, const char *why, void *extra);
+void reg_del_user_func(del_user_func_t handler, void *extra);
+void call_del_user_funcs(struct userNode *user, struct userNode *killer, const char *why);
+void unreg_del_user_func(del_user_func_t handler, void *extra);
void ReintroduceUser(struct userNode* user);
-typedef void (*nick_change_func_t)(struct userNode *user, const char *old_nick);
-void reg_nick_change_func(nick_change_func_t handler);
+typedef void (*nick_change_func_t)(struct userNode *user, const char *old_nick, void *extra);
+void reg_nick_change_func(nick_change_func_t handler, void *extra);
void NickChange(struct userNode* user, const char *new_nick, int no_announce);
void SVSNickChange(struct userNode* user, const char *new_nick);
void assign_fakehost(struct userNode *user, const char *host, int announce);
void set_geoip_info(struct userNode *user);
-typedef void (*new_channel_func_t) (struct chanNode *chan);
-void reg_new_channel_func(new_channel_func_t handler);
-typedef int (*join_func_t) (struct modeNode *mNode);
-void reg_join_func(join_func_t handler);
-typedef void (*del_channel_func_t) (struct chanNode *chan);
-void reg_del_channel_func(del_channel_func_t handler);
+typedef void (*new_channel_func_t) (struct chanNode *chan, void *extra);
+void reg_new_channel_func(new_channel_func_t handler, void *extra);
+typedef int (*join_func_t) (struct modeNode *mNode, void *extra);
+void reg_join_func(join_func_t handler, void *extra);
+typedef void (*del_channel_func_t) (struct chanNode *chan, void *extra);
+void reg_del_channel_func(del_channel_func_t handler, void *extra);
struct chanNode* AddChannel(const char *name, time_t time_, const char *modes, char *banlist, char *exemptlist);
void LockChannel(struct chanNode *channel);
struct modeNode* AddChannelUser(struct userNode* user, struct chanNode* channel);
-typedef void (*part_func_t) (struct modeNode *mn, const char *reason);
-void reg_part_func(part_func_t handler);
-void unreg_part_func(part_func_t handler);
+typedef void (*part_func_t) (struct modeNode *mn, const char *reason, void *extra);
+void reg_part_func(part_func_t handler, void *extra);
+void unreg_part_func(part_func_t handler, void *extra);
void DelChannelUser(struct userNode* user, struct chanNode* channel, const char *reason, int deleting);
void KickChannelUser(struct userNode* target, struct chanNode* channel, struct userNode *kicker, const char *why);
-typedef void (*kick_func_t) (struct userNode *kicker, struct userNode *user, struct chanNode *chan);
-void reg_kick_func(kick_func_t handler);
+typedef void (*kick_func_t) (struct userNode *kicker, struct userNode *user, struct chanNode *chan, void *extra);
+void reg_kick_func(kick_func_t handler, void *extra);
void ChannelUserKicked(struct userNode* kicker, struct userNode* victim, struct chanNode* channel);
int ChannelBanExists(struct chanNode *channel, const char *ban);
int ChannelExemptExists(struct chanNode *channel, const char *exempt);
-typedef int (*topic_func_t)(struct userNode *who, struct chanNode *chan, const char *old_topic);
-void reg_topic_func(topic_func_t handler);
+typedef int (*topic_func_t)(struct userNode *who, struct chanNode *chan, const char *old_topic, void *extra);
+void reg_topic_func(topic_func_t handler, void *extra);
void SetChannelTopic(struct chanNode *channel, struct userNode *service, struct userNode *user, const char *topic, int announce);
struct userNode *IsInChannel(struct chanNode *channel, struct userNode *user);