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

CA认证

开发平台:

WINDOWS

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  */
  33. #ifndef SSLSAMPLE_H
  34. #define SSLSAMPLE_H
  35. /* Generic header files */
  36. #include <stdio.h>
  37. #include <string.h>
  38. /* NSPR header files */
  39. #include "nspr.h"
  40. #include "prerror.h"
  41. #include "prnetdb.h"
  42. /* NSS header files */
  43. #include "pk11func.h"
  44. #include "secitem.h"
  45. #include "ssl.h"
  46. #include "certt.h"
  47. #include "nss.h"
  48. #include "secrng.h"
  49. #include "secder.h"
  50. #include "key.h"
  51. #include "sslproto.h"
  52. /* Custom header files */
  53. /*
  54. #include "sslerror.h"
  55. */
  56. #define BUFFER_SIZE 10240
  57. /* Declare SSL cipher suites. */
  58. extern int cipherSuites[];
  59. extern int ssl2CipherSuites[];
  60. extern int ssl3CipherSuites[];
  61. /* Data buffer read from a socket. */
  62. typedef struct DataBufferStr {
  63. char data[BUFFER_SIZE];
  64. int  index;
  65. int  remaining;
  66. int  dataStart;
  67. int  dataEnd;
  68. } DataBuffer;
  69. /* SSL callback routines. */
  70. char * myPasswd(PK11SlotInfo *info, PRBool retry, void *arg);
  71. SECStatus myAuthCertificate(void *arg, PRFileDesc *socket,
  72.                             PRBool checksig, PRBool isServer);
  73. SECStatus myBadCertHandler(void *arg, PRFileDesc *socket);
  74. SECStatus myHandshakeCallback(PRFileDesc *socket, void *arg);
  75. SECStatus myGetClientAuthData(void *arg, PRFileDesc *socket,
  76.                               struct CERTDistNamesStr *caNames,
  77.                               struct CERTCertificateStr **pRetCert,
  78.                               struct SECKEYPrivateKeyStr **pRetKey);
  79. /* Disable all v2/v3 SSL ciphers. */
  80. void disableSSL2Ciphers(void);
  81. void disableSSL3Ciphers(void);
  82. /* Error and information utilities. */
  83. void errWarn(char *function);
  84. void exitErr(char *function);
  85. void printSecurityInfo(PRFileDesc *fd);
  86. /* Some simple thread management routines. */
  87. #define MAX_THREADS 32
  88. typedef SECStatus startFn(void *a, int b);
  89. typedef enum { rs_idle = 0, rs_running = 1, rs_zombie = 2 } runState;
  90. typedef struct perThreadStr {
  91. PRFileDesc *a;
  92. int         b;
  93. int         rv;
  94. startFn    *startFunc;
  95. PRThread   *prThread;
  96. PRBool      inUse;
  97. runState    running;
  98. } perThread;
  99. typedef struct GlobalThreadMgrStr {
  100. PRLock   *threadLock;
  101. PRCondVar *threadStartQ;
  102. PRCondVar *threadEndQ;
  103. perThread  threads[MAX_THREADS];
  104. int        index;
  105. int        numUsed;
  106. int        numRunning;
  107. } GlobalThreadMgr;
  108. void thread_wrapper(void * arg);
  109. SECStatus launch_thread(GlobalThreadMgr *threadMGR, 
  110.                         startFn *startFunc, void *a, int b);
  111. SECStatus reap_threads(GlobalThreadMgr *threadMGR);
  112. void destroy_thread_data(GlobalThreadMgr *threadMGR);
  113. /* Management of locked variables. */
  114. struct lockedVarsStr {
  115. PRLock *    lock;
  116. int         count;
  117. int         waiters;
  118. PRCondVar * condVar;
  119. };
  120. typedef struct lockedVarsStr lockedVars;
  121. void lockedVars_Init(lockedVars *lv);
  122. void lockedVars_Destroy(lockedVars *lv);
  123. void lockedVars_WaitForDone(lockedVars *lv);
  124. int lockedVars_AddToCount(lockedVars *lv, int addend);
  125. /* Buffer stuff. */
  126. static const char stopCmd[] = { "GET /stop " };
  127. static const char defaultHeader[] = {
  128. "HTTP/1.0 200 OKrn"
  129. "Server: SSL sample serverrn"
  130. "Content-type: text/plainrn"
  131. "rn"
  132. };
  133. #endif