//--------------------------------------------------------------------------- // File: H245Main.C // // This file contains the DLL's entry and exit points. // // INTEL Corporation Proprietary Information // This listing is supplied under the terms of a license agreement with // Intel Corporation and may not be copied nor disclosed except in // accordance with the terms of that agreement. // Copyright (c) 1995 Intel Corporation. //--------------------------------------------------------------------------- #ifndef STRICT #define STRICT #endif #include "precomp.h" #define H245DLL_EXPORT #include "h245com.h" #if defined(_DEBUG) || defined(PCS_COMPLIANCE) #include "interop.h" #include "h245plog.h" LPInteropLogger H245Logger = NULL; #endif // (PCS_COMPLIANCE) extern CRITICAL_SECTION TimerLock; extern CRITICAL_SECTION InstanceCreateLock; extern CRITICAL_SECTION InstanceLocks[MAXINST]; extern struct InstanceStruct * InstanceTable[MAXINST]; BOOL H245SysInit() { register unsigned int uIndex; /* initialize memory resources */ H245TRACE(0, 0, "***** Loading H.245 DLL %s - %s", __DATE__, __TIME__); #if defined(_DEBUG) || defined(PCS_COMPLIANCE) H245Logger = InteropLoad(H245LOG_PROTOCOL); #endif // (PCS_COMPLIANCE) InitializeCriticalSection(&TimerLock); InitializeCriticalSection(&InstanceCreateLock); for (uIndex = 0; uIndex < MAXINST; ++uIndex) { InitializeCriticalSection(&InstanceLocks[uIndex]); } return TRUE; } VOID H245SysDeInit() { register unsigned int uIndex; H245TRACE(0, 0, "***** Unloading H.245 DLL"); for (uIndex = 0; uIndex < MAXINST; ++uIndex) { if (InstanceTable[uIndex]) { register struct InstanceStruct *pInstance = InstanceLock(uIndex + 1); if (pInstance) { H245TRACE(uIndex+1,0,"DLLMain: Calling H245ShutDown"); H245ShutDown(uIndex + 1); InstanceUnlock_ProcessDetach(pInstance,TRUE); } } ASSERT(InstanceTable[uIndex] == NULL); DeleteCriticalSection(&InstanceLocks[uIndex]); } DeleteCriticalSection(&InstanceCreateLock); DeleteCriticalSection(&TimerLock); #if defined(_DEBUG) || defined(PCS_COMPLIANCE) if (H245Logger) { H245TRACE(0, 4, "Unloading interop logger"); InteropUnload(H245Logger); H245Logger = NULL; } #endif // (PCS_COMPLIANCE) } #if(0) //--------------------------------------------------------------------------- // Function: dllmain // // Description: DLL entry/exit points. // // Inputs: // hInstDll : DLL instance. // fdwReason : Reason the main function is called. // lpReserved : Reserved. // // Return: TRUE : OK // FALSE : Error, DLL won't load //--------------------------------------------------------------------------- BOOL WINAPI DllMain (HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved) { extern CRITICAL_SECTION TimerLock; extern CRITICAL_SECTION InstanceCreateLock; extern CRITICAL_SECTION InstanceLocks[MAXINST]; extern struct InstanceStruct * InstanceTable[MAXINST]; register unsigned int uIndex; switch (fdwReason) { case DLL_PROCESS_ATTACH: DBG_INIT_MEMORY_TRACKING(hInstDll); /* initialize memory resources */ H245TRACE(0, 0, "***** Loading H.245 DLL %s - %s", __DATE__, __TIME__); #if defined(_DEBUG) || defined(PCS_COMPLIANCE) H245Logger = InteropLoad(H245LOG_PROTOCOL); #endif // (PCS_COMPLIANCE) InitializeCriticalSection(&TimerLock); InitializeCriticalSection(&InstanceCreateLock); for (uIndex = 0; uIndex < MAXINST; ++uIndex) { InitializeCriticalSection(&InstanceLocks[uIndex]); } break; case DLL_PROCESS_DETACH: /* release memory resources */ H245TRACE(0, 0, "***** Unloading H.245 DLL"); H245TRACE(0, 0, "***** fProcessDetach = TRUE"); for (uIndex = 0; uIndex < MAXINST; ++uIndex) { if (InstanceTable[uIndex]) { register struct InstanceStruct *pInstance = InstanceLock(uIndex + 1); if (pInstance) { H245TRACE(uIndex+1,0,"DLLMain: Calling H245ShutDown"); H245ShutDown(uIndex + 1); InstanceUnlock_ProcessDetach(pInstance,TRUE); } } ASSERT(InstanceTable[uIndex] == NULL); DeleteCriticalSection(&InstanceLocks[uIndex]); } DeleteCriticalSection(&InstanceCreateLock); DeleteCriticalSection(&TimerLock); #if defined(_DEBUG) || defined(PCS_COMPLIANCE) if (H245Logger) { H245TRACE(0, 4, "Unloading interop logger"); InteropUnload(H245Logger); H245Logger = NULL; } #endif // (PCS_COMPLIANCE) DBG_CHECK_MEMORY_TRACKING(hInstDll); break; } return TRUE; } #endif // if(0)