+static bool
+Add_Ban_Invite(int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Pattern)
+{
+ const char *mask;
+ bool already;
+ bool ret;
+
+ assert( Client != NULL );
+ assert( Channel != NULL );
+ assert( Pattern != NULL );
+ assert(what == 'I' || what == 'b');
+
+ mask = Lists_MakeMask(Pattern);
+
+ already = Lists_CheckDupeMask(Channel_GetListInvites(Channel), mask);
+ if (!already) {
+ if (what == 'I')
+ ret = Channel_AddInvite(Channel, mask, false);
+ else
+ ret = Channel_AddBan(Channel, mask);
+ if (!ret)
+ return CONNECTED;
+ }
+ if (already && (Client_Type(Prefix) == CLIENT_SERVER))
+ return CONNECTED;
+
+ if (what == 'I')
+ return Send_ListChange("+I", Prefix, Client, Channel, mask);
+ return Send_ListChange("+b", Prefix, Client, Channel, mask);
+}
+
+
+static bool
+Del_Ban_Invite(int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Pattern)
+{
+ const char *mask;
+ struct list_head *list;
+
+ assert( Client != NULL );
+ assert( Channel != NULL );
+ assert( Pattern != NULL );
+ assert(what == 'I' || what == 'b');
+
+ mask = Lists_MakeMask( Pattern );
+
+ if (what == 'I')
+ list = Channel_GetListInvites(Channel);
+ else
+ list = Channel_GetListBans(Channel);
+
+ Lists_Del(list, mask);
+ if (what == 'I')
+ return Send_ListChange( "-I", Prefix, Client, Channel, mask );
+ return Send_ListChange( "-b", Prefix, Client, Channel, mask );
+}
+
+
+static bool
+Send_ListChange( char *Mode, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Mask )
+{
+ /* Bestaetigung an Client schicken & andere Server sowie Channel-User informieren */
+
+ bool ok;
+
+ if( Client_Type( Client ) == CLIENT_USER )
+ {
+ /* Bestaetigung an Client */
+ ok = IRC_WriteStrClientPrefix( Client, Prefix, "MODE %s %s %s", Channel_Name( Channel ), Mode, Mask );
+ }
+ else ok = true;
+
+ /* an andere Server */
+ IRC_WriteStrServersPrefix( Client, Prefix, "MODE %s %s %s", Channel_Name( Channel ), Mode, Mask );
+
+ /* und lokale User im Channel */
+ IRC_WriteStrChannelPrefix( Client, Channel, Prefix, false, "MODE %s %s %s", Channel_Name( Channel ), Mode, Mask );
+
+ return ok;
+} /* Send_ListChange */
+
+