X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserver_util.h;h=393f09003e6f558b70cdfefe8be4c5956104e912;hp=84ef07838ca90d204d8187ff949487f7eb9bb533;hb=382d15d447b7a95390decfa783836ae4fe255b3d;hpb=f82024f04b73e3b80ddd6c590699206d3dc5c1eb diff --git a/apps/silcd/server_util.h b/apps/silcd/server_util.h index 84ef0783..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,22 +34,33 @@ 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. */ -void silc_server_update_servers_by_server(SilcServer server, +void silc_server_update_servers_by_server(SilcServer server, SilcServerEntry from, 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, SilcServerEntry from); @@ -94,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, @@ -177,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 */