#ifndef OPENSSLWRAPPER_H
#define OPENSSLWRAPPER_H
#ifdef _WIN32
#pragma once
#endif
struct CRYPTO_dynlock_value;
class COpenSSLWrapper
{
public:
static void Initialize();
static void Shutdown();
static bool BIsOpenSSLInitialized() { return m_nInstances > 0; }
static int GetContextDataIndex() { return s_nContextDataIndex; }
static int GetConnectionDataIndex() { return s_nConnectionDataIndex; }
static void OpenSSLLockingCallback( int mode, int type, const char *file, int line );
static unsigned long OpenSSLThreadIDCallback( void );
static CRYPTO_dynlock_value* OpenSSLDynLockCreateCallback( const char* file, int line );
static void OpenSSLDynLockDestroyCallback( CRYPTO_dynlock_value * l, const char *file, int line );
static void OpenSSLDynLockLockCallback( int mode, CRYPTO_dynlock_value *l, const char* file, int line );
#ifdef _DEBUG
static void *OpenSSLMemLeakCallback( unsigned long order, const char *file, int line, int num_bytes, void * addr );
static int m_nBytesLeaked;
#endif
#ifdef DBGFLAG_VALIDATE
static void ValidateStatics( CValidator &validator, const char *pchName );
#endif
private:
static int m_nInstances;
static void *s_pAESNIEngine;
static int s_nContextDataIndex;
static int s_nConnectionDataIndex;
};
#endif