]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/ssl.h
Delete modewatchers when unloading modules that use them to keep the server from...
[user/henk/code/inspircd.git] / src / modules / ssl.h
index 68f1910ff628329e71ec3f76c5caf5ff64792e92..a01d91430e84ef5d296c9d3741cc32f7c32e40e6 100644 (file)
@@ -25,7 +25,7 @@
  * in a unified manner. These classes are attached to ssl-
  * connected local users using SSLCertExt
  */
-class ssl_cert
+class ssl_cert : public refcountbase
 {
  public:
        std::string dn;
@@ -118,13 +118,34 @@ class ssl_cert
        }
 };
 
-struct SSLCertificateRequest : public Request
+/** Get certificate from a socket (only useful with an SSL module) */
+struct SocketCertificateRequest : public Request
 {
-       Extensible* const item;
+       StreamSocket* const sock;
+       ssl_cert* cert;
+
+       SocketCertificateRequest(StreamSocket* ss, Module* Me, Module* hook)
+               : Request(Me, hook, "GET_SSL_CERT"), sock(ss), cert(NULL)
+       {
+               Send();
+       }
+
+       std::string GetFingerprint()
+       {
+               if (cert)
+                       return cert->GetFingerprint();
+               return "";
+       }
+};
+
+/** Get certificate from a user (requires m_sslinfo) */
+struct UserCertificateRequest : public Request
+{
+       User* const user;
        ssl_cert* cert;
 
-       SSLCertificateRequest(Extensible* e, Module* Me, Module* info = ServerInstance->Modules->Find("m_sslinfo.so"))
-               : Request(Me, info, "GET_CERT"), item(e), cert(NULL)
+       UserCertificateRequest(User* u, Module* Me, Module* info = ServerInstance->Modules->Find("m_sslinfo.so"))
+               : Request(Me, info, "GET_USER_CERT"), user(u), cert(NULL)
        {
                Send();
        }