/** * mynick.C: Registered nicknames * * Copyright © 2007 Pippijn van Steenhoven / The Ermyth Team * Rights to this code are as documented in COPYING. * * * Portions of this file were derived from sources bearing the following license: * Rights to this code are documented in doc/pod/license.pod. * Copyright © 2005-2007 Atheme Project (http://www.atheme.org) */ #include "atheme.h" #include #include #include mynick_t::map_type mynick_t::map; mynick_t::callbacks mynick_t::callback; /*************** * M Y N I C K * ***************/ /* * mynick_t::create(myuser_t *mu, char const * const name) * * Creates a nick registration for the given account and adds it to the * nicks DTree. * * Inputs: * - an account pointer * - a nickname * * Outputs: * - on success, a new mynick_t object * - on failure, NULL. * * Side Effects: * - the created nick is added to the nick DTree and to the * account's list. */ mynick_t * mynick_t::create (myuser_t *mu, char const * const name) { mynick_t *mn; return_val_if_fail ((mn = mynick_t::find (name)) == NULL, mn); if (!(runflags & RF_STARTING)) slog (LG_DEBUG, "mynick_t::create(): %s -> %s", name, mu->name); mn = new mynick_t; strlcpy (mn->nick, name, NICKLEN); mn->owner = mu; mn->registered = NOW; mynick_t::map[mn->nick] = mn; node_add (mn, &mn->node, &mu->nicks); cnt.mynick++; return mn; } /* * mynick_t::_destroy(mynick_t *mn) * * Destroys and removes a nick from the nicks DTree and the account. * * Inputs: * - nick to destroy * * Outputs: * - nothing * * Side Effects: * - a nick is destroyed and removed from the nicks DTree and the account. */ void mynick_t::_destroy () { if (!(runflags & RF_STARTING)) slog (LG_DEBUG, "mynick_t::_destroy(): %s", nick); mynick_t::map.erase (nick); node_del (&node, &owner->nicks); delete this; cnt.mynick--; } /* * mynick_t::find(char const * const name) * * Retrieves a nick from the nicks DTree. * * Inputs: * - nickname to retrieve * * Outputs: * - nick wanted or NULL if it's not in the DTree. * * Side Effects: * - none */ mynick_t * mynick_t::find (char const * const name) { mynick_t::map_type::iterator it; if ((it = mynick_t::map.find (name)) != mynick_t::map.end ()) return it->second; return NULL; } // frees memory used by nicks on shutdown void mynick_t::cleanup () { mynick_t::map_type::iterator it = mynick_t::map.begin (); mynick_t::map_type::iterator et = mynick_t::map.end (); while (it != et) { delete it->second; ++it; } }