]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/extra/m_ssl_openssl.cpp
Create SSLIOHook interface that provides GetCertificate()
[user/henk/code/inspircd.git] / src / modules / extra / m_ssl_openssl.cpp
index 0c7362e6e09fd268d1748929aba9af0b30530d52..53c0ab8750b4102d57f0b14b4e09d85637bbd6b1 100644 (file)
@@ -101,7 +101,7 @@ static int OnVerify(int preverify_ok, X509_STORE_CTX *ctx)
        return 1;
 }
 
-class OpenSSLIOHook : public IOHook
+class OpenSSLIOHook : public SSLIOHook
 {
  private:
        bool Handshake(StreamSocket* user, issl_session* session)
@@ -229,7 +229,7 @@ class OpenSSLIOHook : public IOHook
        bool use_sha;
 
        OpenSSLIOHook(Module* mod)
-               : IOHook(mod, "ssl/openssl")
+               : SSLIOHook(mod, "ssl/openssl")
        {
                sessions = new issl_session[ServerInstance->SE->GetMaxFds()];
        }
@@ -440,6 +440,13 @@ class OpenSSLIOHook : public IOHook
                return 0;
        }
 
+       ssl_cert* GetCertificate(StreamSocket* sock) CXX11_OVERRIDE
+       {
+               int fd = sock->GetFd();
+               issl_session* session = &sessions[fd];
+               return session->cert;
+       }
+
        void TellCiphersAndFingerprint(LocalUser* user)
        {
                issl_session& s = sessions[user->eh.GetFd()];
@@ -653,18 +660,6 @@ class ModuleSSLOpenSSL : public Module
        {
                return Version("Provides SSL support for clients", VF_VENDOR);
        }
-
-       void OnRequest(Request& request) CXX11_OVERRIDE
-       {
-               if (strcmp("GET_SSL_CERT", request.id) == 0)
-               {
-                       SocketCertificateRequest& req = static_cast<SocketCertificateRequest&>(request);
-                       int fd = req.sock->GetFd();
-                       issl_session* session = &iohook.sessions[fd];
-
-                       req.cert = session->cert;
-               }
-       }
 };
 
 static int error_callback(const char *str, size_t len, void *u)