X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserver_util.h;h=393f09003e6f558b70cdfefe8be4c5956104e912;hp=6f67e25c5669fc32fba37e7cd11e5f5b6e88c498;hb=382d15d447b7a95390decfa783836ae4fe255b3d;hpb=901271466f6fc8f9f148c7bf2493b1813d891c16 diff --git a/apps/silcd/server_util.h b/apps/silcd/server_util.h index 6f67e25c..393f0900 100644 --- a/apps/silcd/server_util.h +++ b/apps/silcd/server_util.h @@ -20,12 +20,12 @@ #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,24 +34,32 @@ 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'. */ + 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. If - `local_toggle_enabled' is TRUE then local server's connections are - enabled, if FALSE they are disabled. */ -void silc_server_update_servers_by_server(SilcServer server, + will also update the server's connection to `to's connection. */ +void silc_server_update_servers_by_server(SilcServer server, SilcServerEntry from, - SilcServerEntry to, - bool local_toggle_enabled); + SilcServerEntry to); + +/* Toggles the enabled/disabled status of local server connections. Packets + can be sent to the servers when `toggle_enabled' is TRUE and will be + dropped if `toggle_enabled' is FALSE, after this function is called. */ +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, @@ -97,7 +105,7 @@ char *silc_server_name_modify_bad(const char *name, SilcUInt32 name_len); SilcUInt32 silc_server_num_sockets_by_ip(SilcServer server, const char *ip, SilcSocketType type); -/* Find number of sockets by IP address indicated by remote host, indicatd +/* Find number of sockets by IP address indicated by remote host, indicated by `ip' or `hostname', `port', and `type'. Returns 0 if socket connections does not exist. If `ip' is provided then `hostname' is ignored. */ SilcUInt32 silc_server_num_sockets_by_remote(SilcServer server, @@ -180,4 +188,23 @@ bool silc_server_force_cumode_change(SilcServer server, SilcChannelClientEntry chl, SilcUInt32 forced_mode); +/* Find active socket connection by the IP address and port indicated by + `ip' and `port', and socket connection type of `type'. */ +SilcSocketConnection +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 */