/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef SSLSAMPLE_H #define SSLSAMPLE_H /* Generic header files */ #include #include /* NSPR header files */ #include "nspr.h" #include "prerror.h" #include "prnetdb.h" /* NSS header files */ #include "pk11func.h" #include "secitem.h" #include "ssl.h" #include "certt.h" #include "nss.h" #include "secder.h" #include "keyhi.h" #include "sslproto.h" /* Custom header files */ /* #include "sslerror.h" */ #define BUFFER_SIZE 10240 /* Declare SSL cipher suites. */ extern int cipherSuites[]; extern int ssl3CipherSuites[]; /* Data buffer read from a socket. */ typedef struct DataBufferStr { char data[BUFFER_SIZE]; int index; int remaining; int dataStart; int dataEnd; } DataBuffer; /* SSL callback routines. */ char *myPasswd(PK11SlotInfo *info, PRBool retry, void *arg); SECStatus myAuthCertificate(void *arg, PRFileDesc *socket, PRBool checksig, PRBool isServer); SECStatus myBadCertHandler(void *arg, PRFileDesc *socket); void myHandshakeCallback(PRFileDesc *socket, void *arg); SECStatus myGetClientAuthData(void *arg, PRFileDesc *socket, struct CERTDistNamesStr *caNames, struct CERTCertificateStr **pRetCert, struct SECKEYPrivateKeyStr **pRetKey); /* Disable all v2/v3 SSL ciphers. */ void disableAllSSLCiphers(void); /* Error and information utilities. */ void errWarn(char *function); void exitErr(char *function); void printSecurityInfo(FILE *outfile, PRFileDesc *fd); /* Some simple thread management routines. */ #define MAX_THREADS 32 typedef SECStatus startFn(void *a, int b); typedef enum { rs_idle = 0, rs_running = 1, rs_zombie = 2 } runState; typedef struct perThreadStr { PRFileDesc *a; int b; int rv; startFn *startFunc; PRThread *prThread; PRBool inUse; runState running; } perThread; typedef struct GlobalThreadMgrStr { PRLock *threadLock; PRCondVar *threadStartQ; PRCondVar *threadEndQ; perThread threads[MAX_THREADS]; int index; int numUsed; int numRunning; } GlobalThreadMgr; void thread_wrapper(void *arg); SECStatus launch_thread(GlobalThreadMgr *threadMGR, startFn *startFunc, void *a, int b); SECStatus reap_threads(GlobalThreadMgr *threadMGR); void destroy_thread_data(GlobalThreadMgr *threadMGR); /* Management of locked variables. */ struct lockedVarsStr { PRLock *lock; int count; int waiters; PRCondVar *condVar; }; typedef struct lockedVarsStr lockedVars; void lockedVars_Init(lockedVars *lv); void lockedVars_Destroy(lockedVars *lv); void lockedVars_WaitForDone(lockedVars *lv); int lockedVars_AddToCount(lockedVars *lv, int addend); #endif