/** @file s_user.h * @brief Miscellaneous user-related helper functions. * @version $Id: s_user.h 1818 2007-07-14 02:40:01Z isomer $ */ #ifndef INCLUDED_s_user_h #define INCLUDED_s_user_h #ifndef INCLUDED_sys_types_h #include #define INCLUDED_sys_types_h #endif struct Client; struct User; struct Channel; struct MsgBuf; struct Flags; /* * Macros */ /** * Nick flood limit. * Minimum time between nick changes. * (The first two changes are allowed quickly after another however). */ #define NICK_DELAY 30 /** * Target flood time. * Minimum time between target changes. * (MAXTARGETS are allowed simultaneously however). * Its set to a power of 2 because we devide through it quite a lot. */ #define TARGET_DELAY 128 /* return values for hunt_server() */ #define HUNTED_NOSUCH (-1) /**< if the hunted server is not found */ #define HUNTED_ISME 0 /**< if this server should execute the command */ #define HUNTED_PASS 1 /**< if message passed onwards successfully */ /* send sets for send_umode() */ #define ALL_UMODES 0 /**< both local and global user modes */ #define SEND_UMODES 1 /**< global user modes only */ #define SEND_UMODES_BUT_OPER 2 /**< global user modes except for FLAG_OPER */ /* used when sending to #mask or $mask */ #define MATCH_SERVER 1 /**< flag for relay_masked_message (etc) to indicate the mask matches a server name */ #define MATCH_HOST 2 /**< flag for relay_masked_message (etc) to indicate the mask matches host name */ /* used for parsing user modes */ #define ALLOWMODES_ANY 0 /**< Allow any user mode */ #define ALLOWMODES_DEFAULT 1 /**< Only allow the subset of modes that are legit defaults */ #define ALLOWMODES_SVSMODE 2 /**< Allow any user mode to be changed ignoring restrictions */ /** Formatter function for send_user_info(). * @param who Client being displayed. * @param sptr Client requesting information. * @param buf Message buffer that should receive the response text. */ typedef void (*InfoFormatter)(struct Client* who, struct Client *sptr, struct MsgBuf* buf); /* * Prototypes */ extern struct User* make_user(struct Client *cptr); extern void free_user(struct User *user); extern int register_user(struct Client* cptr, struct Client *sptr); extern void user_count_memory(size_t* count_out, size_t* bytes_out); extern int set_nick_name(struct Client* cptr, struct Client* sptr, const char* nick, int parc, char* parv[], int svsnick); extern void send_umode_out(struct Client* cptr, struct Client* sptr, struct Flags* old, int prop); extern int whisper(struct Client* source, const char* nick, const char* channel, const char* text, int is_notice); extern void send_user_info(struct Client* to, char* names, int rpl, InfoFormatter fmt); extern int hide_hostmask(struct Client *cptr); extern int unhide_hostmask(struct Client *cptr); extern int set_user_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv[], int allow_modes); extern int is_silenced(struct Client *sptr, struct Client *acptr, int ischanmsg); extern int hunt_server_cmd(struct Client *from, const char *cmd, const char *tok, struct Client *one, int MustBeOper, const char *pattern, int server, int parc, char *parv[]); extern int hunt_server_prio_cmd(struct Client *from, const char *cmd, const char *tok, struct Client *one, int MustBeOper, const char *pattern, int server, int parc, char *parv[]); extern struct Client* next_client(struct Client* next, const char* ch); extern char *umode_str(struct Client *cptr); extern void send_umode(struct Client *cptr, struct Client *sptr, struct Flags *old, int sendset); extern void set_snomask(struct Client *, unsigned int, int); extern int is_snomask(char *); extern int check_target_limit(struct Client *sptr, void *target, const char *name, int created); extern void add_target(struct Client *sptr, void *target); extern unsigned int umode_make_snomask(unsigned int oldmask, char *arg, int what); extern int send_supported(struct Client *cptr); extern int do_nick_name(char* nick); extern void user_setcloaked(struct Client *cptr); extern void init_isupport(void); extern void del_isupport(const char *name); extern void add_isupport_s(const char *name, const char *value); extern void add_isupport_i(const char *name, int value); #define NAMES_ALL 1 /**< List all users in channel */ #define NAMES_VIS 2 /**< List only visible users in non-secret channels */ #define NAMES_EON 4 /**< Add an 'End Of Names' reply to the end */ #define NAMES_DEL 8 /**< Show delayed joined users only */ void do_names(struct Client* sptr, struct Channel* chptr, int filter); extern int abort_sasl(struct Client* cptr, int timeout); #endif /* INCLUDED_s_user_h */