X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Ftransport.h;h=ceb16cb731fa4fee090e107484292375dbc96070;hb=7107ec12d8640d35cfe3d5002db1bc1deb33625d;hp=4d303502e7d5ba5e849a579c5970248a14f2b6ad;hpb=c015aa4c0e1cfc031109c18af497cca9a72c844c;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/transport.h b/src/modules/transport.h index 4d303502e..ceb16cb73 100644 --- a/src/modules/transport.h +++ b/src/modules/transport.h @@ -1,54 +1,45 @@ -#ifndef __SSL_CERT_H__ -#define __SSL_CERT_H__ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits + * + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#ifndef __TRANSPORT_H__ +#define __TRANSPORT_H__ #include #include -/** A generic container for certificate data - */ -typedef std::map ssl_data; - -/** A shorthand way of representing an iterator into ssl_data - */ -typedef ssl_data::iterator ssl_data_iter; - /** ssl_cert is a class which abstracts SSL certificate * and key information. * * Because gnutls and openssl represent key information in * wildly different ways, this class allows it to be accessed * in a unified manner. These classes are attached to ssl- - * connected local users using Extensible::Extend() and the - * key 'ssl_cert'. + * connected local users using SSLCertExt */ class ssl_cert { - /** Always contains an empty string - */ - const std::string empty; - public: - /** The data for this certificate - */ - ssl_data data; + std::string dn; + std::string issuer; + std::string error; + std::string fingerprint; + bool trusted, invalid, unknownsigner, revoked; - /** Default constructor, initializes 'empty' - */ - ssl_cert() : empty("") - { - } - /** Get certificate distinguished name * @return Certificate DN */ const std::string& GetDN() { - ssl_data_iter ssldi = data.find("dn"); - - if (ssldi != data.end()) - return ssldi->second; - else - return empty; + return dn; } /** Get Certificate issuer @@ -56,12 +47,7 @@ class ssl_cert */ const std::string& GetIssuer() { - ssl_data_iter ssldi = data.find("issuer"); - - if (ssldi != data.end()) - return ssldi->second; - else - return empty; + return issuer; } /** Get error string if an error has occured @@ -70,12 +56,7 @@ class ssl_cert */ const std::string& GetError() { - ssl_data_iter ssldi = data.find("error"); - - if (ssldi != data.end()) - return ssldi->second; - else - return empty; + return error; } /** Get key fingerprint. @@ -83,12 +64,7 @@ class ssl_cert */ const std::string& GetFingerprint() { - ssl_data_iter ssldi = data.find("fingerprint"); - - if (ssldi != data.end()) - return ssldi->second; - else - return empty; + return fingerprint; } /** Get trust status @@ -97,12 +73,7 @@ class ssl_cert */ bool IsTrusted() { - ssl_data_iter ssldi = data.find("trusted"); - - if (ssldi != data.end()) - return (ssldi->second == "1"); - else - return false; + return trusted; } /** Get validity status @@ -111,12 +82,7 @@ class ssl_cert */ bool IsInvalid() { - ssl_data_iter ssldi = data.find("invalid"); - - if (ssldi != data.end()) - return (ssldi->second == "1"); - else - return false; + return invalid; } /** Get signer status @@ -125,12 +91,7 @@ class ssl_cert */ bool IsUnknownSigner() { - ssl_data_iter ssldi = data.find("unknownsigner"); - - if (ssldi != data.end()) - return (ssldi->second == "1"); - else - return false; + return unknownsigner; } /** Get revokation status. @@ -140,69 +101,106 @@ class ssl_cert */ bool IsRevoked() { - ssl_data_iter ssldi = data.find("revoked"); + return revoked; + } - if (ssldi != data.end()) - return (ssldi->second == "1"); + std::string GetMetaLine() + { + std::stringstream value; + bool hasError = error.length(); + value << (IsInvalid() ? "v" : "V") << (IsTrusted() ? "T" : "t") << (IsRevoked() ? "R" : "r") + << (IsUnknownSigner() ? "s" : "S") << (hasError ? "E" : "e") << " "; + if (hasError) + value << GetError(); else - return false; + value << GetFingerprint() << " " << GetDN() << " " << GetIssuer(); + return value.str(); } }; +/** Used to represent a request to a transport provider module + */ class ISHRequest : public Request { public: - InspSocket* Sock; + BufferedSocket* Sock; - ISHRequest(Module* Me, Module* Target, const char* rtype, InspSocket* sock) : Request(Me, Target, rtype), Sock(sock) + ISHRequest(Module* Me, Module* Target, const char* rtype, BufferedSocket* sock) : Request(Me, Target, rtype), Sock(sock) { } }; -class InspSocketAttachCertRequest : public ISHRequest +/** Used to represent a request to attach a cert to an BufferedSocket + */ +class BufferedSocketAttachCertRequest : public ISHRequest { public: /** Initialize the request as an attach cert message */ - InspSocketAttachCertRequest(InspSocket* is, Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_ATTACH", is) + BufferedSocketAttachCertRequest(BufferedSocket* is, Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_ATTACH", is) { } }; -class InspSocketHSCompleteRequest : public ISHRequest +/** Used to check if a handshake is complete on an BufferedSocket yet + */ +class BufferedSocketHSCompleteRequest : public ISHRequest { public: /** Initialize the request as a 'handshake complete?' message */ - InspSocketHSCompleteRequest(InspSocket* is, Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_HSDONE", is) + BufferedSocketHSCompleteRequest(BufferedSocket* is, Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_HSDONE", is) { } }; -class InspSocketHookRequest : public ISHRequest +/** Used to hook a transport provider to an BufferedSocket + */ +class BufferedSocketHookRequest : public ISHRequest { public: /** Initialize request as a hook message */ - InspSocketHookRequest(InspSocket* is, Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_HOOK", is) + BufferedSocketHookRequest(BufferedSocket* is, Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_HOOK", is) { } }; -class InspSocketUnhookRequest : public ISHRequest +/** Used to unhook a transport provider from an BufferedSocket + */ +class BufferedSocketUnhookRequest : public ISHRequest { public: /** Initialize request as an unhook message */ - InspSocketUnhookRequest(InspSocket* is, Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_UNHOOK", is) + BufferedSocketUnhookRequest(BufferedSocket* is, Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_UNHOOK", is) { } }; -class InspSocketNameRequest : public ISHRequest +class BufferedSocketNameRequest : public ISHRequest { public: /** Initialize request as a get name message */ - InspSocketNameRequest(Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_NAME", NULL) + BufferedSocketNameRequest(Module* Me, Module* Target) : ISHRequest(Me, Target, "IS_NAME", NULL) { } }; -#endif +struct BufferedSocketCertificateRequest : public Request +{ + Extensible* const item; + ssl_cert* cert; + BufferedSocketCertificateRequest(Extensible* is, Module* Me, Module* Target) + : Request(Me, Target, "GET_CERT"), item(is), cert(NULL) + { + } +}; +struct BufferedSocketFingerprintSubmission : public Request +{ + Extensible* const item; + ssl_cert* const cert; + BufferedSocketFingerprintSubmission(Extensible* is, Module* Me, Module* Target, ssl_cert* Cert) + : Request(Me, Target, "SET_CERT"), item(is), cert(Cert) + { + } +}; + +#endif