X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/ae4091d2f9246e6b2bb73200f4392c5d9568f365..1d39b466d4ddd974674c9397589d45935c746ed0:/src/client.c diff --git a/src/client.c b/src/client.c index 7b2b5a0..b45acb2 100644 --- a/src/client.c +++ b/src/client.c @@ -40,7 +40,7 @@ #include "s_auth.h" #include "s_conf.h" #include "s_newconf.h" -#include "s_log.h" +#include "logger.h" #include "s_serv.h" #include "s_stats.h" #include "send.h" @@ -161,6 +161,7 @@ make_client(struct Client *from) client_p->localClient->lasttime = client_p->localClient->firsttime = rb_current_time(); client_p->localClient->F = NULL; + client_p->localClient->ctrlF = NULL; client_p->preClient = (struct PreClient *) rb_bh_alloc(pclient_heap); @@ -1401,6 +1402,11 @@ exit_unknown_client(struct Client *client_p, struct Client *source_p, struct Cli const char *comment) { delete_auth_queries(source_p); + if (source_p->localClient->dnsquery) + { + delete_resolver_queries(source_p->localClient->dnsquery); + rb_free(source_p->localClient->dnsquery); + } del_unknown_ip(source_p); rb_dlinkDelete(&source_p->localClient->tnode, &unknown_list); @@ -1952,7 +1958,7 @@ allocate_away(struct Client *client_p) void free_away(struct Client *client_p) { - if(client_p->user->away != NULL) { + if(client_p->user != NULL && client_p->user->away != NULL) { rb_bh_free(away_heap, client_p->user->away); client_p->user->away = NULL; } @@ -2026,21 +2032,21 @@ close_connection(struct Client *client_p) { struct server_conf *server_p; - ServerStats->is_sv++; - ServerStats->is_sbs += client_p->localClient->sendB; - ServerStats->is_sbr += client_p->localClient->receiveB; - ServerStats->is_sks += client_p->localClient->sendK; - ServerStats->is_skr += client_p->localClient->receiveK; - ServerStats->is_sti += rb_current_time() - client_p->localClient->firsttime; - if(ServerStats->is_sbs > 2047) + ServerStats.is_sv++; + ServerStats.is_sbs += client_p->localClient->sendB; + ServerStats.is_sbr += client_p->localClient->receiveB; + ServerStats.is_sks += client_p->localClient->sendK; + ServerStats.is_skr += client_p->localClient->receiveK; + ServerStats.is_sti += rb_current_time() - client_p->localClient->firsttime; + if(ServerStats.is_sbs > 2047) { - ServerStats->is_sks += (ServerStats->is_sbs >> 10); - ServerStats->is_sbs &= 0x3ff; + ServerStats.is_sks += (ServerStats.is_sbs >> 10); + ServerStats.is_sbs &= 0x3ff; } - if(ServerStats->is_sbr > 2047) + if(ServerStats.is_sbr > 2047) { - ServerStats->is_skr += (ServerStats->is_sbr >> 10); - ServerStats->is_sbr &= 0x3ff; + ServerStats.is_skr += (ServerStats.is_sbr >> 10); + ServerStats.is_sbr &= 0x3ff; } /* @@ -2064,25 +2070,25 @@ close_connection(struct Client *client_p) } else if(IsClient(client_p)) { - ServerStats->is_cl++; - ServerStats->is_cbs += client_p->localClient->sendB; - ServerStats->is_cbr += client_p->localClient->receiveB; - ServerStats->is_cks += client_p->localClient->sendK; - ServerStats->is_ckr += client_p->localClient->receiveK; - ServerStats->is_cti += rb_current_time() - client_p->localClient->firsttime; - if(ServerStats->is_cbs > 2047) + ServerStats.is_cl++; + ServerStats.is_cbs += client_p->localClient->sendB; + ServerStats.is_cbr += client_p->localClient->receiveB; + ServerStats.is_cks += client_p->localClient->sendK; + ServerStats.is_ckr += client_p->localClient->receiveK; + ServerStats.is_cti += rb_current_time() - client_p->localClient->firsttime; + if(ServerStats.is_cbs > 2047) { - ServerStats->is_cks += (ServerStats->is_cbs >> 10); - ServerStats->is_cbs &= 0x3ff; + ServerStats.is_cks += (ServerStats.is_cbs >> 10); + ServerStats.is_cbs &= 0x3ff; } - if(ServerStats->is_cbr > 2047) + if(ServerStats.is_cbr > 2047) { - ServerStats->is_ckr += (ServerStats->is_cbr >> 10); - ServerStats->is_cbr &= 0x3ff; + ServerStats.is_ckr += (ServerStats.is_cbr >> 10); + ServerStats.is_cbr &= 0x3ff; } } else - ServerStats->is_ni++; + ServerStats.is_ni++; if(client_p->localClient->F) { @@ -2094,6 +2100,12 @@ close_connection(struct Client *client_p) client_p->localClient->F = NULL; } + if(client_p->localClient->ctrlF) + { + rb_close(client_p->localClient->ctrlF); + client_p->localClient->ctrlF = NULL; + } + rb_linebuf_donebuf(&client_p->localClient->buf_sendq); rb_linebuf_donebuf(&client_p->localClient->buf_recvq); detach_conf(client_p);