]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/commands.cpp
Made it compile :p
[user/henk/code/inspircd.git] / src / commands.cpp
index b3b9d41ac44d45e7b96dcad8a6eaf2721f757b4f..f0f5ddf30bfd0f6982aae449d756db944c671157 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
+ *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
  *                       E-mail:
  *                <brain@chatspike.net>
  *               <Craig@chatspike.net>
@@ -63,7 +63,6 @@ using namespace std;
 #include "typedefs.h"
 #include "command_parse.h"
 
-extern SocketEngine* SE;
 extern ServerConfig* Config;
 extern InspIRCd* ServerInstance;
 
@@ -80,7 +79,6 @@ const long duration_y = duration_w * 52;
 
 extern user_hash clientlist;
 extern chan_hash chanlist;
-extern whowas_hash whowas;
 
 extern std::vector<userrec*> all_opers;
 extern std::vector<userrec*> local_users;
@@ -88,14 +86,8 @@ extern std::vector<userrec*> local_users;
 // This table references users by file descriptor.
 // its an array to make it VERY fast, as all lookups are referenced
 // by an integer, meaning there is no need for a scan/search operation.
-extern userrec* fd_ref_table[65536];
+extern userrec* fd_ref_table[MAX_DESCRIPTORS];
 
-char* CleanFilename(char* name)
-{
-       char* p = name + strlen(name);
-       while ((p != name) && (*p != '/')) p--;
-       return (p != name ? ++p : p);
-}
 
 void split_chlist(userrec* user, userrec* dest, std::string &cl)
 {
@@ -118,15 +110,16 @@ void split_chlist(userrec* user, userrec* dest, std::string &cl)
        }
 }
 
+/* XXX - perhaps this should be in cmd_whois? -- w00t */
 void do_whois(userrec* user, userrec* dest,unsigned long signon, unsigned long idle, char* nick)
 {
        // bug found by phidjit - were able to whois an incomplete connection if it had sent a NICK or USER
        if (dest->registered == 7)
        {
                WriteServ(user->fd,"311 %s %s %s %s * :%s",user->nick, dest->nick, dest->ident, dest->dhost, dest->fullname);
-               if ((user == dest) || (strchr(user->modes,'o')))
+               if ((user == dest) || (*user->oper))
                {
-                       WriteServ(user->fd,"378 %s %s :is connecting from *@%s %s",user->nick, dest->nick, dest->host, dest->ip);
+                       WriteServ(user->fd,"378 %s %s :is connecting from *@%s %s",user->nick, dest->nick, dest->host, (char*)inet_ntoa(dest->ip4));
                }
                std::string cl = chlist(dest,user);
                if (cl.length())
@@ -140,21 +133,21 @@ void do_whois(userrec* user, userrec* dest,unsigned long signon, unsigned long i
                                WriteServ(user->fd,"319 %s %s :%s",user->nick, dest->nick, cl.c_str());
                        }
                }
-               WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, dest->server, GetServerDescription(dest->server).c_str());
+               if (*Config->HideWhoisServer)
+               {
+                       WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, *user->oper ? dest->server : Config->HideWhoisServer, *user->oper ? GetServerDescription(dest->server).c_str() : Config->Network);
+               }
+               else
+               {
+                       WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, dest->server, GetServerDescription(dest->server).c_str());
+               }
                if (*dest->awaymsg)
                {
                        WriteServ(user->fd,"301 %s %s :%s",user->nick, dest->nick, dest->awaymsg);
                }
-               if (strchr(dest->modes,'o'))
+               if (*dest->oper)
                {
-                       if (*dest->oper)
-                       {
-                               WriteServ(user->fd,"313 %s %s :is %s %s on %s",user->nick, dest->nick, (strchr("aeiou",dest->oper[0]) ? "an" : "a"),dest->oper, Config->Network);
-                       }
-                       else
-                       {
-                               WriteServ(user->fd,"313 %s %s :is opered but has an unknown type",user->nick, dest->nick);
-                       }
+                       WriteServ(user->fd,"313 %s %s :is %s %s on %s",user->nick, dest->nick, (strchr("aeiou",*dest->oper) ? "an" : "a"),dest->oper, Config->Network);
                }
                if ((!signon) && (!idle))
                {
@@ -179,24 +172,16 @@ void do_whois(userrec* user, userrec* dest,unsigned long signon, unsigned long i
        }
 }
 
+
+/* XXX - these really belong in helperfuncs perhaps -- w00t */
 bool is_uline(const char* server)
 {
-       char ServName[MAXBUF];
-
        if (!server)
                return false;
-       if (!(*server))
+       if (!*server)
                return true;
 
-       for (int i = 0; i < Config->ConfValueEnum("uline",&Config->config_f); i++)
-       {
-               Config->ConfValue("uline","server",i,ServName,&Config->config_f);
-               if (!strcasecmp(server,ServName))
-               {
-                       return true;
-               }
-       }
-       return false;
+       return (find(Config->ulines.begin(),Config->ulines.end(),server) != Config->ulines.end());
 }
 
 int operstrcmp(char* data,char* input)
@@ -274,7 +259,7 @@ long duration(const char* str)
 
 /* All other ircds when doing this check usually just look for a string of *@* or *. We're smarter than that, though. */
 
-bool host_matches_everyone(std::string mask, userrec* user)
+bool host_matches_everyone(const std::string &mask, userrec* user)
 {
        char insanemasks[MAXBUF];
        char buffer[MAXBUF];
@@ -289,7 +274,7 @@ bool host_matches_everyone(std::string mask, userrec* user)
        for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++)
        {
                strlcpy(buffer,u->second->ident,MAXBUF);
-               strlcat(buffer,"@",MAXBUF);
+               charlcat(buffer,'@',MAXBUF);
                strlcat(buffer,u->second->host,MAXBUF);
                if (match(buffer,mask.c_str()))
                        matches++;
@@ -303,7 +288,7 @@ bool host_matches_everyone(std::string mask, userrec* user)
        return false;
 }
 
-bool ip_matches_everyone(std::string ip, userrec* user)
+bool ip_matches_everyone(const std::string &ip, userrec* user)
 {
        char insanemasks[MAXBUF];
        char itrigger[MAXBUF];
@@ -316,7 +301,7 @@ bool ip_matches_everyone(std::string ip, userrec* user)
        long matches = 0;
        for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++)
        {
-               if (match(u->second->ip,ip.c_str()))
+               if (match((char*)inet_ntoa(u->second->ip4),ip.c_str()))
                        matches++;
        }
        float percent = ((float)matches / (float)clientlist.size()) * 100;
@@ -328,7 +313,7 @@ bool ip_matches_everyone(std::string ip, userrec* user)
        return false;
 }
 
-bool nick_matches_everyone(std::string nick, userrec* user)
+bool nick_matches_everyone(const std::string &nick, userrec* user)
 {
        char insanemasks[MAXBUF];
        char itrigger[MAXBUF];