#include "inspstring.h"
#include "protocol.h"
#include "bancache.h"
+#include "isupportmanager.h"
/** Template function to convert any input type to std::string
*/
}
};
-/** This class manages the generation and transmission of ISUPPORT. */
-class CoreExport ISupportManager
-{
-private:
- /** The generated lines which are sent to clients. */
- std::vector<std::string> Lines;
-
-public:
- /** (Re)build the ISUPPORT vector. */
- void Build();
-
- /** Returns the std::vector of ISUPPORT lines. */
- const std::vector<std::string>& GetLines()
- {
- return this->Lines;
- }
-
- /** Send the 005 numerics (ISUPPORT) to a user. */
- void SendTo(LocalUser* user);
-};
-
DEFINE_HANDLER1(IsNickHandler, bool, const std::string&);
DEFINE_HANDLER2(GenRandomHandler, void, char*, size_t);
DEFINE_HANDLER1(IsIdentHandler, bool, const std::string&);
/** LogManager handles logging.
*/
- LogManager *Logs;
+ LogManager Logs;
/** ModuleManager contains everything related to loading/unloading
* modules.
*/
- ModuleManager* Modules;
+ ModuleManager Modules;
/** BanCacheManager is used to speed up checking of restrictions on connection
* to the IRCd.
/** Snomask manager - handles routing of snomask messages
* to opers.
*/
- SnomaskManager* SNO;
+ SnomaskManager SNO;
/** Timer manager class, triggers Timer timer events
*/
/** User manager. Various methods and data associated with users.
*/
- UserManager *Users;
+ UserManager Users;
/** Channel list, a hash_map containing all channels XXX move to channel manager class
*/
void Cleanup();
/** Return a time_t as a human-readable string.
+ * @param format The format to retrieve the date/time in. See `man 3 strftime`
+ * for more information. If NULL, "%a %b %d %T %Y" is assumed.
+ * @param utc True to convert the time to string as-is, false to convert it to local time first.
+ * @return A string representing the given date/time.
+ */
+ static std::string TimeString(time_t curtime, const char* format = NULL, bool utc = false);
+
+ /** Compare two strings in a timing-safe way. If the lengths of the strings differ, the function
+ * returns false immediately (leaking information about the length), otherwise it compares each
+ * character and only returns after all characters have been compared.
+ * @param one First string
+ * @param two Second string
+ * @return True if the strings match, false if they don't
*/
- static std::string TimeString(time_t curtime);
+ static bool TimingSafeCompare(const std::string& one, const std::string& two);
/** Begin execution of the server.
* NOTE: this function NEVER returns. Internally,