X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/994544c294af3bcab070124dfab4967b775435ca..e8e3ef0dfb6fbe28c07e34599f0f48336792b4b3:/src/scache.c?ds=sidebyside diff --git a/src/scache.c b/src/scache.c index c5a7d13..a186ba1 100644 --- a/src/scache.c +++ b/src/scache.c @@ -21,18 +21,16 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: scache.c 6 2005-09-10 01:02:21Z nenolod $ */ #include "stdinc.h" #include "client.h" #include "common.h" -#include "irc_string.h" +#include "match.h" #include "ircd.h" #include "numeric.h" #include "send.h" #include "scache.h" -#include "memory.h" #include "s_conf.h" @@ -100,13 +98,13 @@ find_or_add(const char *name) return ptr; } - ptr = (struct scache_entry *) MyMalloc(sizeof(struct scache_entry)); + ptr = (struct scache_entry *) rb_malloc(sizeof(struct scache_entry)); s_assert(0 != ptr); - strlcpy(ptr->name, name, sizeof(ptr->name)); + rb_strlcpy(ptr->name, name, sizeof(ptr->name)); ptr->info[0] = '\0'; ptr->flags = 0; - ptr->known_since = CurrentTime; + ptr->known_since = rb_current_time(); ptr->last_connect = 0; ptr->last_split = 0; @@ -121,13 +119,13 @@ scache_connect(const char *name, const char *info, int hidden) struct scache_entry *ptr; ptr = find_or_add(name); - strlcpy(ptr->info, info, sizeof(ptr->info)); + rb_strlcpy(ptr->info, info, sizeof(ptr->info)); ptr->flags |= SC_ONLINE; if (hidden) ptr->flags |= SC_HIDDEN; else ptr->flags &= ~SC_HIDDEN; - ptr->last_connect = CurrentTime; + ptr->last_connect = rb_current_time(); return ptr; } @@ -137,7 +135,7 @@ scache_split(struct scache_entry *ptr) if (ptr == NULL) return; ptr->flags &= ~SC_ONLINE; - ptr->last_split = CurrentTime; + ptr->last_split = rb_current_time(); } const char *scache_get_name(struct scache_entry *ptr) @@ -169,9 +167,9 @@ scache_send_flattened_links(struct Client *source_p) !ConfigServerHide.disable_hidden) show = FALSE; else if (scache_ptr->flags & SC_ONLINE) - show = scache_ptr->known_since < CurrentTime - ConfigServerHide.links_delay; + show = scache_ptr->known_since < rb_current_time() - ConfigServerHide.links_delay; else - show = scache_ptr->last_split > CurrentTime - ConfigServerHide.links_delay && scache_ptr->last_split - scache_ptr->known_since > ConfigServerHide.links_delay; + show = scache_ptr->last_split > rb_current_time() - ConfigServerHide.links_delay && scache_ptr->last_split - scache_ptr->known_since > ConfigServerHide.links_delay; if (show) sendto_one_numeric(source_p, RPL_LINKS, form_str(RPL_LINKS), scache_ptr->name, me.name, 1, scache_ptr->info); @@ -185,6 +183,33 @@ scache_send_flattened_links(struct Client *source_p) sendto_one_numeric(source_p, RPL_ENDOFLINKS, form_str(RPL_ENDOFLINKS), "*"); } +#define MISSING_TIMEOUT 86400 + +/* scache_send_missing() + * + * inputs - client to send to + * outputs - recently split servers + * side effects - + */ +void +scache_send_missing(struct Client *source_p) +{ + struct scache_entry *scache_ptr; + int i; + + for (i = 0; i < SCACHE_HASH_SIZE; i++) + { + scache_ptr = scache_hash[i]; + while (scache_ptr) + { + if (!(scache_ptr->flags & SC_ONLINE) && scache_ptr->last_split > rb_current_time() - MISSING_TIMEOUT) + sendto_one_numeric(source_p, RPL_MAP, "** %s (recently split)", + scache_ptr->name); + + scache_ptr = scache_ptr->next; + } + } +} /* * count_scache * inputs - pointer to where to leave number of servers cached