diff options
Diffstat (limited to 'src/inspircd.cpp')
-rw-r--r-- | src/inspircd.cpp | 362 |
1 files changed, 1 insertions, 361 deletions
diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 29b3e48be..99c9196c0 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -51,6 +51,7 @@ using namespace std; #include "modules.h" #include "dynamic.h" #include "wildcard.h" +#include "message.h" #ifdef GCC3 #define nspace __gnu_cxx @@ -187,108 +188,6 @@ void AddWhoWas(userrec* u); std::vector<long> auth_cookies; std::stringstream config_f(stringstream::in | stringstream::out); -void safedelete(userrec *p) -{ - if (p) - { - log(DEBUG,"deleting %s %s %s %s",p->nick,p->ident,p->dhost,p->fullname); - log(DEBUG,"safedelete(userrec*): pointer is safe to delete"); - delete p; - p = NULL; - } - else - { - log(DEBUG,"safedelete(userrec*): unsafe pointer operation squished"); - } -} - -void safedelete(chanrec *p) -{ - if (p) - { - delete p; - p = NULL; - log(DEBUG,"safedelete(chanrec*): pointer is safe to delete"); - } - else - { - log(DEBUG,"safedelete(chanrec*): unsafe pointer operation squished"); - } -} - - -void tidystring(char* str) -{ - // strips out double spaces before a : parameter - - char temp[MAXBUF]; - bool go_again = true; - - if (!str) - { - return; - } - - while ((str[0] == ' ') && (strlen(str)>0)) - { - str++; - } - - while (go_again) - { - bool noparse = false; - int t = 0, a = 0; - go_again = false; - while (a < strlen(str)) - { - if ((a<strlen(str)-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<strlen(str)-1) - { - if ((str[a] == ' ') && (str[a+1] == ':')) - { - noparse = true; - } - } - - temp[t++] = str[a++]; - } - temp[t] = '\0'; - strncpy(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; - } - string temp = str; - FOREACH_MOD OnServerRaw(temp,false); - const char* str2 = temp.c_str(); - sprintf(str,"%s",str2); - - - if (strlen(str) >= 512) - { - str[509] = '\r'; - str[510] = '\n'; - str[511] = '\0'; - } -} long GetRevision() @@ -472,42 +371,6 @@ void ReadConfig(void) } } -void Blocking(int s) -{ - int flags; - log(DEBUG,"Blocking: %d",s); - flags = fcntl(s, F_GETFL, 0); - fcntl(s, F_SETFL, flags ^ O_NONBLOCK); -} - -void NonBlocking(int s) -{ - int flags; - log(DEBUG,"NonBlocking: %d",s); - flags = fcntl(s, F_GETFL, 0); - //fcntl(s, F_SETFL, O_NONBLOCK); - fcntl(s, F_SETFL, flags | O_NONBLOCK); -} - - -int CleanAndResolve (char *resolvedHost, const char *unresolvedHost) -{ - struct hostent *hostPtr = NULL; - struct in_addr addr; - - memset (resolvedHost, '\0',MAXBUF); - if(unresolvedHost == NULL) - return(ERROR); - if ((inet_aton(unresolvedHost,&addr)) == 0) - return(ERROR); - hostPtr = gethostbyaddr ((char *)&addr.s_addr,sizeof(addr.s_addr),AF_INET); - if (hostPtr != NULL) - snprintf(resolvedHost,MAXBUF,"%s",hostPtr->h_name); - else - snprintf(resolvedHost,MAXBUF,"%s",unresolvedHost); - return (TRUE); -} - /* write formatted text to a socket, in same format as printf */ void Write(int sock,char *text, ...) @@ -721,16 +584,6 @@ void ChanExceptSender(chanrec* Ptr, userrec* user, char* text, ...) } } -int c_count(userrec* u) -{ - int z = 0; - for (int i =0; i != MAXCHANS; i++) - if (u->chans[i].channel != NULL) - z++; - return z; - -} - std::string GetServerDescription(char* servername) { @@ -751,38 +604,6 @@ std::string GetServerDescription(char* servername) } -/* return 0 or 1 depending if users u and u2 share one or more common channels - * (used by QUIT, NICK etc which arent channel specific notices) */ - -int common_channels(userrec *u, userrec *u2) -{ - int i = 0; - int z = 0; - - if ((!u) || (!u2)) - { - log(DEFAULT,"*** BUG *** common_channels was given an invalid parameter"); - return 0; - } - for (int i = 0; i != MAXCHANS; i++) - { - for (z = 0; z != MAXCHANS; z++) - { - if ((u->chans[i].channel != NULL) && (u2->chans[z].channel != NULL)) - { - if ((u->chans[i].channel == u2->chans[z].channel) && (u->chans[i].channel) && (u2->chans[z].channel) && (u->registered == 7) && (u2->registered == 7)) - { - if ((c_count(u)) && (c_count(u2))) - { - return 1; - } - } - } - } - } - return 0; -} - /* write a formatted string to all users who share at least one common * channel, including the source user e.g. for use in NICK */ @@ -1036,15 +857,6 @@ void NetSendToAllExcept(const char* target,char* s) } -bool hasumode(userrec* user, char mode) -{ - if (user) - { - return (strchr(user->modes,mode)>0); - } - else return false; -} - void WriteMode(const char* modes, int flags, const char* text, ...) { if ((!text) || (!modes) || (!flags)) @@ -1098,29 +910,6 @@ void WriteMode(const char* modes, int flags, const char* text, ...) } } -void ChangeName(userrec* user, const char* gecos) -{ - strncpy(user->fullname,gecos,MAXBUF); - - // TODO: replace these with functions: - // NetSendToAll - to all - // NetSendToCommon - to all that hold users sharing a common channel with another user - // NetSendToOne - to one server - // NetSendToAllExcept - send to all but one - // all by servername - - char buffer[MAXBUF]; - snprintf(buffer,MAXBUF,"a %s :%s",user->nick,gecos); - NetSendToAll(buffer); -} - -void ChangeDisplayedHost(userrec* user, const char* host) -{ - strncpy(user->dhost,host,160); - char buffer[MAXBUF]; - snprintf(buffer,MAXBUF,"b %s %s",user->nick,host); - NetSendToAll(buffer); -} void WriteWallOps(userrec *source, bool local_only, char* text, ...) { @@ -1184,71 +973,7 @@ void strlower(char *n) } } -/* verify that a user's ident and nickname is valid */ - -int isident(const char* n) -{ - char v[MAXBUF]; - if (!n) - { - return 0; - } - if (!strcmp(n,"")) - { - return 0; - } - for (int i = 0; i != strlen(n); i++) - { - if ((n[i] < 33) || (n[i] > 125)) - { - return 0; - } - /* can't occur ANYWHERE in an Ident! */ - if (strchr("<>,./?:;@'~#=+()*&%$£ \"!",n[i])) - { - return 0; - } - } - return 1; -} - - -int isnick(const char* n) -{ - int i = 0; - char v[MAXBUF]; - if (!n) - { - return 0; - } - if (!strcmp(n,"")) - { - return 0; - } - if (strlen(n) > NICKMAX-1) - { - return 0; - } - for (int i = 0; i != strlen(n); i++) - { - if ((n[i] < 33) || (n[i] > 125)) - { - return 0; - } - /* can't occur ANYWHERE in a nickname! */ - if (strchr("<>,./?:;@'~#=+()*&%$£ \"!",n[i])) - { - return 0; - } - /* can't occur as the first char of a nickname... */ - if ((strchr("0123456789",n[i])) && (!i)) - { - return 0; - } - } - return 1; -} /* Find a user record by nickname and return a pointer to it */ @@ -1332,39 +1057,6 @@ void purge_empty_chans(void) log(DEBUG,"completed channel purge, killed %d",purge); } -/* returns the status character for a given user on a channel, e.g. @ for op, - * % for halfop etc. If the user has several modes set, the highest mode - * the user has must be returned. */ - -char* cmode(userrec *user, chanrec *chan) -{ - if ((!user) || (!chan)) - { - log(DEFAULT,"*** BUG *** cmode was given an invalid parameter"); - return ""; - } - - int i; - for (int i = 0; i != MAXCHANS; i++) - { - if ((user->chans[i].channel == chan) && (chan != NULL)) - { - if ((user->chans[i].uc_modes & UCMODE_OP) > 0) - { - return "@"; - } - if ((user->chans[i].uc_modes & UCMODE_HOP) > 0) - { - return "%"; - } - if ((user->chans[i].uc_modes & UCMODE_VOICE) > 0) - { - return "+"; - } - return ""; - } - } -} char scratch[MAXBUF]; char sparam[MAXBUF]; @@ -1440,39 +1132,6 @@ char* chanmodes(chanrec *chan) return scratch; } -/* returns the status value for a given user on a channel, e.g. STATUS_OP for - * op, STATUS_VOICE for voice etc. If the user has several modes set, the - * highest mode the user has must be returned. */ - -int cstatus(userrec *user, chanrec *chan) -{ - if ((!chan) || (!user)) - { - log(DEFAULT,"*** BUG *** cstatus was given an invalid parameter"); - return 0; - } - - for (int i = 0; i != MAXCHANS; i++) - { - if ((user->chans[i].channel == chan) && (chan != NULL)) - { - if ((user->chans[i].uc_modes & UCMODE_OP) > 0) - { - return STATUS_OP; - } - if ((user->chans[i].uc_modes & UCMODE_HOP) > 0) - { - return STATUS_HOP; - } - if ((user->chans[i].uc_modes & UCMODE_VOICE) > 0) - { - return STATUS_VOICE; - } - return STATUS_NORMAL; - } - } -} - /* compile a userlist of a channel into a string, each nick seperated by * spaces and op, voice etc status shown as @ and + */ @@ -1952,25 +1611,6 @@ void kick_channel(userrec *src,userrec *user, chanrec *Ptr, char* reason) } -/* returns 1 if user u has channel c in their record, 0 if not */ - -int has_channel(userrec *u, chanrec *c) -{ - if ((!u) || (!c)) - { - log(DEFAULT,"*** BUG *** has_channel was given an invalid parameter"); - return 0; - } - for (int i =0; i != MAXCHANS; i++) - { - if (u->chans[i].channel == c) - { - return 1; - } - } - return 0; -} - int give_ops(userrec *user,char *dest,chanrec *chan,int status) { userrec *d; |