163 lines
4.7 KiB
C
163 lines
4.7 KiB
C
//---------------------------------------------------------------------------
|
|
// 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)
|
|
|