-
-extern FILE *log_file;
-extern char DNSServer[MAXBUF];
-
-/* 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)
-{
- if ((!u) || (!u2))
- {
- log(DEFAULT,"*** BUG *** common_channels was given an invalid parameter");
- return 0;
- }
- for (int i = 0; i != MAXCHANS; i++)
- {
- for (int z = 0; z != MAXCHANS; z++)
- {
- if ((u->chans[i].channel != NULL) && (u2->chans[z].channel != NULL))
- {
- if ((!strcasecmp(u->chans[i].channel->name,u2->chans[z].channel->name)) && (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;
-}
-
-
-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;
- unsigned 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';
- 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;
- }
- string temp = str;
- FOREACH_MOD OnServerRaw(temp,false,NULL);
- const char* str2 = temp.c_str();
- snprintf(str,MAXBUF,"%s",str2);
- if (strlen(str) >= 511)
- {
- str[510] = '\r';
- str[511] = '\n';
- str[512] = '\0';
- log(DEBUG,"Excess line chopped.");
- }
-}
-
-
-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, flags | O_NONBLOCK);
-}
-
-int CleanAndResolve (char *resolvedHost, const char *unresolvedHost)
-{
- DNS d(DNSServer);
- int fd = d.ReverseLookup(unresolvedHost);
- if (fd < 1)
- return 0;
- time_t T = time(NULL)+1;
- while ((!d.HasResult()) && (time(NULL)<T));
- std::string ipaddr = d.GetResult();
- strlcpy(resolvedHost,ipaddr.c_str(),MAXBUF);
- return (ipaddr != "");
-}
-
-int c_count(userrec* u)
-{
- int z = 0;
- for (int i =0; i != MAXCHANS; i++)
- if (u->chans[i].channel != NULL)
- z++;
- return z;
-
-}
-
-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 (!strcasecmp(user->server,ServerName))
- {
- int MOD_RESULT = 0;
- FOREACH_RESULT(OnChangeLocalUserGECOS(user,gecos));
- if (MOD_RESULT)
- return;
- }
- strlcpy(user->fullname,gecos,MAXBUF);
-}
-
-void ChangeDisplayedHost(userrec* user, const char* host)
-{
- if (!strcasecmp(user->server,ServerName))
- {
- int MOD_RESULT = 0;
- FOREACH_RESULT(OnChangeLocalUserHost(user,host));
- if (MOD_RESULT)
- return;
- }
- strlcpy(user->dhost,host,160);
-}