+
+ virtual void OnCleanup(int target_type, void* item)
+ {
+ if(target_type == TYPE_USER)
+ {
+ userrec* u = (userrec*)item;
+ ListData* ld;
+ u->GetExt("safelist_cache", ld);
+ if (ld)
+ {
+ u->Shrink("safelist_cache");
+ DELETE(ld);
+ }
+ for (UserList::iterator iter = listusers.begin(); iter != listusers.end(); iter++)
+ {
+ userrec* u2 = (userrec*)(*iter);
+ if (u2 == u)
+ {
+ listusers.erase(iter);
+ break;
+ }
+ }
+ time_t* last_list_time;
+ u->GetExt("safelist_last", last_list_time);
+ if (last_list_time)
+ {
+ DELETE(last_list_time);
+ u->Shrink("safelist_last");
+ }
+ }
+ }
+
+ virtual void On005Numeric(std::string &output)
+ {
+ output.append(" SAFELIST");
+ }
+
+ virtual void OnUserQuit(userrec* user, const std::string &message)
+ {
+ this->OnCleanup(TYPE_USER,user);
+ }
+