]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_safelist.cpp
Wahhhhhhhhhhhh bwahahaha. Mass commit to tidy up tons of messy include lists
[user/henk/code/inspircd.git] / src / modules / m_safelist.cpp
index 925af1c5deae108876b2e5ef5f47b048104e4aa1..831ddcac59f68f1488bee0dfbb8426eac51aee55 100644 (file)
@@ -19,14 +19,9 @@ using namespace std;
 #include "users.h"
 #include "channels.h"
 #include "modules.h"
-#include "helperfuncs.h"
-#include <vector>
 #include "configreader.h"
 #include "inspircd.h"
-
-extern time_t TIME;
-
-extern InspIRCd* ServerInstance;
+#include "wildcard.h"
 
 class ListData : public classbase
 {
@@ -34,9 +29,10 @@ class ListData : public classbase
        long list_start;
        long list_position;
        bool list_ended;
+       const std::string glob;
 
        ListData() : list_start(0), list_position(0), list_ended(false) {};
-       ListData(long pos, time_t t) : list_start(t), list_position(pos), list_ended(false) {};
+       ListData(long pos, time_t t, const std::string &pattern) : list_start(t), list_position(pos), list_ended(false), glob(pattern) {};
 };
 
 /* $ModDesc: A module overriding /list, and making it safe - stop those sendq problems. */
@@ -55,11 +51,12 @@ class ListTimer : public InspTimer
 
        char buffer[MAXBUF];
        chanrec *chan;
-       
+       InspIRCd* ServerInstance;
+       const std::string glob;
 
  public:
 
-       ListTimer(long interval) : InspTimer(interval,TIME)
+       ListTimer(InspIRCd* Instance, long interval) : InspTimer(interval,Instance->Time()), ServerInstance(Instance)
        {
        }
 
@@ -91,18 +88,20 @@ class ListTimer : public InspTimer
                                        break;
                                }
 
-                               log(DEBUG, "m_safelist.so: resuming spool of list to client %s at channel %ld", u->nick, ld->list_position);
+                               ServerInstance->Log(DEBUG, "m_safelist.so: resuming spool of list to client %s at channel %ld", u->nick, ld->list_position);
                                chan = NULL;
                                /* Attempt to fill up to half the user's sendq with /LIST output */
                                long amount_sent = 0;
                                do
                                {
-                                       log(DEBUG,"Channel %ld",ld->list_position);
+                                       ServerInstance->Log(DEBUG,"Channel %ld",ld->list_position);
                                        if (!ld->list_position)
                                                u->WriteServ("321 %s Channel :Users Name",u->nick);
                                        chan = ServerInstance->GetChannelIndex(ld->list_position);
                                        /* spool details */
                                        bool has_user = (chan && chan->HasUser(u));
+                                       if (!match(chan->name, ld->glob.c_str()))
+                                               continue;
                                        if ((chan) && (((!(chan->modes[CM_PRIVATE])) && (!(chan->modes[CM_SECRET]))) || (has_user)))
                                        {
                                                long users = chan->GetUserCounter();
@@ -111,7 +110,7 @@ class ListTimer : public InspTimer
                                                        int counter = snprintf(buffer,MAXBUF,"322 %s %s %ld :[+%s] %s",u->nick,chan->name,users,chan->ChanModes(has_user),chan->topic);
                                                        /* Increment total plus linefeed */
                                                        amount_sent += counter + 4 + strlen(ServerInstance->Config->ServerName);
-                                                       log(DEBUG,"m_safelist.so: Sent %ld of safe %ld / 4",amount_sent,u->sendqmax);
+                                                       ServerInstance->Log(DEBUG,"m_safelist.so: Sent %ld of safe %ld / 4",amount_sent,u->sendqmax);
                                                        u->WriteServ(std::string(buffer));
                                                }
                                        }
@@ -133,7 +132,7 @@ class ListTimer : public InspTimer
                        }
                }
 
-               ListTimer* MyTimer = new ListTimer(1);
+               ListTimer* MyTimer = new ListTimer(ServerInstance,1);
                ServerInstance->Timers->AddTimer(MyTimer);
        }
 };
@@ -146,7 +145,7 @@ class ModuleSafeList : public Module
  public:
        ModuleSafeList(InspIRCd* Me) : Module::Module(Me)
        {
-               MyTimer = new ListTimer(1);
+               MyTimer = new ListTimer(ServerInstance,1);
                ServerInstance->Timers->AddTimer(MyTimer);
        }
  
@@ -201,7 +200,7 @@ class ModuleSafeList : public Module
                user->GetExt("safelist_last", last_list_time);
                if (last_list_time)
                {
-                       if (TIME < (*last_list_time)+60)
+                       if (ServerInstance->Time() < (*last_list_time)+60)
                        {
                                user->WriteServ("NOTICE %s :*** Woah there, slow down a little, you can't /LIST so often!",user->nick);
                                return 1;
@@ -214,12 +213,12 @@ class ModuleSafeList : public Module
                /*
                 * start at channel 0! ;)
                 */
-               ld = new ListData(0,TIME);
+               ld = new ListData(0,ServerInstance->Time(), pcnt ? parameters[0] : "*");
                user->Extend("safelist_cache", ld);
                listusers.push_back(user);
 
                time_t* llt = new time_t;
-               *llt = TIME;
+               *llt = ServerInstance->Time();
                user->Extend("safelist_last", llt);
        
                return 1;
@@ -267,11 +266,8 @@ class ModuleSafeList : public Module
        }
 
 };
-/******************************************************************************************************/
+
+
 class ModuleSafeListFactory : public ModuleFactory
 {
  public: