782 |
{ |
{ |
783 |
dlink_node *ptr, *next; |
dlink_node *ptr, *next; |
784 |
struct Client *target_p; |
struct Client *target_p; |
|
int hidden = match(me.name, source_p->name); /* XXX */ |
|
785 |
|
|
786 |
assert(to != source_p); /* should be already removed from serv_list */ |
assert(to != source_p); /* should be already removed from serv_list */ |
787 |
|
|
788 |
/* If this server can handle quit storm (QS) removal |
/* If this server can handle quit storm (QS) removal |
789 |
* of dependents, just send the SQUIT |
* of dependents, just send the SQUIT |
|
* |
|
|
* Always check *all* dependent servers if some of them are |
|
|
* hidden behind fakename. If so, send out the QUITs -adx |
|
790 |
*/ |
*/ |
791 |
if (hidden || !IsCapable(to, CAP_QS)) |
if (!IsCapable(to, CAP_QS)) |
792 |
DLINK_FOREACH_SAFE(ptr, next, source_p->serv->client_list.head) |
DLINK_FOREACH_SAFE(ptr, next, source_p->serv->client_list.head) |
793 |
{ |
{ |
794 |
target_p = ptr->data; |
target_p = ptr->data; |
799 |
recurse_send_quits(original_source_p, ptr->data, from, to, |
recurse_send_quits(original_source_p, ptr->data, from, to, |
800 |
comment, splitstr); |
comment, splitstr); |
801 |
|
|
802 |
if (!hidden && ((source_p == original_source_p && to != from) || |
if ((source_p == original_source_p && to != from) || |
803 |
!IsCapable(to, CAP_QS))) |
!IsCapable(to, CAP_QS)) |
804 |
{ |
{ |
805 |
/* don't use a prefix here - we have to be 100% sure the message |
/* don't use a prefix here - we have to be 100% sure the message |
806 |
* will be accepted without Unknown prefix etc.. */ |
* will be accepted without Unknown prefix etc.. */ |