/** * Delete entries from channel invite, ban and exception lists. * * @param what Can be 'I' for invite, 'b' for ban, and 'e' for exception list. * @param Prefix The originator of the command. * @param Client The sender of the command. * @param Channel The channel of which the list should be modified. * @param Pattern The pattern to add to the list. * @return CONNECTED or DISCONNECTED. */ static bool Del_From_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Pattern) { char mask[MASK_LEN]; struct list_head *list = NULL; assert(Client != NULL); assert(Channel != NULL); assert(Pattern != NULL); assert(what == 'I' || what == 'b' || what == 'e'); Lists_MakeMask(Pattern, mask, sizeof(mask)); switch (what) { case 'I': list = Channel_GetListInvites(Channel); break; case 'b': list = Channel_GetListBans(Channel); break; case 'e': list = Channel_GetListExcepts(Channel); break; } if (!Lists_CheckDupeMask(list, mask)) return CONNECTED; Lists_Del(list, mask); return Send_ListChange(false, what, Prefix, Client, Channel, mask); }
GLOBAL void Class_DeleteMask(const int Class, const char *Mask) { assert(Class < CLASS_COUNT); assert(Mask != NULL); Lists_Del(&My_Classes[Class], Lists_MakeMask(Mask)); }
/** * Add entries to channel invite, ban and exception lists. * * @param what Can be 'I' for invite, 'b' for ban, and 'e' for exception list. * @param Prefix The originator of the command. * @param Client The sender of the command. * @param Channel The channel of which the list should be modified. * @param Pattern The pattern to add to the list. * @return CONNECTED or DISCONNECTED. */ static bool Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Pattern) { char mask[MASK_LEN]; struct list_head *list = NULL; long int current_count; assert(Client != NULL); assert(Channel != NULL); assert(Pattern != NULL); assert(what == 'I' || what == 'b' || what == 'e'); Lists_MakeMask(Pattern, mask, sizeof(mask)); current_count = Lists_Count(Channel_GetListInvites(Channel)) + Lists_Count(Channel_GetListExcepts(Channel)) + Lists_Count(Channel_GetListBans(Channel)); switch(what) { case 'I': list = Channel_GetListInvites(Channel); break; case 'b': list = Channel_GetListBans(Channel); break; case 'e': list = Channel_GetListExcepts(Channel); break; } if (Lists_CheckDupeMask(list, mask)) return CONNECTED; if (Client_Type(Client) == CLIENT_USER && current_count >= MAX_HNDL_CHANNEL_LISTS) return IRC_WriteErrClient(Client, ERR_LISTFULL_MSG, Client_ID(Client), Channel_Name(Channel), mask, MAX_HNDL_CHANNEL_LISTS); switch (what) { case 'I': if (!Channel_AddInvite(Channel, mask, false, Client_ID(Client))) return CONNECTED; break; case 'b': if (!Channel_AddBan(Channel, mask, Client_ID(Client))) return CONNECTED; break; case 'e': if (!Channel_AddExcept(Channel, mask, Client_ID(Client))) return CONNECTED; break; } return Send_ListChange(true, what, Prefix, Client, Channel, mask); }
GLOBAL bool Class_AddMask(const int Class, const char *Mask, time_t ValidUntil, const char *Reason) { assert(Class < CLASS_COUNT); assert(Mask != NULL); assert(Reason != NULL); return Lists_Add(&My_Classes[Class], Lists_MakeMask(Mask), ValidUntil, Reason); }