sslconn.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:6k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /*
  3.  * The contents of this file are subject to the Mozilla Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/MPL/
  7.  * 
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  * 
  13.  * The Original Code is the Netscape security libraries.
  14.  * 
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation.  Portions created by Netscape are 
  17.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  18.  * Rights Reserved.
  19.  * 
  20.  * Contributor(s):
  21.  * 
  22.  * Alternatively, the contents of this file may be used under the
  23.  * terms of the GNU General Public License Version 2 or later (the
  24.  * "GPL"), in which case the provisions of the GPL are applicable 
  25.  * instead of those above.  If you wish to allow use of your 
  26.  * version of this file only under the terms of the GPL and not to
  27.  * allow others to use your version of this file under the MPL,
  28.  * indicate your decision by deleting the provisions above and
  29.  * replace them with the notice and other provisions required by
  30.  * the GPL.  If you do not delete the provisions above, a recipient
  31.  * may use your version of this file under either the MPL or the
  32.  * GPL.
  33.  */
  34. #ifndef __SSM_SSLCONN_H__
  35. #define __SSM_SSLCONN_H__
  36. #include <stdio.h>
  37. #include <string.h>
  38. #include "prerror.h"
  39. #include "pk11func.h"
  40. #include "secitem.h"
  41. #include "ssl.h"
  42. #include "prnetdb.h"
  43. #include "certt.h"
  44. #include "nss.h"
  45. #include "nspr.h"
  46. #include "secrng.h"
  47. #include "secder.h"
  48. #include "key.h"
  49. #include "sslproto.h"
  50. #include "ctrlconn.h"
  51. #include "dataconn.h"
  52. #include "sslskst.h"
  53. /* Initialization parameters for an SSMSSLDataConnection. */
  54. typedef struct SSMInfoSSL {
  55.     SSMControlConnection* parent;
  56.     char* hostIP;
  57.     char* hostName;
  58.     PRUint32 flags;
  59.     PRUint32 port;
  60.     PRBool forceHandshake;
  61.     PRBool isTLS;
  62.     CMTItem clientContext;
  63. } SSMInfoSSL;
  64. /* enum for determining how long we will accept this server cert */
  65. typedef enum {BSCA_PERMANENT = 0, BSCA_SESSION = 1, BSCA_NO = 2} SSMBadServerCertAccept;
  66. /* data related with UI */
  67. typedef struct _SSMSSLUIInfo {
  68.     PRBool UICompleted;
  69.     int numFilteredCerts;
  70.     char** certNicknames;
  71.     int chosen;    /* index of the chosen cert */
  72.     /* fields for bad server cert UI */
  73.     SSMBadServerCertAccept trustBadServerCert;
  74.     /* whether the user decided to use the cert */
  75. } SSMSSLUIInfo;
  76. /*
  77.   Data connections.
  78.  */
  79. typedef struct SSMSSLDataConnection {
  80.     SSMDataConnection super;
  81.     PRBool clientSSL;
  82.     char* hostIP;
  83.     char* hostName;
  84.     PRUint32 flags;
  85.     PRUint32 port;
  86.     PRBool forceHandshake;
  87.     PRBool isTLS; /* TRUE if the connection starts out as a cleartext and
  88.                    * is SSL-ified later
  89.                    */
  90.     PRBool isSecure;    /* SMTP | Proxy: whether the connection is secure
  91.                          * SSL: always true
  92.                          */
  93.     PRFileDesc* socketSSL;
  94.     PRFileDesc* stepUpFD; /* FD used by control connection to wake up
  95.                              SSL thread when it's time to enable TLS/SSL
  96.                              on a previously cleartext connection (eg SMTP) */
  97.     CMTItem* stepUpContext; /* Client context used for step-up */
  98. #if 0
  99.     PRMonitor* sslLock;
  100. #endif
  101.     SSMSSLSocketStatus* m_sockStat;
  102.     PRInt32 m_error;
  103.     SSMSSLUIInfo m_UIInfo;    /* field related with UI action */
  104. PRInt32 m_sslServerError;
  105.     PRBool m_statusFetched;
  106. } SSMSSLDataConnection;
  107. SSMStatus SSMSSLDataConnection_Create(void* arg, 
  108.  SSMControlConnection* ctrlconn, 
  109.                                      SSMResource** res);
  110. SSMStatus SSMSSLDataConnection_Shutdown(SSMResource* arg, SSMStatus status);
  111. SSMStatus SSMSSLDataConnection_Init(SSMSSLDataConnection* conn, 
  112.    SSMInfoSSL* info, SSMResourceType type);
  113. SSMStatus SSMSSLDataConnection_Destroy(SSMResource* res, PRBool doFree);
  114. void SSMSSLDataConnection_Invariant(SSMSSLDataConnection* conn);
  115. SSMStatus SSMSSLDataConnection_GetAttrIDs(SSMResource* res,
  116.                                          SSMAttributeID** ids, PRIntn* count);
  117. SSMStatus SSMSSLDataConnection_GetAttr(SSMResource* res, SSMAttributeID attrID,
  118.                                        SSMResourceAttrType attrType,
  119.                                        SSMAttributeValue *value);
  120. SSMStatus SSMSSLDataConnection_SetAttr(SSMResource * res,
  121.                                        SSMResourceAttrType attrID,
  122.                                        SSMAttributeValue *value);
  123. SSMStatus SSMSSLDataConnection_PickleSecurityStatus(SSMSSLDataConnection* conn,
  124.                                                    PRIntn* len, void** blob,
  125.                                                    PRIntn* securityLevel);
  126. SSMStatus SSMSSLDataConnection_FormSubmitHandler(SSMResource* res,
  127.                                                  HTTPRequest* req);
  128. SECStatus SSM_DoubleCheckServerCert(CERTCertificate* cert,
  129.                                     SSMSSLDataConnection* conn);
  130. SECStatus SSM_LDAPSSLGetClientAuthData(void* arg, PRFileDesc* socket,
  131.                                        CERTDistNames* caNames,
  132.                                        CERTCertificate** pRetCert,
  133.                                        SECKEYPrivateKey** pRetKey);
  134. SECStatus SSM_LDAPSetupSSL(PRFileDesc* socket, PRFileDesc** sslSocket,
  135.                            CERTCertDBHandle* certdb, const char* hostname, 
  136.                            SSMResource* caller);
  137. #endif /* __SSM_SSLCONN_H__ */