* Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2019 B00mX0r <b00mx0r@aureus.pw>
* Copyright (C) 2018 Dylan Frank <b00mx0r@aureus.pw>
- * Copyright (C) 2013, 2017-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2019, 2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2015-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
}
};
+/** I/O hook provider for SSL modules. */
+class SSLIOHookProvider : public IOHookProvider
+{
+public:
+ SSLIOHookProvider(Module* mod, const std::string& Name)
+ : IOHookProvider(mod, "ssl/" + Name, IOH_SSL)
+ {
+ }
+};
+
class SSLIOHook : public IOHook
{
protected:
public:
static SSLIOHook* IsSSL(StreamSocket* sock)
{
- IOHook* const iohook = sock->GetIOHook();
- if ((iohook) && ((iohook->prov->type == IOHookProvider::IOH_SSL)))
- return static_cast<SSLIOHook*>(iohook);
+ IOHook* const lasthook = sock->GetLastHook();
+ if (lasthook && (lasthook->prov->type == IOHookProvider::IOH_SSL))
+ return static_cast<SSLIOHook*>(lasthook);
+
return NULL;
}
class SSLClientCert
{
public:
- /**
+ /**
* Get the client certificate from a socket
* @param sock The socket to get the certificate from, the socket does not have to use TLS (SSL)
* @return The TLS (SSL) client certificate information, NULL if the peer is not using TLS (SSL)
class UserCertificateAPIBase : public DataProvider
{
public:
- UserCertificateAPIBase(Module* parent)
+ UserCertificateAPIBase(Module* parent)
: DataProvider(parent, "m_sslinfo_api")
{
}