ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/conf_class.c
(Generate patch)

Comparing ircd-hybrid/trunk/src/conf_class.c (file contents):
Revision 1644 by michael, Tue Nov 6 22:20:16 2012 UTC vs.
Revision 1650 by michael, Sat Nov 10 20:57:51 2012 UTC

# Line 72 | Line 72 | class_make(void)
72   {
73    struct ClassItem *class = MyMalloc(sizeof(*class));
74  
75 +  class->active    = 1;
76 +  class->con_freq  = DEFAULT_CONNECTFREQUENCY;
77 +  class->ping_freq = DEFAULT_PINGFREQUENCY;
78 +  class->max_total = MAXIMUM_LINKS_DEFAULT;
79 +  class->max_sendq = DEFAULT_SENDQ;
80 +  class->max_recvq = DEFAULT_RECVQ;
81 +
82    dlinkAdd(class, &class->node, &class_list);
83  
84    return class;
# Line 92 | Line 99 | class_free(struct ClassItem *class)
99   void
100   class_init(void)
101   {
102 <  class_default = class_make();
96 <
97 <  DupString(class_default->name, "default");
98 <
99 <  class_default->active    = 1;
100 <  class_default->con_freq  = DEFAULT_CONNECTFREQUENCY;
101 <  class_default->ping_freq = DEFAULT_PINGFREQUENCY;
102 <  class_default->max_total = MAXIMUM_LINKS_DEFAULT;
103 <  class_default->max_sendq = DEFAULT_SENDQ;
104 <  class_default->max_recvq = DEFAULT_RECVQ;
102 >  (class_default = class_make())->name = xstrdup("default");
103   }
104  
105   const char *
# Line 201 | Line 199 | class_mark_for_deletion(void)
199   {
200    dlink_node *ptr = NULL;
201  
202 <  DLINK_FOREACH(ptr, class_list.head)
203 <  {
206 <    struct ClassItem *class = ptr->data;
207 <
208 <    if (class != class_default)
209 <      class->active = 0;
210 <  }
202 >  DLINK_FOREACH_PREV(ptr, class_list.tail->prev)
203 >    ((struct ClassItem *)ptr->data)->active = 0;
204   }
205  
206   void
# Line 351 | Line 344 | remove_from_cidr_check(struct irc_ssaddr
344   #endif
345   }
346  
347 < static void
348 < rebuild_cidr_list(int aftype, struct ClassItem *oldcl, struct ClassItem *newcl,
356 <                  dlink_list *old_list, dlink_list *new_list, int changed)
347 > void
348 > rebuild_cidr_list(struct ClassItem *class)
349   {
350    dlink_node *ptr;
359 –  struct Client *client_p;
360 –  struct MaskItem *conf;
351  
352 <  if (!changed)
363 <  {
364 <    *new_list = *old_list;
365 <    old_list->head = old_list->tail = NULL;
366 <    old_list->length = 0;
367 <    return;
368 <  }
352 >  destroy_cidr_class(class);
353  
354    DLINK_FOREACH(ptr, local_client_list.head)
355    {
356 <    client_p = ptr->data;
357 <    if (client_p->localClient->aftype != aftype)
374 <      continue;
375 <    if (dlink_list_length(&client_p->localClient->confs) == 0)
376 <      continue;
377 <
378 <    conf = client_p->localClient->confs.tail->data;
379 <    if (conf->type == CONF_CLIENT)
380 <      if (conf->class == oldcl)
381 <        cidr_limit_reached(1, &client_p->localClient->ip, newcl);
382 <  }
383 < }
356 >    struct Client *client_p = ptr->data;
357 >    struct MaskItem *conf = client_p->localClient->confs.tail->data;
358  
359 < /*
360 < * rebuild_cidr_class
361 < *
388 < * inputs       - pointer to old conf
389 < *              - pointer to new_class
390 < * output       - none
391 < * side effects - rebuilds the class link list of cidr blocks
392 < */
393 < void
394 < rebuild_cidr_class(struct ClassItem *old_class, struct ClassItem *new_class)
395 < {
396 <  if (old_class->number_per_cidr > 0 && new_class->number_per_cidr > 0)
397 <  {
398 <    if (old_class->cidr_bitlen_ipv4 > 0 && new_class->cidr_bitlen_ipv4 > 0)
399 <      rebuild_cidr_list(AF_INET, old_class, new_class,
400 <                        &old_class->list_ipv4, &new_class->list_ipv4,
401 <                        old_class->cidr_bitlen_ipv4 != new_class->cidr_bitlen_ipv4);
402 <
403 < #ifdef IPV6
404 <    if (old_class->cidr_bitlen_ipv6 > 0 && new_class->cidr_bitlen_ipv6 > 0)
405 <      rebuild_cidr_list(AF_INET6, old_class, new_class,
406 <                        &old_class->list_ipv6, &new_class->list_ipv6,
407 <                        old_class->cidr_bitlen_ipv6 != new_class->cidr_bitlen_ipv6);
408 < #endif
359 >    if (conf && (conf->type == CONF_CLIENT))
360 >      if (conf->class == class)
361 >        cidr_limit_reached(1, &client_p->localClient->ip, class);
362    }
410 –
411 –  destroy_cidr_class(old_class);
363   }
364  
365   /*

Diff Legend

– Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)