X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/4dd4c5fcea1c1ee0d200442b0115186974d7e223..5d3b05b9b624b745527e84f605c9cb04c6831c78:/src/client.c diff --git a/src/client.c b/src/client.c index d84ca3f..7b2b5a0 100644 --- a/src/client.c +++ b/src/client.c @@ -118,7 +118,7 @@ init_client(void) * start off the check ping event .. -- adrian * Every 30 seconds is plenty -- db */ - client_heap = rb_bh_create(sizeof(struct Client), CLIENT_HEAP_SIZE, "client_heap"); + client_heap = rb_bh_create(sizeof(struct Client), CLIENT_HEAP_SIZE, "client_heap"); lclient_heap = rb_bh_create(sizeof(struct LocalUser), LCLIENT_HEAP_SIZE, "lclient_heap"); pclient_heap = rb_bh_create(sizeof(struct PreClient), PCLIENT_HEAP_SIZE, "pclient_heap"); away_heap = rb_bh_create(AWAYLEN, AWAY_HEAP_SIZE, "away_heap"); @@ -126,6 +126,7 @@ init_client(void) rb_event_addish("check_pings", check_pings, NULL, 30); rb_event_addish("free_exited_clients", &free_exited_clients, NULL, 4); rb_event_addish("exit_aborted_clients", exit_aborted_clients, NULL, 1); + rb_event_add("flood_recalc", flood_recalc, NULL, 1); nd_dict = irc_dictionary_create(irccmp); } @@ -160,7 +161,6 @@ make_client(struct Client *from) client_p->localClient->lasttime = client_p->localClient->firsttime = rb_current_time(); client_p->localClient->F = NULL; - client_p->localClient->ctrlfd = -1; client_p->preClient = (struct PreClient *) rb_bh_alloc(pclient_heap); @@ -456,7 +456,7 @@ check_banned_lines(void) continue; /* if there is a returned struct ConfItem then kill it */ - if((aconf = find_dline((struct sockaddr *)&client_p->localClient->ip))) + if((aconf = find_dline((struct sockaddr *)&client_p->localClient->ip, client_p->localClient->ip.ss_family))) { if(aconf->status & CONF_EXEMPTDLINE) continue; @@ -540,7 +540,7 @@ check_banned_lines(void) { client_p = ptr->data; - if((aconf = find_dline((struct sockaddr *)&client_p->localClient->ip))) + if((aconf = find_dline((struct sockaddr *)&client_p->localClient->ip,client_p->localClient->ip.ss_family))) { if(aconf->status & CONF_EXEMPTDLINE) continue; @@ -675,7 +675,7 @@ check_dlines(void) if(IsMe(client_p)) continue; - if((aconf = find_dline((struct sockaddr *)&client_p->localClient->ip)) != NULL) + if((aconf = find_dline((struct sockaddr *)&client_p->localClient->ip,client_p->localClient->ip.ss_family)) != NULL) { if(aconf->status & CONF_EXEMPTDLINE) continue; @@ -694,7 +694,7 @@ check_dlines(void) { client_p = ptr->data; - if((aconf = find_dline((struct sockaddr *)&client_p->localClient->ip)) != NULL) + if((aconf = find_dline((struct sockaddr *)&client_p->localClient->ip,client_p->localClient->ip.ss_family)) != NULL) { if(aconf->status & CONF_EXEMPTDLINE) continue; @@ -1401,6 +1401,7 @@ exit_unknown_client(struct Client *client_p, struct Client *source_p, struct Cli const char *comment) { delete_auth_queries(source_p); + del_unknown_ip(source_p); rb_dlinkDelete(&source_p->localClient->tnode, &unknown_list); if(!IsIOError(source_p)) @@ -1710,8 +1711,8 @@ exit_client(struct Client *client_p, /* The local client originating the void count_local_client_memory(size_t * count, size_t * local_client_memory_used) { - size_t lusage; - rb_bh_usage(lclient_heap, count, NULL, &lusage, NULL); + size_t lusage; + rb_bh_usage(lclient_heap, count, NULL, &lusage, NULL); *local_client_memory_used = lusage + (*count * (sizeof(void *) + sizeof(struct Client))); } @@ -1721,10 +1722,10 @@ count_local_client_memory(size_t * count, size_t * local_client_memory_used) void count_remote_client_memory(size_t * count, size_t * remote_client_memory_used) { - size_t lcount, rcount; - rb_bh_usage(lclient_heap, &lcount, NULL, NULL, NULL); - rb_bh_usage(client_heap, &rcount, NULL, NULL, NULL); - *count = rcount - lcount; + size_t lcount, rcount; + rb_bh_usage(lclient_heap, &lcount, NULL, NULL, NULL); + rb_bh_usage(client_heap, &rcount, NULL, NULL, NULL); + *count = rcount - lcount; *remote_client_memory_used = *count * (sizeof(void *) + sizeof(struct Client)); } @@ -2025,21 +2026,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; } /* @@ -2063,35 +2064,34 @@ 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++; - - /* XXX ctrlFd was here!!! */ - if(client_p->localClient->F != NULL) - { - /* attempt to flush any pending linebufs. Evil, but .. -- adrian */ - if(!IsIOError(client_p)) - send_pop_queue(client_p); - del_from_cli_fd_hash(client_p); - rb_close(client_p->localClient->F); - client_p->localClient->F = NULL; + ServerStats->is_ni++; + + if(client_p->localClient->F) + { + /* attempt to flush any pending dbufs. Evil, but .. -- adrian */ + if(!IsIOError(client_p)) + send_queued(client_p); + + rb_close(client_p->localClient->F); + client_p->localClient->F = NULL; } rb_linebuf_donebuf(&client_p->localClient->buf_sendq);