#include "stdinc.h"
#include "config.h"
-#include "tools.h"
#include "client.h"
#include "class.h"
#include "common.h"
-#include "event.h"
#include "hash.h"
#include "irc_string.h"
#include "sprintf_irc.h"
#include "numeric.h"
#include "packet.h"
#include "s_auth.h"
-#include "commio.h"
#include "s_conf.h"
#include "s_newconf.h"
#include "s_log.h"
#include "send.h"
#include "whowas.h"
#include "s_user.h"
-#include "linebuf.h"
#include "hash.h"
-#include "memory.h"
#include "hostmask.h"
-#include "balloc.h"
#include "listener.h"
#include "hook.h"
#include "msg.h"
#define DEBUG_EXITED_CLIENTS
-static void check_pings_list(dlink_list * list);
-static void check_unknowns_list(dlink_list * list);
+static void check_pings_list(rb_dlink_list * list);
+static void check_unknowns_list(rb_dlink_list * list);
static void free_exited_clients(void *unused);
static void exit_aborted_clients(void *unused);
G_LINED
};
-dlink_list dead_list;
+rb_dlink_list dead_list;
#ifdef DEBUG_EXITED_CLIENTS
-static dlink_list dead_remote_list;
+static rb_dlink_list dead_remote_list;
#endif
struct abort_client
{
- dlink_node node;
+ rb_dlink_node node;
struct Client *client;
char notice[REASONLEN];
};
-static dlink_list abort_list;
+static rb_dlink_list abort_list;
/*
client_heap = BlockHeapCreate(sizeof(struct Client), CLIENT_HEAP_SIZE);
lclient_heap = BlockHeapCreate(sizeof(struct LocalUser), LCLIENT_HEAP_SIZE);
pclient_heap = BlockHeapCreate(sizeof(struct PreClient), PCLIENT_HEAP_SIZE);
- eventAddIsh("check_pings", check_pings, NULL, 30);
- eventAddIsh("free_exited_clients", &free_exited_clients, NULL, 4);
- eventAddIsh("exit_aborted_clients", exit_aborted_clients, NULL, 1);
+ 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);
nd_dict = irc_dictionary_create(irccmp);
}
client_p->preClient = (struct PreClient *) BlockHeapAlloc(pclient_heap);
/* as good a place as any... */
- dlinkAdd(client_p, &client_p->localClient->tnode, &unknown_list);
+ rb_dlinkAdd(client_p, &client_p->localClient->tnode, &unknown_list);
}
else
{ /* from is not NULL */
}
if(client_p->localClient->F)
- rb_close(client_p->localClient->F->fd);
+ rb_close(client_p->localClient->F);
if(client_p->localClient->passwd)
{
memset(client_p->localClient->passwd, 0,
strlen(client_p->localClient->passwd));
- MyFree(client_p->localClient->passwd);
+ rb_free(client_p->localClient->passwd);
}
- MyFree(client_p->localClient->challenge);
- MyFree(client_p->localClient->fullcaps);
- MyFree(client_p->localClient->opername);
- MyFree(client_p->localClient->mangledhost);
+ rb_free(client_p->localClient->challenge);
+ rb_free(client_p->localClient->fullcaps);
+ rb_free(client_p->localClient->opername);
+ rb_free(client_p->localClient->mangledhost);
BlockHeapFree(lclient_heap, client_p->localClient);
client_p->localClient = NULL;
* side effects -
*/
static void
-check_pings_list(dlink_list * list)
+check_pings_list(rb_dlink_list * list)
{
char scratch[32]; /* way too generous but... */
struct Client *client_p; /* current local client_p being examined */
int ping = 0; /* ping time value from client */
- dlink_node *ptr, *next_ptr;
+ rb_dlink_node *ptr, *next_ptr;
- DLINK_FOREACH_SAFE(ptr, next_ptr, list->head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, list->head)
{
client_p = ptr->data;
* side effects - unknown clients get marked for termination after n seconds
*/
static void
-check_unknowns_list(dlink_list * list)
+check_unknowns_list(rb_dlink_list * list)
{
- dlink_node *ptr, *next_ptr;
+ rb_dlink_node *ptr, *next_ptr;
struct Client *client_p;
int timeout;
- DLINK_FOREACH_SAFE(ptr, next_ptr, list->head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, list->head)
{
client_p = ptr->data;
{
struct Client *client_p; /* current local client_p being examined */
struct ConfItem *aconf = NULL;
- dlink_node *ptr, *next_ptr;
+ rb_dlink_node *ptr, *next_ptr;
- DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
{
client_p = ptr->data;
}
/* also check the unknowns list for new dlines */
- DLINK_FOREACH_SAFE(ptr, next_ptr, unknown_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, unknown_list.head)
{
client_p = ptr->data;
{
struct Client *client_p;
struct ConfItem *aconf;
- dlink_node *ptr;
- dlink_node *next_ptr;
+ rb_dlink_node *ptr;
+ rb_dlink_node *next_ptr;
- DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
{
client_p = ptr->data;
{
struct Client *client_p;
struct ConfItem *aconf;
- dlink_node *ptr;
- dlink_node *next_ptr;
+ rb_dlink_node *ptr;
+ rb_dlink_node *next_ptr;
- DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
{
client_p = ptr->data;
{
struct Client *client_p;
struct ConfItem *aconf;
- dlink_node *ptr;
- dlink_node *next_ptr;
+ rb_dlink_node *ptr;
+ rb_dlink_node *next_ptr;
- DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
{
client_p = ptr->data;
}
/* dlines need to be checked against unknowns too */
- DLINK_FOREACH_SAFE(ptr, next_ptr, unknown_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, unknown_list.head)
{
client_p = ptr->data;
{
struct Client *client_p;
struct ConfItem *aconf;
- dlink_node *ptr;
- dlink_node *next_ptr;
+ rb_dlink_node *ptr;
+ rb_dlink_node *next_ptr;
- DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
{
client_p = ptr->data;
if(client_p->serv->user != NULL)
free_user(client_p->serv->user, client_p);
if(client_p->serv->fullcaps)
- MyFree(client_p->serv->fullcaps);
- MyFree(client_p->serv);
+ rb_free(client_p->serv->fullcaps);
+ rb_free(client_p->serv);
}
}
if(client_p->node.prev == NULL && client_p->node.next == NULL)
return;
- dlinkDelete(&client_p->node, &global_client_list);
+ rb_dlinkDelete(&client_p->node, &global_client_list);
update_client_exit_stats(client_p);
}
static void
free_exited_clients(void *unused)
{
- dlink_node *ptr, *next;
+ rb_dlink_node *ptr, *next;
struct Client *target_p;
- DLINK_FOREACH_SAFE(ptr, next, dead_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next, dead_list.head)
{
target_p = ptr->data;
#ifdef DEBUG_EXITED_CLIENTS
{
struct abort_client *abt;
- dlink_node *aptr;
+ rb_dlink_node *aptr;
int found = 0;
- DLINK_FOREACH(aptr, abort_list.head)
+ RB_DLINK_FOREACH(aptr, abort_list.head)
{
abt = aptr->data;
if(abt->client == target_p)
if(found)
{
- dlinkDestroy(ptr, &dead_list);
+ rb_dlinkDestroy(ptr, &dead_list);
continue;
}
}
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"Warning: null client on dead_list!");
- dlinkDestroy(ptr, &dead_list);
+ rb_dlinkDestroy(ptr, &dead_list);
continue;
}
release_client_state(target_p);
free_client(target_p);
- dlinkDestroy(ptr, &dead_list);
+ rb_dlinkDestroy(ptr, &dead_list);
}
#ifdef DEBUG_EXITED_CLIENTS
- DLINK_FOREACH_SAFE(ptr, next, dead_remote_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next, dead_remote_list.head)
{
target_p = ptr->data;
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"Warning: null client on dead_list!");
- dlinkDestroy(ptr, &dead_list);
+ rb_dlinkDestroy(ptr, &dead_list);
continue;
}
release_client_state(target_p);
free_client(target_p);
- dlinkDestroy(ptr, &dead_remote_list);
+ rb_dlinkDestroy(ptr, &dead_remote_list);
}
#endif
const char *comment)
{
struct Client *target_p;
- dlink_node *ptr, *ptr_next;
+ rb_dlink_node *ptr, *ptr_next;
/* If this server can handle quit storm (QS) removal
* of dependents, just send the SQUIT
*/
}
else
{
- DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->users.head)
+ RB_DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->users.head)
{
target_p = ptr->data;
sendto_one(to, ":%s QUIT :%s", target_p->name, comment1);
}
- DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->servers.head)
+ RB_DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->servers.head)
{
target_p = ptr->data;
recurse_send_quits(client_p, target_p, to, comment1, comment);
recurse_remove_clients(struct Client *source_p, const char *comment)
{
struct Client *target_p;
- dlink_node *ptr, *ptr_next;
+ rb_dlink_node *ptr, *ptr_next;
if(IsMe(source_p))
return;
/* this is very ugly, but it saves cpu :P */
if(ConfigFileEntry.nick_delay > 0)
{
- DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->users.head)
+ RB_DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->users.head)
{
target_p = ptr->data;
target_p->flags |= FLAGS_KILLED;
}
else
{
- DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->users.head)
+ RB_DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->users.head)
{
target_p = ptr->data;
target_p->flags |= FLAGS_KILLED;
}
}
- DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->servers.head)
+ RB_DLINK_FOREACH_SAFE(ptr, ptr_next, source_p->serv->servers.head)
{
target_p = ptr->data;
recurse_remove_clients(target_p, comment);
struct Client *from, const char *comment, const char *comment1)
{
struct Client *to;
- dlink_node *ptr, *next;
+ rb_dlink_node *ptr, *next;
- DLINK_FOREACH_SAFE(ptr, next, serv_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next, serv_list.head)
{
to = ptr->data;
exit_aborted_clients(void *unused)
{
struct abort_client *abt;
- dlink_node *ptr, *next;
- DLINK_FOREACH_SAFE(ptr, next, abort_list.head)
+ rb_dlink_node *ptr, *next;
+ RB_DLINK_FOREACH_SAFE(ptr, next, abort_list.head)
{
abt = ptr->data;
#ifdef DEBUG_EXITED_CLIENTS
{
- if(dlinkFind(abt->client, &dead_list))
+ if(rb_dlinkFind(abt->client, &dead_list))
{
s_assert(0);
sendto_realops_snomask(SNO_GENERAL, L_ALL,
#endif
s_assert(*((unsigned long*)abt->client) != 0xdeadbeef); /* This is lame but its a debug thing */
- dlinkDelete(ptr, &abort_list);
+ rb_dlinkDelete(ptr, &abort_list);
if(IsAnyServer(abt->client))
sendto_realops_snomask(SNO_GENERAL, L_ALL,
*/
abt->client->flags &= ~FLAGS_CLOSING;
exit_client(abt->client, abt->client, &me, abt->notice);
- MyFree(abt);
+ rb_free(abt);
}
}
SetIOError(client_p);
SetDead(client_p);
SetClosing(client_p);
- dlinkAdd(abt, &abt->node, &abort_list);
+ rb_dlinkAdd(abt, &abt->node, &abort_list);
}
exit_generic_client(struct Client *client_p, struct Client *source_p, struct Client *from,
const char *comment)
{
- dlink_node *ptr, *next_ptr;
+ rb_dlink_node *ptr, *next_ptr;
if(IsOper(source_p))
- dlinkFindDestroy(source_p, &oper_list);
+ rb_dlinkFindDestroy(source_p, &oper_list);
sendto_common_channels_local(source_p, ":%s!%s@%s QUIT :%s",
source_p->name,
s_assert(source_p->user->channel.head == NULL);
/* Clean up invitefield */
- DLINK_FOREACH_SAFE(ptr, next_ptr, source_p->user->invited.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, source_p->user->invited.head)
{
del_invite(ptr->data, source_p);
}
if(source_p->servptr && source_p->servptr->serv)
{
- dlinkDelete(&source_p->lnode, &source_p->servptr->serv->users);
+ rb_dlinkDelete(&source_p->lnode, &source_p->servptr->serv->users);
}
if((source_p->flags & FLAGS_KILLED) == 0)
SetDead(source_p);
#ifdef DEBUG_EXITED_CLIENTS
- dlinkAddAlloc(source_p, &dead_remote_list);
+ rb_dlinkAddAlloc(source_p, &dead_remote_list);
#else
- dlinkAddAlloc(source_p, &dead_list);
+ rb_dlinkAddAlloc(source_p, &dead_list);
#endif
return(CLIENT_EXITED);
}
const char *comment)
{
delete_auth_queries(source_p);
- client_flush_input(source_p);
del_unknown_ip(source_p);
- dlinkDelete(&source_p->localClient->tnode, &unknown_list);
+ rb_dlinkDelete(&source_p->localClient->tnode, &unknown_list);
if(!IsIOError(source_p))
sendto_one(source_p, "ERROR :Closing Link: %s (%s)",
del_from_client_hash(source_p->name, source_p);
remove_client_from_list(source_p);
SetDead(source_p);
- dlinkAddAlloc(source_p, &dead_list);
+ rb_dlinkAddAlloc(source_p, &dead_list);
/* Note that we don't need to add unknowns to the dead_list */
return(CLIENT_EXITED);
remove_dependents(client_p, source_p, from, IsPerson(from) ? newcomment : comment, comment1);
if(source_p->servptr && source_p->servptr->serv)
- dlinkDelete(&source_p->lnode, &source_p->servptr->serv->servers);
+ rb_dlinkDelete(&source_p->lnode, &source_p->servptr->serv->servers);
else
s_assert(0);
- dlinkFindDestroy(source_p, &global_serv_list);
+ rb_dlinkFindDestroy(source_p, &global_serv_list);
target_p = source_p->from;
if(target_p != NULL && IsServer(target_p) && target_p != client_p &&
SetDead(source_p);
#ifdef DEBUG_EXITED_CLIENTS
- dlinkAddAlloc(source_p, &dead_remote_list);
+ rb_dlinkAddAlloc(source_p, &dead_remote_list);
#else
- dlinkAddAlloc(source_p, &dead_list);
+ rb_dlinkAddAlloc(source_p, &dead_list);
#endif
return 0;
}
struct Client *target_p;
if(source_p->servptr && source_p->servptr->serv)
- dlinkDelete(&source_p->lnode, &source_p->servptr->serv->servers);
+ rb_dlinkDelete(&source_p->lnode, &source_p->servptr->serv->servers);
else
s_assert(0);
- dlinkFindDestroy(source_p, &global_serv_list);
+ rb_dlinkFindDestroy(source_p, &global_serv_list);
target_p = source_p->from;
if(has_id(source_p))
scache_split(source_p->serv->nameinfo);
SetDead(source_p);
- dlinkAddAlloc(source_p, &dead_list);
+ rb_dlinkAddAlloc(source_p, &dead_list);
return 0;
}
static char newcomment[BUFSIZE];
unsigned int sendk, recvk;
- dlinkDelete(&source_p->localClient->tnode, &serv_list);
- dlinkFindDestroy(source_p, &global_serv_list);
+ rb_dlinkDelete(&source_p->localClient->tnode, &serv_list);
+ rb_dlinkFindDestroy(source_p, &global_serv_list);
unset_chcap_usage_counts(source_p);
sendk = source_p->localClient->sendK;
}
if(source_p->servptr && source_p->servptr->serv)
- dlinkDelete(&source_p->lnode, &source_p->servptr->serv->servers);
+ rb_dlinkDelete(&source_p->lnode, &source_p->servptr->serv->servers);
else
s_assert(0);
scache_split(source_p->serv->nameinfo);
SetDead(source_p);
- dlinkAddAlloc(source_p, &dead_list);
+ rb_dlinkAddAlloc(source_p, &dead_list);
return 0;
}
clear_monitor(source_p);
s_assert(IsPerson(source_p));
- client_flush_input(source_p);
- dlinkDelete(&source_p->localClient->tnode, &lclient_list);
- dlinkDelete(&source_p->lnode, &me.serv->users);
+ rb_dlinkDelete(&source_p->localClient->tnode, &lclient_list);
+ rb_dlinkDelete(&source_p->lnode, &me.serv->users);
if(IsOper(source_p))
- dlinkFindDestroy(source_p, &local_oper_list);
+ rb_dlinkFindDestroy(source_p, &local_oper_list);
sendto_realops_snomask(SNO_CCONN, L_ALL,
"Client exiting: %s (%s@%s) [%s] [%s]",
}
SetDead(source_p);
- dlinkAddAlloc(source_p, &dead_list);
+ rb_dlinkAddAlloc(source_p, &dead_list);
return(CLIENT_EXITED);
}
void
del_all_accepts(struct Client *client_p)
{
- dlink_node *ptr;
- dlink_node *next_ptr;
+ rb_dlink_node *ptr;
+ rb_dlink_node *next_ptr;
struct Client *target_p;
if(MyClient(client_p) && client_p->localClient->allow_list.head)
/* clear this clients accept list, and remove them from
* everyones on_accept_list
*/
- DLINK_FOREACH_SAFE(ptr, next_ptr, client_p->localClient->allow_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, client_p->localClient->allow_list.head)
{
target_p = ptr->data;
- dlinkFindDestroy(client_p, &target_p->on_allow_list);
- dlinkDestroy(ptr, &client_p->localClient->allow_list);
+ rb_dlinkFindDestroy(client_p, &target_p->on_allow_list);
+ rb_dlinkDestroy(ptr, &client_p->localClient->allow_list);
}
}
/* remove this client from everyones accept list */
- DLINK_FOREACH_SAFE(ptr, next_ptr, client_p->on_allow_list.head)
+ RB_DLINK_FOREACH_SAFE(ptr, next_ptr, client_p->on_allow_list.head)
{
target_p = ptr->data;
- dlinkFindDestroy(client_p, &target_p->localClient->allow_list);
- dlinkDestroy(ptr, &client_p->on_allow_list);
+ rb_dlinkFindDestroy(client_p, &target_p->localClient->allow_list);
+ rb_dlinkDestroy(ptr, &client_p->on_allow_list);
}
}
if(--user->refcnt <= 0)
{
if(user->away)
- MyFree((char *) user->away);
+ rb_free((char *) user->away);
/*
* sanity check
*/
(unsigned long) user,
(unsigned long) user->invited.head,
(unsigned long) user->channel.head,
- dlink_list_length(&user->channel),
+ rb_dlink_list_length(&user->channel),
user->refcnt);
s_assert(!user->refcnt);
s_assert(!user->invited.head);
{
/* attempt to flush any pending dbufs. Evil, but .. -- adrian */
if(!IsIOError(client_p))
- send_queued_write(client_p->localClient->F->fd, client_p);
+ send_queued(client_p);
- rb_close(client_p->localClient->F->fd);
+ rb_close(client_p->localClient->F);
client_p->localClient->F = NULL;
}
client_p->localClient->ctrlfd = -1;
}
- linebuf_donebuf(&client_p->localClient->buf_sendq);
- linebuf_donebuf(&client_p->localClient->buf_recvq);
+ rb_linebuf_donebuf(&client_p->localClient->buf_sendq);
+ rb_linebuf_donebuf(&client_p->localClient->buf_recvq);
detach_conf(client_p);
/* XXX shouldnt really be done here. */
* for reading even though it ends up being an EOF. -avalon
*/
char errmsg[255];
- int current_error = rb_get_sockerr(client_p->localClient->F->fd);
+ int current_error = rb_get_sockerr(client_p->localClient->F);
SetIOError(client_p);