}
}
}
+ // if the user was not in any channels, no users will receive the text. Make sure the user
+ // receives their OWN message for WriteCommon
+ if (!already_sent.size())
+ {
+ WriteFrom(u->fd,u,"%s",textbuffer);
+ }
}
/* write a formatted string to all users who share at least one common
tvs.tv_sec = 0;
tv.tv_sec = 0;
tv.tv_usec = 10000L;
- char data[10240];
+ char data[65535];
timeval tval;
fd_set sfd;
tval.tv_usec = 10000L;
result = EAGAIN;
if ((count2a->second->fd != FD_MAGIC_NUMBER) && (count2a->second->fd != -1) && (FD_ISSET (count2a->second->fd, &sfd)))
{
- memset(data, 0, 10240);
- result = read(count2a->second->fd, data, 10240);
-
+ result = read(count2a->second->fd, data, 65535);
if (result)
{
// perform a check on the raw buffer as an array (not a string!) to remove
if ((data[checker] == 0) || (data[checker] == 7))
data[checker] = ' ';
}
+ if (result > 0)
+ data[result] = '\0';
userrec* current = count2a->second;
int currfd = current->fd;
- char* l = strtok(data,"\n");
int floodlines = 0;
- while (l)
+ current->AddBuffer(data);
+ if (current->recvq.length() > NetBufferSize)
{
- floodlines++;
- if ((floodlines > current->flood) && (current->flood != 0))
+ if (current->registered == 7)
{
- log(DEFAULT,"Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
- WriteOpers("*** Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
- kill_link(current,"Excess flood");
- goto label;
+ kill_link(current,"RecvQ exceeded");
}
- char sanitized[NetBufferSize];
- memset(sanitized, 0, NetBufferSize);
- int ptt = 0;
- for (int pt = 0; pt < strlen(l); pt++)
+ else
{
- if (l[pt] != '\r')
+ add_zline(120,ServerName,"Flood from unregistered connection",current->ip);
+ apply_lines();
+ }
+ goto label;
+ }
+ // while there are complete lines to process...
+ while (current->BufferIsReady())
+ {
+ floodlines++;
+ if ((floodlines > current->flood) && (current->flood != 0))
+ {
+ if (current->registered == 7)
+ {
+ log(DEFAULT,"Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
+ WriteOpers("*** Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
+ kill_link(current,"Excess flood");
+ }
+ else
{
- sanitized[ptt++] = l[pt];
+ add_zline(120,ServerName,"Flood from unregistered connection",current->ip);
+ apply_lines();
}
+ goto label;
}
- sanitized[ptt] = '\0';
+ char sanitized[MAXBUF];
+ // use GetBuffer to copy single lines into the sanitized string
+ strlcpy(sanitized,current->GetBuffer().c_str(),MAXBUF);
if (*sanitized)
{
-
-
// we're gonna re-scan to check if the nick is gone, after every
// command - if it has, we're gonna bail
bool find_again = false;
process_buffer(sanitized,current);
-
// look for the user's record in case it's changed
for (user_hash::iterator c2 = clientlist.begin(); c2 != clientlist.end(); c2++)
{
goto label;
}
- l = strtok(NULL,"\n");
}
goto label;
}