haspassed = false;
dns_done = false;
recvq = "";
+ sendq = "";
strcpy(result,"");
for (int i = 0; i < MAXCHANS; i++)
{
}
-void userrec::AddBuffer(std::string a)
+bool userrec::AddBuffer(std::string a)
{
std::string b = "";
for (int i = 0; i < a.length(); i++)
std::stringstream stream(recvq);
stream << b;
recvq = stream.str();
+ int i = 0;
+ // count the size of the first line in the buffer.
+ while (i < recvq.length())
+ {
+ if (recvq[i++] == '\n')
+ break;
+ }
+ // return false if we've had more than 600 characters WITHOUT
+ // a carriage return (this is BAD, drop the socket)
+ return (i < 600);
}
bool userrec::BufferIsReady()
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)
+{
+ 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;
+}