summaryrefslogtreecommitdiff
path: root/src/socket_transport.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-01-03 11:41:32 -0500
committerAdam <Adam@anope.org>2013-01-03 12:34:01 -0500
commit098157dca8a4aecc18294cbc31cbe5ee95b35a94 (patch)
tree654f00f21e151ba9007ca8eb044a78fef1bd6e39 /src/socket_transport.cpp
parent827469600e8cf98fea7aec09ceaa77a097300b72 (diff)
Don't delete users immediately when quit or killed, instead wait until message processing is done
Diffstat (limited to 'src/socket_transport.cpp')
-rw-r--r--src/socket_transport.cpp37
1 files changed, 9 insertions, 28 deletions
diff --git a/src/socket_transport.cpp b/src/socket_transport.cpp
index 4af3668a3..98da3e605 100644
--- a/src/socket_transport.cpp
+++ b/src/socket_transport.cpp
@@ -33,34 +33,9 @@ bool BufferedSocket::ProcessRead()
return false;
tbuffer[len] = 0;
+ this->read_buffer.append(tbuffer);
this->recv_len = len;
- Anope::string sbuffer = this->extra_buf;
- sbuffer += tbuffer;
- this->extra_buf.clear();
- size_t lastnewline = sbuffer.rfind('\n');
- if (lastnewline == Anope::string::npos)
- {
- this->extra_buf = sbuffer;
- return true;
- }
- if (lastnewline < sbuffer.length() - 1)
- {
- this->extra_buf = sbuffer.substr(lastnewline);
- this->extra_buf.trim();
- sbuffer = sbuffer.substr(0, lastnewline);
- }
-
- sepstream stream(sbuffer, '\n');
-
- Anope::string tbuf;
- while (stream.GetToken(tbuf))
- {
- tbuf.trim();
- if (!Read(tbuf))
- return false;
- }
-
return true;
}
@@ -76,9 +51,15 @@ bool BufferedSocket::ProcessWrite()
return true;
}
-bool BufferedSocket::Read(const Anope::string &buf)
+const Anope::string BufferedSocket::GetLine()
{
- return false;
+ size_t s = this->read_buffer.find('\n');
+ if (s == Anope::string::npos)
+ return "";
+ Anope::string str = this->read_buffer.substr(0, s + 1);
+ this->read_buffer.erase(0, s + 1);
+ this->read_buffer.ltrim();
+ return str.trim();
}
void BufferedSocket::Write(const char *buffer, size_t l)