]> 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 c7faf7fadd71bf7d2e7d8f410e1ea913b6a86a12..831ddcac59f68f1488bee0dfbb8426eac51aee55 100644 (file)
@@ -19,10 +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"
+#include "wildcard.h"
 
 class ListData : public classbase
 {
@@ -30,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. */
@@ -52,6 +52,7 @@ class ListTimer : public InspTimer
        char buffer[MAXBUF];
        chanrec *chan;
        InspIRCd* ServerInstance;
+       const std::string glob;
 
  public:
 
@@ -87,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();
@@ -107,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));
                                                }
                                        }
@@ -210,7 +213,7 @@ class ModuleSafeList : public Module
                /*
                 * start at channel 0! ;)
                 */
-               ld = new ListData(0,ServerInstance->Time());
+               ld = new ListData(0,ServerInstance->Time(), pcnt ? parameters[0] : "*");
                user->Extend("safelist_cache", ld);
                listusers.push_back(user);
 
@@ -263,11 +266,8 @@ class ModuleSafeList : public Module
        }
 
 };
-/******************************************************************************************************/
+
+
 class ModuleSafeListFactory : public ModuleFactory
 {
  public: