haspassed = false;
dns_done = false;
recvq = "";
+ sendq = "";
strcpy(result,"");
for (int i = 0; i < MAXCHANS; i++)
{
if (recvq[i++] == '\n')
break;
}
+ if (recvq.length() > this->recvqmax)
+ {
+ this->SetWriteError("RecvQ exceeded");
+ WriteOpers("*** User %s RecvQ of %d exceeds connect class maximum of %d",this->nick,recvq.length(),this->recvqmax);
+ }
// return false if we've had more than 600 characters WITHOUT
// a carriage return (this is BAD, drop the socket)
return (i < 600);
std::string userrec::GetBuffer()
{
- log(DEBUG,"GetBuffer\n%s\n",recvq.c_str());
+ if (recvq == "")
+ return "";
char* line = (char*)recvq.c_str();
std::string ret = "";
while ((*line != '\n') && (strlen(line)))
return ret;
}
+void userrec::AddWriteBuf(std::string data)
+{
+ if (this->GetWriteError() != "")
+ return;
+ if (sendq.length() + data.length() > this->sendqmax)
+ {
+ WriteOpers("*** User %s SendQ of %d exceeds connect class maximum of %d",this->nick,sendq.length() + data.length(),this->sendqmax);
+ this->SetWriteError("SendQ exceeded");
+ return;
+ }
+ std::stringstream stream;
+ stream << sendq << data;
+ sendq = stream.str();
+}
+
+// send AS MUCH OF THE USERS SENDQ as we are able to (might not be all of it)
+void userrec::FlushWriteBuf()
+{
+ if (sendq.length())
+ {
+ char* tb = (char*)this->sendq.c_str();
+ int n_sent = write(this->fd,tb,this->sendq.length());
+ if (n_sent == -1)
+ {
+ this->SetWriteError(strerror(errno));
+ }
+ else
+ {
+ // advance the queue
+ tb += n_sent;
+ this->sendq = tb;
+ // update the user's stats counters
+ this->bytes_out += n_sent;
+ this->cmds_out++;
+ }
+ }
+}
+
+void userrec::SetWriteError(std::string error)
+{
+ log(DEBUG,"Setting error string for %s to '%s'",this->nick,error.c_str());
+ // don't try to set the error twice, its already set take the first string.
+ if (this->WriteError == "")
+ this->WriteError = error;
+}
+
+std::string userrec::GetWriteError()
+{
+ return this->WriteError;
+}