windows-nt/Source/XPSP1/NT/enduser/netmeeting/av/callcont/h245main.c
2020-09-26 16:20:57 +08:00

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)