]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/extra/m_ssl_gnutls.cpp
Remove calls to deprecated InspIRCd::Log(), thanks danieldg for reporting.
[user/henk/code/inspircd.git] / src / modules / extra / m_ssl_gnutls.cpp
index 3f9c4ac5d3258db8bc467d0d9813191339879000..27456959a90cb173959ace1ce21f674ad3031fed 100644 (file)
@@ -28,8 +28,6 @@
 
 #ifdef WINDOWS
 #pragma comment(lib, "libgnutls-13.lib")
-#undef MAX_DESCRIPTORS
-#define MAX_DESCRIPTORS 10000
 #endif
 
 /* $ModDesc: Provides SSL support for clients */
@@ -94,7 +92,7 @@ class ModuleSSLGnuTLS : public Module
        std::vector<std::string> listenports;
 
        int inbufsize;
-       issl_session sessions[MAX_DESCRIPTORS];
+       issl_session* sessions;
 
        gnutls_certificate_credentials x509_cred;
        gnutls_dh_params dh_params;
@@ -117,6 +115,8 @@ class ModuleSSLGnuTLS : public Module
        {
                ServerInstance->Modules->PublishInterface("BufferedSocketHook", this);
 
+               sessions = new issl_session[ServerInstance->SE->GetMaxFds()];
+
                // Not rehashable...because I cba to reduce all the sizes of existing buffers.
                inbufsize = ServerInstance->Config->NetBufferSize;
 
@@ -270,6 +270,8 @@ class ModuleSSLGnuTLS : public Module
                gnutls_dh_params_deinit(dh_params);
                gnutls_certificate_free_credentials(x509_cred);
                gnutls_global_deinit();
+               ServerInstance->Modules->UnpublishInterface("BufferedSocketHook", this);
+               delete[] sessions;
        }
 
        virtual void OnCleanup(int target_type, void* item)
@@ -383,7 +385,7 @@ class ModuleSSLGnuTLS : public Module
        virtual void OnRawSocketAccept(int fd, const std::string &ip, int localport)
        {
                /* Are there any possibilities of an out of range fd? Hope not, but lets be paranoid */
-               if ((fd < 0) || (fd > MAX_DESCRIPTORS))
+               if ((fd < 0) || (fd > ServerInstance->SE->GetMaxFds() - 1))
                        return;
 
                issl_session* session = &sessions[fd];
@@ -416,7 +418,7 @@ class ModuleSSLGnuTLS : public Module
        virtual void OnRawSocketConnect(int fd)
        {
                /* Are there any possibilities of an out of range fd? Hope not, but lets be paranoid */
-               if ((fd < 0) || (fd > MAX_DESCRIPTORS))
+               if ((fd < 0) || (fd > ServerInstance->SE->GetMaxFds() - 1))
                        return;
 
                issl_session* session = &sessions[fd];
@@ -438,7 +440,7 @@ class ModuleSSLGnuTLS : public Module
        virtual void OnRawSocketClose(int fd)
        {
                /* Are there any possibilities of an out of range fd? Hope not, but lets be paranoid */
-               if ((fd < 0) || (fd > MAX_DESCRIPTORS))
+               if ((fd < 0) || (fd > ServerInstance->SE->GetMaxFds()))
                        return;
 
                CloseSession(&sessions[fd]);
@@ -457,7 +459,7 @@ class ModuleSSLGnuTLS : public Module
        virtual int OnRawSocketRead(int fd, char* buffer, unsigned int count, int &readresult)
        {
                /* Are there any possibilities of an out of range fd? Hope not, but lets be paranoid */
-               if ((fd < 0) || (fd > MAX_DESCRIPTORS))
+               if ((fd < 0) || (fd > ServerInstance->SE->GetMaxFds() - 1))
                        return 0;
 
                issl_session* session = &sessions[fd];
@@ -552,7 +554,7 @@ class ModuleSSLGnuTLS : public Module
        virtual int OnRawSocketWrite(int fd, const char* buffer, int count)
        {
                /* Are there any possibilities of an out of range fd? Hope not, but lets be paranoid */
-               if ((fd < 0) || (fd > MAX_DESCRIPTORS))
+               if ((fd < 0) || (fd > ServerInstance->SE->GetMaxFds() - 1))
                        return 0;
 
                issl_session* session = &sessions[fd];
@@ -712,14 +714,7 @@ class ModuleSSLGnuTLS : public Module
                if ((user->GetExt("ssl", dummy)) && (IS_LOCAL(user)))
                {
                        // Tell whatever protocol module we're using that we need to inform other servers of this metadata NOW.
-                       std::deque<std::string>* metadata = new std::deque<std::string>;
-                       metadata->push_back(user->uuid);
-                       metadata->push_back("ssl");             // The metadata id
-                       metadata->push_back("ON");              // The value to send
-                       Event* event = new Event((char*)metadata,(Module*)this,"send_metadata");
-                       event->Send(ServerInstance);            // Trigger the event. We don't care what module picks it up.
-                       delete event;
-                       delete metadata;
+                       ServerInstance->PI->SendMetaData(user, TYPE_USER, "SSL", "on");
 
                        VerifyCertificate(&sessions[user->GetFd()],user);
                        if (sessions[user->GetFd()].sess)