diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-09-12 12:08:25 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-09-12 12:08:25 +0000 |
commit | 425fe205d0c22c3de0af6471f7c8900b70c69133 (patch) | |
tree | 5815b4854b2f79d42178aba1d88593b787dd23d6 | |
parent | e462e71f1086761c8758a92e75dee80bb1ccd273 (diff) |
Cleanup of some internals. Tested via m_httpd.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10527 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/inspsocket.h | 12 | ||||
-rw-r--r-- | src/inspsocket.cpp | 82 |
2 files changed, 33 insertions, 61 deletions
diff --git a/include/inspsocket.h b/include/inspsocket.h index b8f64d762..9ce7315c6 100644 --- a/include/inspsocket.h +++ b/include/inspsocket.h @@ -311,15 +311,9 @@ class CoreExport BufferedSocket : public EventHandler */ BufferedSocketState GetState(); - /** - * Only the core should call this function. - * When called, it is assumed the socket is ready - * to read data, and the method call routes the - * event to the various methods of BufferedSocket - * for you to handle. This can also cause the - * socket's state to change. - */ - bool Poll(); + /** Mark a socket as being connected and call appropriate events. + */ + bool InternalMarkConnected(); /** * This method causes the socket to close, and may diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp index 98ac892a0..6407b213f 100644 --- a/src/inspsocket.cpp +++ b/src/inspsocket.cpp @@ -512,54 +512,27 @@ void SocketTimeout::Tick(time_t) this->sock->Timeout = NULL; } -bool BufferedSocket::Poll() +bool BufferedSocket::InternalMarkConnected() { -#ifndef WINDOWS - if (!Instance->SE->BoundsCheckFd(this)) - return false; -#endif - - if (Instance->SE->GetRef(this->fd) != this) - return false; + /* Our socket was in write-state, so delete it and re-add it + * in read-state. + */ + this->SetState(I_CONNECTED); - switch (this->state) + if (this->GetIOHook()) { - case I_CONNECTING: - /* Our socket was in write-state, so delete it and re-add it - * in read-state. - */ -#ifndef WINDOWS - if (this->fd > -1) - { - this->Instance->SE->DelFd(this); - if (!this->Instance->SE->AddFd(this)) - return false; - } -#endif - this->SetState(I_CONNECTED); - - if (this->GetIOHook()) - { - Instance->Logs->Log("SOCKET",DEBUG,"Hook for raw connect"); - try - { - this->GetIOHook()->OnRawSocketConnect(this->fd); - } - catch (CoreException& modexcept) - { - Instance->Logs->Log("SOCKET",DEBUG,"%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason()); - } - } - return this->OnConnected(); - break; - case I_CONNECTED: - /* Process the read event */ - return this->OnDataReady(); - break; - default: - break; + Instance->Logs->Log("SOCKET",DEBUG,"Hook for raw connect"); + try + { + this->GetIOHook()->OnRawSocketConnect(this->fd); + } + catch (CoreException& modexcept) + { + Instance->Logs->Log("SOCKET",DEBUG,"%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason()); + return false; + } } - return true; + return this->OnConnected(); } void BufferedSocket::SetState(BufferedSocketState s) @@ -599,6 +572,7 @@ void BufferedSocket::HandleEvent(EventType et, int errornum) switch (et) { case EVENT_ERROR: + { switch (errornum) { case ETIMEDOUT: @@ -621,24 +595,27 @@ void BufferedSocket::HandleEvent(EventType et, int errornum) this->Instance->SocketCull[this] = this; return; break; + } case EVENT_READ: - if (!this->Poll()) + { + if (!this->OnDataReady()) { if (this->Instance->SocketCull.find(this) == this->Instance->SocketCull.end()) this->Instance->SocketCull[this] = this; return; } break; + } case EVENT_WRITE: + { if (this->state == I_CONNECTING) { - /* This might look wrong as if we should be actually calling - * with EVENT_WRITE, but trust me it is correct. There are some - * writeability-state things in the read code, because of how - * BufferedSocket used to work regarding write buffering in previous - * versions of InspIRCd. - Brain - */ - this->HandleEvent(EVENT_READ); + if (!this->InternalMarkConnected()) + { + if (this->Instance->SocketCull.find(this) == this->Instance->SocketCull.end()) + this->Instance->SocketCull[this] = this; + return; + } return; } else @@ -651,6 +628,7 @@ void BufferedSocket::HandleEvent(EventType et, int errornum) } } break; + } } } |