OpenSSLMfc.h
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:4k
源码类别:

CA认证

开发平台:

Visual C++

  1. /*
  2. Module : OpenSSLMfc.H
  3. Purpose: Defines the interface for wrapper classes for the OpenSSL C variable types
  4. Created: PJN / 24-05-2002
  5. History: None
  6. Copyright (c) 2002 - 2005 by PJ Naughter.  
  7. All rights reserved.
  8. Copyright / Usage Details:
  9. You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) 
  10. when your product is released in binary form. You are allowed to modify the source code in any way you want 
  11. except you cannot modify the copyright details at the top of each module. If you want to distribute source 
  12. code with your application, then you are only allowed to distribute versions released by the author. This is 
  13. to maintain a single distribution point for the source code. 
  14. */
  15. /////////////////////////////// Defines ///////////////////////////////////////
  16. #ifndef __OPENSSLMFC_H__
  17. #define __OPENSSLMFC_H__
  18. #ifndef SOCKMFC_EXT_CLASS
  19. #define SOCKMFC_EXT_CLASS
  20. #endif
  21. /////////////////////////////// Includes //////////////////////////////////////
  22. #include <opensslssl.h>
  23. #include <opensslerr.h>
  24. #include "SocMFC.h"
  25. /////////////////////////////// Classes ///////////////////////////////////////
  26. //class which encapsulates the OpenSSL SSL_CTX* variable
  27. class SOCKMFC_EXT_CLASS CSSLContext 
  28. {
  29. public:
  30. //Constructors / Destructors
  31.   CSSLContext();
  32.   CSSLContext(SSL_CTX* pSSLContext);
  33.   CSSLContext(const CSSLContext& SSLContext);
  34.   ~CSSLContext();
  35. //Methods
  36.   void Close();
  37.   void Attach(SSL_CTX* pSSLContext);
  38.   SSL_CTX* Detach();
  39. //operators
  40.   operator SSL_CTX*() const;
  41.   CSSLContext& operator=(const CSSLContext& SSLContext);
  42. //Data
  43.   SSL_CTX* m_pSSLContext; //The underlying OpenSSL context variable
  44. };
  45. //class which encapsulates the OpenSSL SSL* variable
  46. class SOCKMFC_EXT_CLASS CSSL 
  47. {
  48. public:
  49. //Constructors / Destructors
  50.   CSSL();
  51.   CSSL(SSL* pSSLContext);
  52.   CSSL(const CSSL& ssl);
  53.   ~CSSL();
  54. //Methods
  55.   void Close();
  56.   void Attach(SSL* pSSL);
  57.   SSL* Detach();
  58. //operators
  59.   operator SSL*() const;
  60.   CSSL& operator=(const CSSL& ssl);
  61. //Data
  62.   SSL* m_pSSL; //The underlying OpenSSL "SSL" variable
  63. };
  64. //Class which encapsulates a SSL socket, in OpenSSL parlance, this is an SSL* struct (aka CSSL) doing file IO over a socket (aka CWSocket)
  65. class SOCKMFC_EXT_CLASS CSSLSocket
  66. {
  67. public:
  68. //Constructors / Destructors
  69.   CSSLSocket();
  70.   virtual ~CSSLSocket();
  71. //General Methods
  72.   BOOL    Create(CSSLContext& sslContext, CWSocket& socket);
  73.   BOOL    Connect(LPCTSTR lpszHostAddress, UINT nHostPort);
  74.   BOOL    ConnectViaSocks4(LPCTSTR lpszHostAddress, UINT nHostPort, LPCTSTR lpszSocksServer, UINT nSocksPort, DWORD dwConnectionTimeout = 5000);
  75.   BOOL    ConnectViaSocks5(LPCTSTR lpszHostAddress, UINT nHostPort, LPCTSTR lpszSocksServer, UINT nSocksPort, LPCTSTR lpszUserName = NULL, LPCTSTR lpszPassword = NULL, DWORD dwConnectionTimeout = 5000, BOOL bUDP = FALSE);
  76.   BOOL    ConnectViaHTTPProxy(LPCTSTR lpszHostAddress, UINT nHostPort, LPCTSTR lpszHTTPServer, UINT nHTTPProxyPort, CString& sProxyResponse, LPCTSTR lpszUserName = NULL, LPCTSTR pszPassword = NULL, DWORD dwConnectionTimeout = 5000, LPCTSTR lpszUserAgent = NULL);
  77.   BOOL    Accept(DWORD dwSSLNegotiationTimeout);
  78.   void    Close();
  79.   int     Send(void* pBuffer, int nBuf);
  80.   int     Receive(void* pBuffer, int nBuf);
  81.   BOOL    IsReadible(DWORD dwTimeout);
  82. //operators
  83.   operator SSL*() const;
  84.   operator CWSocket&() const;
  85. protected:
  86.   CSSL      m_SSL;
  87.   CWSocket* m_pSocket;
  88. };
  89. #endif //__OPENSSLMFC_H__