#ifndef SERVER_UTIL_H
#define SERVER_UTIL_H
-/* This function is used to remove all client entries by the server `entry'.
- This is called when the connection is lost to the server. In this case
- we must invalidate all the client entries owned by the server `entry'.
- If the `server_signoff' is TRUE then the SERVER_SIGNOFF notify is
+/* This function removes all client entries that are originated from
+ `router' and are owned by `entry'. `router' and `entry' can be same
+ too. If `server_signoff' is TRUE then SERVER_SIGNOFF notify is
distributed to our local clients. */
-bool silc_server_remove_clients_by_server(SilcServer server,
+bool silc_server_remove_clients_by_server(SilcServer server,
+ SilcServerEntry router,
SilcServerEntry entry,
bool server_signoff);
attempt to figure out which clients really are originated from the
`from' and which are originated from a server that we have connection
to, when we've acting as backup router. If it is FALSE the `to' will
- be the new source. This function also removes the clients that are
- *really* originated from `from' if `remove_from' is TRUE. These are
- clients that the `from' owns, and not just clients that are behind
- the `from'. If `from' is NULL then all non-local clients are switched
- to `to'. */
+ be the new source. */
void silc_server_update_clients_by_server(SilcServer server,
SilcServerEntry from,
SilcServerEntry to,
- bool resolve_real_server,
- bool remove_from);
+ bool resolve_real_server);
/* Updates servers that are from `from' to be originated from `to'. This
will also update the server's connection to `to's connection. */
void silc_server_local_servers_toggle_enabled(SilcServer server,
bool toggle_enabled);
+/* Removes servers that are originated from the `from'. The server
+ entry is deleted in this function. If `remove_clients' is TRUE then
+ all clients originated from the server are removed too, and server
+ signoff is sent. Note that this does not remove the `from'. This
+ also does not remove locally connected servers. */
+void silc_server_remove_servers_by_server(SilcServer server,
+ SilcServerEntry from,
+ bool remove_clients);
+
/* Removes channels that are from `from. */
void silc_server_remove_channels_by_server(SilcServer server,
SilcServerEntry from);
SilcSocketType type,
const char *ip, SilcUInt16 port);
+/* This function can be used to match the invite and ban lists. */
+bool silc_server_inviteban_match(SilcServer server, SilcHashTable list,
+ SilcUInt8 type, void *check);
+
+/* Process invite or ban information */
+void silc_server_inviteban_process(SilcServer server, SilcHashTable list,
+ SilcUInt8 action, SilcArgumentPayload args);
+
+/* Destructor for invite or ban list entrys */
+void silc_server_inviteban_destruct(void *key, void *context,
+ void *user_context);
+
#endif /* SERVER_UTIL_H */