*/
#define ERROR -1
-/** Crucial defines
+/** Support for librodent -
+ * see http://www.chatspike.net/index.php?z=64
*/
-#define ETIREDGERBILS EAGAIN
+#define ETIREDHAMSTERS EAGAIN
/** Debug levels for use with InspIRCd::Log()
*/
return atoi(tmp.str().c_str());
}
+/** Template function to convert integer to char, storing result in *res and
+ * also returning the pointer to res. Based on Stuart Lowe's C/C++ Pages.
+ */
+template<typename T, typename V, typename R> inline char* itoa(const T &in, V *res, R base)
+{
+ if (base < 2 || base > 16) { *res = 0; return res; }
+ char* out = res;
+ int quotient = in;
+ while (quotient) {
+ *out = "0123456789abcdef"[ std::abs( quotient % base ) ];
+ ++out;
+ quotient /= base;
+ }
+ if ( in < 0 && base == 10) *out++ = '-';
+ std::reverse( res, out );
+ *out = 0;
+ return res;
+}
+
/** This class contains various STATS counters
* It is used by the InspIRCd class, which internally
* has an instance of it.
int time_delta;
public:
+
+ /** Number of unregistered users online right now.
+ * (Unregistered means before USER/NICK/dns)
+ */
+ int unregistered_count;
+
/** List of server names we've seen.
*/
servernamelist servernames;
/** Client list, a hash_map containing all clients, local and remote
*/
- user_hash clientlist;
+ user_hash* clientlist;
/** Channel list, a hash_map containing all channels
*/
- chan_hash chanlist;
+ chan_hash* chanlist;
/** Local client list, a vector containing only local clients
*/
clonemap global_clones;
- /** Whowas container, contains a map of vectors of users tracked by WHOWAS
- */
- irc::whowas::whowas_users whowas;
-
- /** Whowas container, contains a map of time_t to users tracked by WHOWAS
- */
- irc::whowas::whowas_users_fifo whowas_fifo;
-
/** DNS class, provides resolver facilities to the core and modules
*/
DNS* Res;
void AddGlobalClone(userrec* user);
+ /** Number of users with a certain mode set on them
+ */
+ int ModeCount(const char mode);
+
/** Get the time offset in seconds
* @return The current time delta (in seconds)
*/
*/
void Cleanup();
+ /** This copies the user and channel hash_maps into new hash maps.
+ * This frees memory used by the hash_map allocator (which it neglects
+ * to free, most of the time, using tons of ram)
+ */
+ void RehashUsersAndChans();
+
/** Begin execution of the server.
* NOTE: this function NEVER returns. Internally,
* after performing some initialisation routines,