00001 // $Id: SSL_CallbackManager.h 91134 2010-07-20 07:56:15Z mcorino $ 00002 00003 /** 00004 * @file SSL_CallbackManager.h 00005 * 00006 * @author Martin Corino <mcorino@remedy.nl> 00007 */ 00008 00009 #ifndef ACE_SSL_CALLBACKMANAGER_H 00010 #define ACE_SSL_CALLBACKMANAGER_H 00011 00012 #include /**/ "ace/pre.h" 00013 00014 #include "ace/SString.h" 00015 #include "ace/Refcounted_Auto_Ptr.h" 00016 #include "ace/SSL/SSL_Context.h" 00017 #include "ace/INet/SSL_CertificateCallback.h" 00018 #include "ace/INet/SSL_PasswordCallback.h" 00019 00020 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00021 00022 namespace ACE 00023 { 00024 namespace INet 00025 { 00026 /** 00027 * @class ACE_INet_SSL_CallbackManager 00028 * 00029 * @brief Implements manager class for configuring and handling 00030 * SSL callbacks. 00031 * 00032 */ 00033 class ACE_INET_Export SSL_CallbackManager 00034 { 00035 public: 00036 SSL_CallbackManager (); 00037 ~SSL_CallbackManager (); 00038 00039 void initialize_callbacks (ACE_SSL_Context* ssl_ctx = ACE_SSL_Context::instance ()); 00040 00041 const ACE_SSL_Context* context () const; 00042 00043 void set_certificate_callback (ACE::INet::SSL_CertificateCallback* cb); 00044 void set_password_callback (ACE::INet::SSL_PasswordCallback* cb); 00045 00046 static SSL_CallbackManager* instance (); 00047 00048 private: 00049 int verify_certificate_callback (SSL_CertificateCallbackArg& arg); 00050 void passwd_callback (ACE_CString& pwd); 00051 00052 ACE_SSL_Context* ssl_ctx_; 00053 00054 typedef ACE_Refcounted_Auto_Ptr<ACE::INet::SSL_CertificateCallback, 00055 ACE_SYNCH::MUTEX> TCertificateCallback; 00056 typedef ACE_Refcounted_Auto_Ptr<ACE::INet::SSL_PasswordCallback, 00057 ACE_SYNCH::MUTEX> TPasswordCallback; 00058 00059 TCertificateCallback cert_callback_; 00060 TPasswordCallback passwd_callback_; 00061 00062 static int verify_certificate_callback (int ok, X509_STORE_CTX* cert_ctx); 00063 static int passwd_callback (char* buf, int size, int rwflag, void* user_data); 00064 00065 static int ssl_ctx_mngr_index_; 00066 }; 00067 00068 } 00069 } 00070 00071 ACE_END_VERSIONED_NAMESPACE_DECL 00072 00073 #if defined (__ACE_INLINE__) 00074 #include "ace/INet/SSL_CallbackManager.inl" 00075 #endif 00076 00077 #include /**/ "ace/post.h" 00078 #endif /* ACE_SSL_CALLBACKMANAGER_H */