]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/helperfuncs.cpp
(TEST CODE) remote ping, do not use until debugged
[user/henk/code/inspircd.git] / src / helperfuncs.cpp
index 070a3d3b192c3be6f5c4e1872328b513b9ab9442..fc4ec970f69f59285f6073579b706b8ae7453777 100644 (file)
@@ -125,7 +125,7 @@ void readfile(file_cache &F, const char* fname)
 
 void Write_NoFormat(int sock, const char *text)
 {
-       if ((sock < 0) || (!text))
+       if ((sock < 0) || (!text) || (sock > MAX_DESCRIPTORS))
                return;
 
        char tb[MAXBUF];
@@ -148,7 +148,7 @@ void Write_NoFormat(int sock, const char *text)
 
 void Write(int sock,char *text, ...)
 {
-        if (sock < 0)
+        if ((sock < 0) || (sock > MAX_DESCRIPTORS))
                 return;
         if (!text)
         {
@@ -179,7 +179,7 @@ void Write(int sock,char *text, ...)
 
 void WriteServ_NoFormat(int sock, const char* text)
 {
-       if ((sock < 0) || (!text))
+       if ((sock < 0) || (!text) || (sock > MAX_DESCRIPTORS))
                return;
        char tb[MAXBUF];
        int bytes = snprintf(tb,MAXBUF,":%s %s\r\n",Config->ServerName,text);
@@ -203,7 +203,7 @@ void WriteServ_NoFormat(int sock, const char* text)
 
 void WriteServ(int sock, char* text, ...)
 {
-        if (sock < 0)
+        if ((sock < 0) || (sock > MAX_DESCRIPTORS))
                 return;
         if (!text)
         {
@@ -234,7 +234,7 @@ void WriteServ(int sock, char* text, ...)
 
 void WriteFrom_NoFormat(int sock, userrec *user, const char* text)
 {
-       if ((sock < 0) || (!text) || (!user))
+       if ((sock < 0) || (!text) || (!user) || (sock > MAX_DESCRIPTORS))
                return;
        char tb[MAXBUF];
        int bytes = snprintf(tb,MAXBUF,":%s %s\r\n",user->GetFullHost(),text);
@@ -258,7 +258,7 @@ void WriteFrom_NoFormat(int sock, userrec *user, const char* text)
 
 void WriteFrom(int sock, userrec *user,char* text, ...)
 {
-        if (sock < 0)
+        if ((sock < 0) || (sock > MAX_DESCRIPTORS))
                 return;
         if ((!text) || (!user))
         {
@@ -513,6 +513,7 @@ void ChanExceptSender(chanrec* Ptr, userrec* user, char status, char* text, ...)
                        ulist = Ptr->GetUsers();
                break;
        }
+       log(DEBUG,"%d users to write to",ulist->size());
        for (std::map<char*,char*>::iterator i = ulist->begin(); i != ulist->end(); i++)
         {
                 char* o = i->second;
@@ -1285,7 +1286,10 @@ int usercount_invisible(void)
 
 int usercount_opers(void)
 {
-        return all_opers.size();
+       int c = 0;
+       for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++)
+               if (*i->second->oper) c++;
+        return c;
 }
 
 int usercount_unknown(void)
@@ -1461,3 +1465,36 @@ int InsertMode(std::string &output, const char* mode, unsigned short section)
        output.insert(pos, mode);
        return 1;
 }
+
+bool IsValidChannelName(const char *chname)
+{
+               char *c;
+
+               /* check for no name - don't check for !*chname, as if it is empty, it won't be '#'! */
+               if (!chname || *chname != '#')
+               {
+                               return false;
+               }
+
+               c = (char *)chname + 1;
+               while (*c)
+               {
+                               switch (*c)
+                               {
+                                               case ' ':
+                                               case ',':
+                                               case 7:
+                                                               return false;
+                               }
+
+                               c++;
+               }
+               
+               /* too long a name - note funky pointer arithmetic here. */
+               if ((c - chname) > CHANMAX)
+               {
+                               return false;
+               }
+
+               return true;
+}