]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/client.c
s_stats.c removed, now we use new style of stats handling.
[irc/rqf/shadowircd.git] / src / client.c
index a3590693aacbd1d0fec2cc250d60542faa97927a..b71533397c3875ea3fb160898e1add57fc1d9988 100644 (file)
@@ -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"
@@ -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");\r
+       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,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->ctrlfd = -1;
+               client_p->localClient->ctrlF = NULL;
 
                client_p->preClient = (struct PreClient *) rb_bh_alloc(pclient_heap);
 
@@ -456,7 +457,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 +541,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 +676,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 +695,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 +1402,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 +1712,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;\r
-       rb_bh_usage(lclient_heap, count, NULL, &lusage, NULL);\r
+       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 +1723,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;\r
-       rb_bh_usage(lclient_heap, &lcount, NULL, NULL, NULL);\r
-       rb_bh_usage(client_heap, &rcount, NULL, NULL, NULL);\r
-       *count = rcount - lcount;\r
+       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));
 }
 
@@ -1951,7 +1953,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;
        }
@@ -2083,15 +2085,20 @@ close_connection(struct Client *client_p)
        else
                ServerStats.is_ni++;
 
-       /* XXX ctrlFd was here!!! */
-       if(client_p->localClient->F != NULL)\r
-       {\r
-               /* attempt to flush any pending linebufs. Evil, but .. -- adrian */\r
-               if(!IsIOError(client_p))\r
-                       send_pop_queue(client_p);\r
-               del_from_cli_fd_hash(client_p);                 \r
-               rb_close(client_p->localClient->F);\r
-               client_p->localClient->F = NULL;\r
+       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;
+       }
+
+       if(client_p->localClient->ctrlF)
+       {
+               rb_close(client_p->localClient->ctrlF);
+               client_p->localClient->ctrlF = NULL;
        }
 
        rb_linebuf_donebuf(&client_p->localClient->buf_sendq);