00001 // $Id: SSL_CertificateCallback.h 91118 2010-07-17 10:29:57Z mcorino $ 00002 00003 /** 00004 * @file SSL_CertificateCallback.h 00005 * 00006 * @author Martin Corino <mcorino@remedy.nl> 00007 */ 00008 00009 #ifndef ACE_SSL_CERTIFICATECALLBACK_H 00010 #define ACE_SSL_CERTIFICATECALLBACK_H 00011 00012 #include /**/ "ace/pre.h" 00013 00014 #include "ace/SString.h" 00015 #include "ace/SSL/SSL_Context.h" 00016 #include "ace/INet/SSL_X509Cert.h" 00017 00018 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00019 00020 namespace ACE 00021 { 00022 namespace INet 00023 { 00024 /** 00025 * @class ACE_INet_SSL_CertificateCallbackArg 00026 * 00027 * @brief Encapsulates the arguments for an SSL certificate 00028 * verification callback. 00029 * 00030 */ 00031 class ACE_INET_Export SSL_CertificateCallbackArg 00032 { 00033 public: 00034 SSL_CertificateCallbackArg (const ACE_SSL_Context* ssl_ctx, 00035 ::X509_STORE_CTX* cert_ctx); 00036 ~SSL_CertificateCallbackArg (); 00037 00038 const ACE_SSL_Context& context () const; 00039 00040 SSL_X509Cert& certificate (void); 00041 00042 int error_depth () const; 00043 00044 int error_code () const; 00045 00046 ACE_CString error_message () const; 00047 00048 bool ignore_error () const; 00049 00050 void ignore_error (bool f); 00051 00052 private: 00053 const ACE_SSL_Context* ssl_ctx_; 00054 SSL_X509Cert ssl_cert_; 00055 int err_depth_; 00056 int err_code_; 00057 bool ignore_err_; 00058 }; 00059 00060 /** 00061 * @class ACE_INet_SSL_CertificateCallback 00062 * 00063 * @brief Abstract base class for SSL certificate 00064 * verification callbacks. 00065 * 00066 */ 00067 class ACE_INET_Export SSL_CertificateCallback 00068 { 00069 public: 00070 SSL_CertificateCallback (); 00071 virtual ~SSL_CertificateCallback (); 00072 00073 virtual void handle_certificate_failure (SSL_CertificateCallbackArg& arg) = 0; 00074 }; 00075 00076 /** 00077 * @class ACE_INet_SSL_CertificateAcceptor 00078 * 00079 * @brief Implements an SSL certificate callback that accepts 00080 * all peer certificates. 00081 * 00082 */ 00083 class ACE_INET_Export SSL_CertificateAcceptor 00084 : public SSL_CertificateCallback 00085 { 00086 public: 00087 SSL_CertificateAcceptor (); 00088 virtual ~SSL_CertificateAcceptor (); 00089 00090 virtual void handle_certificate_failure (SSL_CertificateCallbackArg& arg); 00091 }; 00092 } 00093 } 00094 00095 ACE_END_VERSIONED_NAMESPACE_DECL 00096 00097 #if defined (__ACE_INLINE__) 00098 #include "ace/INet/SSL_CertificateCallback.inl" 00099 #endif 00100 00101 #include /**/ "ace/post.h" 00102 #endif /* ACE_SSL_CERTIFICATECALLBACK_H */