*/
#include "squid.h"
+#include "Debug.h"
+#include "event.h"
#include "SquidConfig.h"
#include "SquidTime.h"
-#include "UserNameCache.h"
-
-#include <algorithm>
+#include "auth/UserNameCache.h"
namespace Auth {
-User::Pointer
+UserNameCache::UserNameCache(const char *name) :
+ cachename(name)
+{
+ static std::string eventName("User Cache cleanup: ");
+ eventName.append(name);
+ eventAdd(eventName.c_str(), &UserNameCache::cleanup, this, ::Config.authenticateGCInterval, 1);
+}
+
+Auth::User::Pointer
UserNameCache::lookup(const SBuf &userKey)
{
auto p = store_.find(userKey);
}
void
-UserNameCache::cleanup(void *)
+UserNameCache::cleanup(void *me)
{
+ // me is this in disguise
+ UserNameCache *self = static_cast<UserNameCache *>(me);
// cache entries with expiretime <= expirationTime are to be evicted
const time_t expirationTime = current_time.tv_sec - ::Config.authenticateTTL;
- const auto end = store_.end();
- for (auto i = store_.begin(); i != end; ++i) {
+ const auto end = self->store_.end();
+ for (auto i = self->store_.begin(); i != end; ++i) {
if (i->second->expiretime <= expirationTime)
- store_.erase(i);
+ self->store_.erase(i);
}
}
#define SQUID_USERNAMECACHE_H_
#include "SBufAlgos.h"
-#include "User.h"
+#include "auth/User.h"
#include <unordered_map>
{
private:
/// key is Uer::userKey(), mapped value is User::Pointer
- typedef std::unordered_map<SBuf, User::Pointer> StoreType;
+ typedef std::unordered_map<SBuf, Auth::User::Pointer> StoreType;
public:
UserNameCache() = delete;
- explicit UserNameCache(const char *name) : cachename(name) {}
+ explicit UserNameCache(const char *name);
~UserNameCache() = default;
UserNameCache(const UserNameCache& ) = delete;
UserNameCache& operator=(const UserNameCache&) = delete;
/// obtain pointer to user if present, or Pointer(nullptr) if not
- User::Pointer lookup(const SBuf &userKey);
+ Auth::User::Pointer lookup(const SBuf &userKey);
void reset();
size_t size();
- /// periodic cleanup function, removes timed-out entries.
- void cleanup(void *);
+ /** periodic cleanup function, removes timed-out entries
+ *
+ * Must be static to support EVH interface. Argument is this
+ */
+ static void cleanup(void *);
private:
StoreType store_;