+static bool
+Add_Invite( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern )
+{
+ char *mask;
+ bool already;
+
+ assert( Client != NULL );
+ assert( Channel != NULL );
+ assert( Pattern != NULL );
+
+ mask = Lists_MakeMask( Pattern );
+
+ already = Lists_CheckDupeMask(Channel_GetListInvites(Channel), mask );
+ if (!already) {
+ if( ! Channel_AddInvite(Channel, mask, false ))
+ return CONNECTED;
+ }
+ if ( already && ( Client_Type( Prefix ) == CLIENT_SERVER ))
+ return CONNECTED;
+
+ return Send_ListChange( "+I", Prefix, Client, Channel, mask );
+} /* Add_Invite */
+
+
+static bool
+Add_Ban( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern )
+{
+ char *mask;
+ bool already;
+
+ assert( Client != NULL );
+ assert( Channel != NULL );
+ assert( Pattern != NULL );
+
+ mask = Lists_MakeMask( Pattern );
+
+ already = Lists_CheckDupeMask(Channel_GetListBans(Channel), mask );
+ if (!already) {
+ if( ! Channel_AddBan(Channel, mask))
+ return CONNECTED;
+ }
+ if ( already && ( Client_Type( Prefix ) == CLIENT_SERVER ))
+ return CONNECTED;
+
+ return Send_ListChange( "+b", Prefix, Client, Channel, mask );
+} /* Add_Ban */
+
+
+static bool
+Del_Invite( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern )
+{
+ char *mask;
+
+ assert( Client != NULL );
+ assert( Channel != NULL );
+ assert( Pattern != NULL );
+
+ mask = Lists_MakeMask( Pattern );
+ Lists_Del(Channel_GetListInvites(Channel), mask);
+ return Send_ListChange( "-I", Prefix, Client, Channel, mask );
+} /* Del_Invite */
+
+
+static bool
+Del_Ban( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern )
+{
+ char *mask;
+
+ assert( Client != NULL );
+ assert( Channel != NULL );
+ assert( Pattern != NULL );
+
+ mask = Lists_MakeMask( Pattern );
+ Lists_Del(Channel_GetListBans(Channel), mask);
+ return Send_ListChange( "-b", Prefix, Client, Channel, mask );
+} /* Del_Ban */
+
+
+static bool
+Send_ListChange( char *Mode, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, 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 */
+
+