+/** Cached item stored in the query cache.
+ */
+class CoreExport CachedQuery : public classbase
+{
+ public:
+ /** The cached result data, an IP or hostname
+ */
+ std::string data;
+ /** The time when the item is due to expire
+ */
+ time_t expires;
+
+ /** Build a cached query
+ * @param res The result data, an IP or hostname
+ * @param ttl The time-to-live value of the query result
+ */
+ CachedQuery(const std::string &res, unsigned int ttl) : data(res)
+ {
+ expires = time(NULL) + ttl;
+ }
+
+ /** Returns the number of seconds remaining before this
+ * cache item has expired and should be removed.
+ */
+ int CalcTTLRemaining()
+ {
+ int n = (int)expires - (int)time(NULL);
+ return (n < 0 ? 0 : n);
+ }
+};
+
+/** DNS cache information. Holds IPs mapped to hostnames, and hostnames mapped to IPs.
+ */
+#if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED)
+typedef nspace::hash_map<irc::string, CachedQuery, nspace::hash_compare<irc::string> > dnscache;
+#else
+typedef nspace::hash_map<irc::string, CachedQuery, nspace::hash<irc::string> > dnscache;
+#endif
+