X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/d94b1e4014170d924bbfae8f9e59057e7a6c3fa3..8fa2ba9c88ead44cb1ef981e6337a4c6880a58ef:/src/hash.c diff --git a/src/hash.c b/src/hash.c index 053f13c..5386856 100644 --- a/src/hash.c +++ b/src/hash.c @@ -31,7 +31,7 @@ #include "client.h" #include "common.h" #include "hash.h" -#include "irc_string.h" +#include "match.h" #include "ircd.h" #include "numeric.h" #include "send.h" @@ -41,12 +41,13 @@ #define hash_cli_fd(x) (x % CLI_FD_MAX) +static rb_dlink_list clientbyfdTable[U_MAX]; + rb_dlink_list *clientTable; rb_dlink_list *channelTable; rb_dlink_list *idTable; rb_dlink_list *resvTable; rb_dlink_list *hostTable; -static rb_dlink_list clientbyfdTable[U_MAX]; /* * look in whowas.c for the missing ...[WW_MAX]; entry @@ -631,7 +632,7 @@ hash_find_resv(const char *name) { aconf = ptr->data; - if(!irccmp(name, aconf->name)) + if(!irccmp(name, aconf->host)) { aconf->port++; return aconf; @@ -663,35 +664,35 @@ clear_resv_hash(void) HASH_WALK_END } -void -add_to_cli_fd_hash(struct Client *client_p) -{ - rb_dlinkAddAlloc(client_p, &clientbyfdTable[hash_cli_fd(rb_get_fd(client_p->localClient->F))]); -} - - -void -del_from_cli_fd_hash(struct Client *client_p) -{ - unsigned int hashv; - hashv = hash_cli_fd(rb_get_fd(client_p->localClient->F)); - rb_dlinkFindDestroy(client_p, &clientbyfdTable[hashv]); -} - -struct Client * -find_cli_fd_hash(int fd) -{ - struct Client *target_p; - rb_dlink_node *ptr; - unsigned int hashv; - hashv = hash_cli_fd(fd); - RB_DLINK_FOREACH(ptr, clientbyfdTable[hashv].head) - { - target_p = ptr->data; - if(rb_get_fd(target_p->localClient->F) == fd) - return target_p; - } - return NULL; +void +add_to_cli_fd_hash(struct Client *client_p) +{ + rb_dlinkAddAlloc(client_p, &clientbyfdTable[hash_cli_fd(rb_get_fd(client_p->localClient->F))]); +} + + +void +del_from_cli_fd_hash(struct Client *client_p) +{ + unsigned int hashv; + hashv = hash_cli_fd(rb_get_fd(client_p->localClient->F)); + rb_dlinkFindDestroy(client_p, &clientbyfdTable[hashv]); +} + +struct Client * +find_cli_fd_hash(int fd) +{ + struct Client *target_p; + rb_dlink_node *ptr; + unsigned int hashv; + hashv = hash_cli_fd(fd); + RB_DLINK_FOREACH(ptr, clientbyfdTable[hashv].head) + { + target_p = ptr->data; + if(rb_get_fd(target_p->localClient->F) == fd) + return target_p; + } + return NULL; } static void @@ -699,14 +700,16 @@ output_hash(struct Client *source_p, const char *name, int length, int *counts, { unsigned long total = 0; int i; + char buf[128]; sendto_one_numeric(source_p, RPL_STATSDEBUG, "B :%s Hash Statistics", name); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "B :Size: %d Empty: %d (%.3f%%)", - length, counts[0], + snprintf(buf, sizeof buf, "%.3f%%", (float) ((counts[0]*100) / (float) length)); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "B :Size: %d Empty: %d (%s)", + length, counts[0], buf); for(i = 1; i < 11; i++) { @@ -715,10 +718,14 @@ output_hash(struct Client *source_p, const char *name, int length, int *counts, /* dont want to divide by 0! --fl */ if(counts[0] != length) - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "B :Average depth: %.3f/%.3f Highest depth: %d", + { + snprintf(buf, sizeof buf, "%.3f/%.3f", (float) (total / (length - counts[0])), - (float) (total / length), deepest); + (float) (total / length)); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "B :Average depth: %s Highest depth: %d", + buf, deepest); + } for(i = 0; i < 11; i++) {