int parse_line(char *line, int recursive);
/* Callback notifications for protocol support. */
-typedef void (*chanmsg_func_t) (struct userNode *user, struct chanNode *chan, const char *text, struct userNode *bot);
+typedef void (*chanmsg_func_t) (struct userNode *user, struct chanNode *chan, const char *text, struct userNode *bot, unsigned int is_notice);
void reg_chanmsg_func(unsigned char prefix, struct userNode *service, chanmsg_func_t handler);
void reg_allchanmsg_func(struct userNode *service, chanmsg_func_t handler);
struct userNode *get_chanmsg_bot(unsigned char prefix);
void irc_svsnick(struct userNode *from, struct userNode *target, const char *newnick);
/* account maintenance */
-void irc_account(struct userNode *user, const char *stamp);
+void irc_account(struct userNode *user, const char *stamp, unsigned long timestamp, unsigned long serial);
void irc_regnick(struct userNode *user);
-void irc_fakehost(struct userNode *user, const char *host);
+void irc_fakehost(struct userNode *user, const char *host, const char *ident, int force);
/* numeric messages */
void irc_numeric(struct userNode *user, unsigned int num, const char *format, ...);
/* Most protocols will want to make an AddUser helper function. */
/* User modes */
+extern const char irc_user_mode_chars[];
void mod_usermode(struct userNode *user, const char *modes);
+unsigned int irc_user_modes(const struct userNode *user, char modes[], size_t length);
/* Channel mode manipulation */
#define KEYLEN 23
#define MCP_REGISTERED 0x0008 /* chan is already registered; do not allow changes to MODE_REGISTERED */
#define MCP_UPASS_FREE 0x0010 /* -U without a key argument */
#define MCP_APASS_FREE 0x0020 /* -A without a key argument */
+#define MCP_NO_APASS 0x0040 /* Do not allow +/-A or +/-U */
#define MC_ANNOUNCE 0x0100 /* send a mod_chanmode() change out */
#define MC_NOTIFY 0x0200 /* make local callbacks to announce */
#ifdef NDEBUG