]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/message.cpp
Adjust m_mysql to match the assumed behaviour of m_pgsql exactly, e.g. when there...
[user/henk/code/inspircd.git] / src / message.cpp
index 655591607c99f157ee8cc6dfd95740094b8869dc..e4dc380cd2af87c701273cf40626c79e7cf8a0db 100644 (file)
@@ -18,18 +18,14 @@ using namespace std;
 
 #include "inspircd_config.h"
 #include "inspircd.h"
-#include "inspircd_io.h"
+#include "configreader.h"
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/errno.h>
 #include <sys/utsname.h>
 #include <time.h>
 #include <string>
-#ifdef GCC3
 #include <ext/hash_map>
-#else
-#include <hash_map>
-#endif
 #include <map>
 #include <sstream>
 #include <vector>
@@ -80,80 +76,6 @@ int common_channels(userrec *u, userrec *u2)
        return 0;
 }
 
-void tidystring(char* str)
-{
-       // strips out double spaces before a : parameter
-
-       char temp[MAXBUF];
-       bool go_again = true;
-
-       if (!str)
-               return;
-
-       // pointer voodoo++ --w00t
-       while ((*str) && (*str == ' '))
-               str++;
-
-       while (go_again)
-       {
-               bool noparse = false;
-               int t = 0, a = 0;
-               go_again = false;
-               const int lenofstr = strlen(str);
-
-               /*
-                * by caching strlen() of str, we theoretically avoid 3 expensive calls each time this loop
-                * rolls around.. should speed things up a nanosecond or two. ;)
-                */
-
-               while (a < lenofstr)
-               {
-                       if ((a < lenofstr - 1) && (noparse == false))
-                       {
-                               if ((str[a] == ' ') && (str[a+1] == ' '))
-                               {
-                                       log(DEBUG,"Tidied extra space out of string: %s",str);
-                                       go_again = true;
-                                       a++;
-                               }
-                       }
-
-                       if (a < lenofstr - 1)
-                       {
-                               if ((str[a] == ' ') && (str[a+1] == ':'))
-                               {
-                                       noparse = true;
-                               }
-                       }
-
-                       temp[t++] = str[a++];
-               }
-
-               temp[t] = '\0';
-               strlcpy(str,temp,MAXBUF);
-       }
-}
-
-/* chop a string down to 512 characters and preserve linefeed (irc max
- * line length) */
-
-void chop(char* str)
-{
-       if (!str)
-       {
-               log(DEBUG,"ERROR! Null string passed to chop()!");
-               return;
-       }
-       if (strlen(str) >= 511)
-       {
-               str[510] = '\r';
-               str[511] = '\n';
-               str[512] = '\0';
-               log(DEBUG,"Excess line chopped.");
-       }
-}
-
-
 void Blocking(int s)
 {
        int flags = fcntl(s, F_GETFL, 0);
@@ -168,15 +90,15 @@ void NonBlocking(int s)
 
 int CleanAndResolve (char *resolvedHost, const char *unresolvedHost, bool forward)
 {
-       int fd;
+       bool ok;
        std::string ipaddr;
 
        DNS d(Config->DNSServer);
        if (forward)
-               fd = d.ForwardLookup(unresolvedHost);
+               ok = d.ForwardLookup(unresolvedHost, false);
        else
-               fd = d.ReverseLookup(unresolvedHost);
-       if (fd < 0)
+               ok = d.ReverseLookup(unresolvedHost, false);
+       if (!ok)
                return 0;
        time_t T = time(NULL)+1;
        while ((!d.HasResult()) && (time(NULL)<T));
@@ -198,16 +120,6 @@ int c_count(userrec* u)
 
 }
 
-bool hasumode(userrec* user, char mode)
-{
-       if (user)
-       {
-               return (strchr(user->modes,mode)>0);
-       }
-       else return false;
-}
-
-
 void ChangeName(userrec* user, const char* gecos)
 {
        if (user->fd > -1)
@@ -223,14 +135,14 @@ void ChangeName(userrec* user, const char* gecos)
 
 void ChangeDisplayedHost(userrec* user, const char* host)
 {
-        if (user->fd > -1)
-        {
-                int MOD_RESULT = 0;
-                FOREACH_RESULT(I_OnChangeLocalUserHost,OnChangeLocalUserHost(user,host));
-                if (MOD_RESULT)
-                        return;
+       if (user->fd > -1)
+       {
+               int MOD_RESULT = 0;
+               FOREACH_RESULT(I_OnChangeLocalUserHost,OnChangeLocalUserHost(user,host));
+               if (MOD_RESULT)
+                       return;
                FOREACH_MOD(I_OnChangeHost,OnChangeHost(user,host));
-        }
+       }
        strlcpy(user->dhost,host,63);
        WriteServ(user->fd,"396 %s %s :is now your hidden host",user->nick,user->dhost);
 }
@@ -239,23 +151,23 @@ void ChangeDisplayedHost(userrec* user, const char* host)
 
 int isident(const char* n)
 {
-        if (!n || !*n)
-        {
-                return 0;
-        }
-        for (char* i = (char*)n; *i; i++)
-        {
-                if ((*i >= 'A') && (*i <= '}'))
-                {
-                        continue;
-                }
-                if (strchr(".-0123456789",*i))
-                {
-                        continue;
-                }
+       if (!n || !*n)
+       {
                return 0;
-        }
-        return 1;
+       }
+       for (char* i = (char*)n; *i; i++)
+       {
+               if ((*i >= 'A') && (*i <= '}'))
+               {
+                       continue;
+               }
+               if (strchr(".-0123456789",*i))
+               {
+                       continue;
+               }
+               return 0;
+       }
+       return 1;
 }
 
 
@@ -416,9 +328,13 @@ std::string chlist(userrec *user,userrec* source)
                        /* Commenting this out until someone finds a case where we need it */
                        //if (lst.find(rec->channel->name) == std::string::npos)
                        //{
-                               // if the channel is NOT private/secret, OR the source user is on the channel, AND the user is not invisible.
-                               // if the user is the same as the source or is an oper, shortcircuit the comparison.
-                               if ((source == user) || (*source->oper && Config->OperSpyWhois) || (((!rec->channel->modes[CM_PRIVATE]) && (!rec->channel->modes[CM_SECRET]) && !(user->modebits & UM_INVISIBLE)) || (rec->channel->HasUser(source))))
+                       
+                               /*
+                                * If the target is the same as the sender, let them see all their channels.
+                                * If the channel is NOT private/secret AND the user is not invisible.
+                                * If the user is an oper, and the <options:operspywhois> option is set.
+                                */
+                               if ((source == user) || (*source->oper && Config->OperSpyWhois) || (((!rec->channel->modes[CM_PRIVATE]) && (!rec->channel->modes[CM_SECRET]) && !(user->modes[UM_INVISIBLE])) || (rec->channel->HasUser(source))))
                                {
                                        list << cmode(user, rec->channel) << rec->channel->name << " ";
                                }