Merged from silc_1_0_branch.
[silc.git] / apps / silcd / server_util.h
index 6d906485d32ddca51f9195181ec4c501734db73f..393f09003e6f558b70cdfefe8be4c5956104e912 100644 (file)
 #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);
 
@@ -34,16 +34,11 @@ bool silc_server_remove_clients_by_server(SilcServer server,
    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. */
@@ -57,6 +52,15 @@ void silc_server_update_servers_by_server(SilcServer server,
 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);
@@ -191,4 +195,16 @@ silc_server_find_socket_by_host(SilcServer server,
                                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 */