diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-09-11 00:15:28 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-09-11 00:15:28 +0000 |
commit | bd6158e7b044f853be0b493c0ccbfc7a5c05082e (patch) | |
tree | 07e1ab488b2ff8b91cf4b5942e54d8ec4e38f240 /src | |
parent | a363c6f2bebc02ab553ee96b0e9e865e4f93e2d8 (diff) |
Remove WaitingForWriteEvent, it seems to do *nothing* except confuse things. Also, don't close socket on http if FlushWriteBuf doesn't write it all in one go, in fact, don't try FlushWriteBuf at all - use the sockets default of waiting to be told it's safe to write data.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10509 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/inspsocket.cpp | 24 | ||||
-rw-r--r-- | src/modules/m_httpd.cpp | 23 |
2 files changed, 7 insertions, 40 deletions
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp index 0c3f3ea17..ea0534f24 100644 --- a/src/inspsocket.cpp +++ b/src/inspsocket.cpp @@ -20,7 +20,7 @@ bool BufferedSocket::Readable() { - return ((this->state != I_CONNECTING) && (this->WaitingForWriteEvent == false)); + return (this->state != I_CONNECTING); } BufferedSocket::BufferedSocket(InspIRCd* SI) @@ -28,7 +28,6 @@ BufferedSocket::BufferedSocket(InspIRCd* SI) this->Timeout = NULL; this->state = I_DISCONNECTED; this->fd = -1; - this->WaitingForWriteEvent = false; this->Instance = SI; } @@ -38,7 +37,6 @@ BufferedSocket::BufferedSocket(InspIRCd* SI, int newfd, const char* ip) this->fd = newfd; this->state = I_CONNECTED; strlcpy(this->IP,ip,MAXBUF); - this->WaitingForWriteEvent = false; this->Instance = SI; if (this->fd > -1) this->Instance->SE->AddFd(this); @@ -50,7 +48,6 @@ BufferedSocket::BufferedSocket(InspIRCd* SI, const std::string &ipaddr, int apor this->fd = -1; this->Instance = SI; strlcpy(host,ipaddr.c_str(),MAXBUF); - this->WaitingForWriteEvent = false; this->Timeout = NULL; strlcpy(this->host,ipaddr.c_str(),MAXBUF); @@ -98,7 +95,6 @@ BufferedSocket::BufferedSocket(InspIRCd* SI, const std::string &ipaddr, int apor void BufferedSocket::WantWrite() { this->Instance->SE->WantWrite(this); - this->WaitingForWriteEvent = true; } void BufferedSocket::SetQueues(int nfd) @@ -595,7 +591,11 @@ bool BufferedSocket::OnConnected() { return true; } void BufferedSocket::OnError(BufferedSocketError) { return; } int BufferedSocket::OnDisconnect() { return 0; } bool BufferedSocket::OnDataReady() { return true; } -bool BufferedSocket::OnWriteReady() { return true; } +bool BufferedSocket::OnWriteReady() +{ + // Default behaviour: just try write some. + return !this->FlushWriteBuffer(); +} void BufferedSocket::OnTimeout() { return; } void BufferedSocket::OnClose() { return; } @@ -644,16 +644,6 @@ void BufferedSocket::HandleEvent(EventType et, int errornum) } break; case EVENT_WRITE: - if (this->WaitingForWriteEvent) - { - this->WaitingForWriteEvent = false; - if (!this->OnWriteReady()) - { - if (this->Instance->SocketCull.find(this) == this->Instance->SocketCull.end()) - this->Instance->SocketCull[this] = this; - return; - } - } if (this->state == I_CONNECTING) { /* This might look wrong as if we should be actually calling @@ -667,7 +657,7 @@ void BufferedSocket::HandleEvent(EventType et, int errornum) } else { - if (this->FlushWriteBuffer()) + if (!this->OnWriteReady()) { if (this->Instance->SocketCull.find(this) == this->Instance->SocketCull.end()) this->Instance->SocketCull[this] = this; diff --git a/src/modules/m_httpd.cpp b/src/modules/m_httpd.cpp index 777ba5567..eaf671267 100644 --- a/src/modules/m_httpd.cpp +++ b/src/modules/m_httpd.cpp @@ -165,7 +165,6 @@ class HttpServerSocket : public BufferedSocket SendHeaders(data.length(), response, empty); this->Write(data); - this->FlushWriteBuffer(); } void SendHeaders(unsigned long size, int response, HTTPHeaders &rheaders) @@ -251,7 +250,6 @@ class HttpServerSocket : public BufferedSocket if (request_type.empty() || uri.empty() || http_version.empty()) { SendHTTPError(400); - SetWrite(); return; } @@ -265,7 +263,6 @@ class HttpServerSocket : public BufferedSocket if ((fieldsep == std::string::npos) || (fieldsep == 0) || (fieldsep == cheader.length() - 1)) { SendHTTPError(400); - SetWrite(); return; } @@ -282,7 +279,6 @@ class HttpServerSocket : public BufferedSocket if ((http_version != "HTTP/1.1") && (http_version != "HTTP/1.0")) { SendHTTPError(505); - SetWrite(); return; } @@ -319,8 +315,6 @@ class HttpServerSocket : public BufferedSocket HTTPHeaders empty; SendHeaders(index->ContentSize(), 200, empty); this->Write(index->Contents()); - this->FlushWriteBuffer(); - SetWrite(); } else { @@ -335,32 +329,15 @@ class HttpServerSocket : public BufferedSocket if (!claimed) { SendHTTPError(404); - SetWrite(); } } } } - - bool OnWriteReady() - { - Instance->Logs->Log("m_httpd",DEBUG,"OnWriteReady()"); - return false; - } - void Page(std::stringstream* n, int response, HTTPHeaders *hheaders) { SendHeaders(n->str().length(), response, *hheaders); this->Write(n->str()); - this->FlushWriteBuffer(); - SetWrite(); - } - - void SetWrite() - { - Instance->Logs->Log("m_httpd",DEBUG,"SetWrite()"); - this->WaitingForWriteEvent = true; - Instance->SE->WantWrite(this); } }; |