aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar peavey2007-08-05 16:35:43 +0000
committerGravatar peavey2007-08-05 16:35:43 +0000
commit49e184edd2b4b07943fc4a5a53d11a5fdbccea47 (patch)
treef96ca6b3b44f59e36a26609066476f09e5cd8427 /src/modules
parentMerge buffering and notification fixes from trunk. Lessons learned from chats... (diff)
Merge flushbuffer openssl fix from trunk manually (without debug), and set svnmerge props for merge -r7661-7663 also by hand.
git-svn-id: http://svn.inspircd.org/repository/branches/1_1_stable@7664 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/extra/m_ssl_openssl.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp
index ebe3844de..5c70db44b 100644
--- a/src/modules/extra/m_ssl_openssl.cpp
+++ b/src/modules/extra/m_ssl_openssl.cpp
@@ -346,7 +346,7 @@ class ModuleSSLOpenSSL : public Module
void Implements(char* List)
{
List[I_OnRawSocketConnect] = List[I_OnRawSocketAccept] = List[I_OnRawSocketClose] = List[I_OnRawSocketRead] = List[I_OnRawSocketWrite] = List[I_OnCleanup] = List[I_On005Numeric] = 1;
- List[I_OnRequest] = List[I_OnSyncUserMetaData] = List[I_OnDecodeMetaData] = List[I_OnUnloadModule] = List[I_OnRehash] = List[I_OnWhois] = List[I_OnPostConnect] = 1;
+ List[I_OnBufferFlushed] = List[I_OnRequest] = List[I_OnSyncUserMetaData] = List[I_OnDecodeMetaData] = List[I_OnUnloadModule] = List[I_OnRehash] = List[I_OnWhois] = List[I_OnPostConnect] = 1;
}
virtual char* OnRequest(Request* request)
@@ -545,6 +545,7 @@ class ModuleSSLOpenSSL : public Module
}
session->outbuf.append(buffer, count);
+ MakePollWrite(session);
if (session->status == ISSL_HANDSHAKING)
{
@@ -590,7 +591,6 @@ class ModuleSSLOpenSSL : public Module
if (err == SSL_ERROR_WANT_WRITE)
{
session->wstat = ISSL_WRITE;
- MakePollWrite(session);
return -1;
}
else if (err == SSL_ERROR_WANT_READ)
@@ -794,6 +794,17 @@ class ModuleSSLOpenSSL : public Module
ServerInstance->SE->WantWrite(eh);
}
+ virtual void OnBufferFlushed(userrec* user)
+ {
+ if (user->GetExt("ssl"))
+ {
+ ServerInstance->Log(DEBUG,"OnBufferFlushed for ssl user");
+ issl_session* session = &sessions[user->GetFd()];
+ if (session && session->outbuf.size())
+ OnRawSocketWrite(user->GetFd(), NULL, 0);
+ }
+ }
+
void CloseSession(issl_session* session)
{
if (session->sess)