diff options
| author | 2007-08-05 16:35:43 +0000 | |
|---|---|---|
| committer | 2007-08-05 16:35:43 +0000 | |
| commit | 49e184edd2b4b07943fc4a5a53d11a5fdbccea47 (patch) | |
| tree | f96ca6b3b44f59e36a26609066476f09e5cd8427 /src/modules | |
| parent | Merge 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.cpp | 15 |
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) |
