pssl.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:3k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * pssl.h
  3.  *
  4.  * Secure Sockets Layer channel interface class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: pssl.h,v $
  30.  * Revision 1.7  2000/01/10 02:23:18  craigs
  31.  * Update for new OpenSSL
  32.  *
  33.  * Revision 1.6  1999/02/16 08:07:10  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.5  1998/12/04 13:01:51  craigs
  37.  * Changed for SSLeay 0.9
  38.  *
  39.  * Revision 1.4  1998/09/23 06:19:50  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.3  1997/05/04 02:49:52  craigs
  43.  * Added support for client and server certificates
  44.  *
  45.  * Revision 1.1  1996/11/15 07:37:48  craigs
  46.  * Initial revision
  47.  *
  48.  */
  49. #ifndef _PHTTPS
  50. #define _PHTTPS
  51. #ifdef __GNUC__
  52. #pragma interface
  53. #endif
  54. #include <ptlib/sockets.h>
  55. extern "C" {
  56. #include <openssl/ssl.h>
  57. #include <openssl/crypto.h>
  58. };
  59. class PSSLChannel : public PIndirectChannel
  60. {
  61.   PCLASSINFO(PSSLChannel, PIndirectChannel)
  62.   public:
  63.     enum {
  64.       CertificateOK,
  65.       UnknownCertificate,
  66.       UnknownPrivateKey,
  67.       PrivateKeyMismatch,
  68.     };
  69.     enum {
  70.       VerifyNone,
  71.       VerifyPeer,
  72.       VerifyPeerMandatory,
  73.     };
  74.     PSSLChannel();
  75.     ~PSSLChannel();
  76.     static BOOL SetCAPath(const PDirectory & caPath);
  77.     static BOOL SetCAFile(const PFilePath & caFile);
  78.     static BOOL SetCAPathAndFile(const PDirectory & caPath, const PFilePath & caFile);
  79.     void SetVerifyMode(int mode);
  80.     int SetClientCertificate(const PString & certFile);
  81.     int SetClientCertificate(const PString & certFile, const PString & keyFile);
  82.     // Normal socket read & write functions
  83.     BOOL   Read(void * buf, PINDEX len);
  84.     BOOL   Write(const void * buf, PINDEX len);
  85.     BOOL   RawRead(void * buf, PINDEX len);
  86.     PINDEX RawGetLastReadCount() const;
  87.     BOOL   RawWrite(const void * buf, PINDEX len);
  88.     PINDEX RawGetLastWriteCount() const;
  89.     BOOL Accept(PChannel & channel);
  90.     BOOL Connect(PChannel & channel);
  91.     BOOL Shutdown(ShutdownValue) { return TRUE; }
  92.   protected:
  93.     int  Set_SSL_Fd();
  94.     int  SetClientCertificate(const char * certFile, const char * keyFile);
  95.     static BOOL SetCAPathAndFile(const char * caPath, const char * caFile);
  96.     static void Cleanup();
  97.     SSL * ssl;
  98.     static SSL_CTX * context;
  99.     static PMutex semaphores[CRYPTO_NUM_LOCKS];
  100.     static PMutex initFlag;
  101. };
  102. #endif