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

235 lines
6.3 KiB
C++

/************************************************************************
* *
* INTEL CORPORATION PROPRIETARY INFORMATION *
* *
* This software is supplied under the terms of a license *
* agreement or non-disclosure agreement with Intel Corporation *
* and may not be copied or disclosed except in accordance *
* with the terms of that agreement. *
* *
* Copyright (C) 1997 Intel Corp. All Rights Reserved *
* *
* $Archive: S:\sturgeon\src\gki\vcs\gatekpr.cpv $
* *
* $Revision: 1.9 $
* $Date: 19 Feb 1997 13:57:36 $
* *
* $Author: CHULME $
* *
* $Log: S:\sturgeon\src\gki\vcs\gatekpr.cpv $
//
// Rev 1.9 19 Feb 1997 13:57:36 CHULME
// Modified DeleteCachedAddress to write all registry settings
//
// Rev 1.8 14 Feb 1997 16:41:16 CHULME
// Changed registry key to GKIDLL\2.0 to match GKI version
//
// Rev 1.7 17 Jan 1997 12:53:00 CHULME
// Removed UNICODE dependent code
//
// Rev 1.6 17 Jan 1997 09:01:58 CHULME
// No change.
//
// Rev 1.5 13 Jan 1997 17:01:38 CHULME
// Fixed debug messages for registry cached addresses
//
// Rev 1.4 10 Jan 1997 16:14:22 CHULME
// Removed MFC dependency
//
// Rev 1.3 20 Dec 1996 16:37:42 CHULME
// Fixed access synchronization with Gatekeeper lock
//
// Rev 1.2 19 Dec 1996 19:27:32 CHULME
// Retry count and interval only read/written to registry on DEBUG
//
// Rev 1.1 22 Nov 1996 15:24:28 CHULME
// Added VCS log to the header
*************************************************************************/
// gatekeeper.cpp : Provides the implementation for the CGatekeeper class
//
#include "precomp.h"
#include "dspider.h"
#include "dgkilit.h"
#include "GATEKPR.H"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGatekeeper construction
CGatekeeper::CGatekeeper()
:m_dwMCastTTL(1),
m_fRejectReceived(FALSE),
m_dwLockingThread(0)
{
SetIPAddress("");
m_GKSockAddr.sin_addr.S_un.S_addr = INADDR_ANY;
InitializeCriticalSection(&m_CriticalSection);
}
/////////////////////////////////////////////////////////////////////////////
// CGatekeeper destruction
CGatekeeper::~CGatekeeper()
{
if (m_dwLockingThread)
Unlock();
DeleteCriticalSection(&m_CriticalSection);
}
void
CGatekeeper::Read(void)
{
// ABSTRACT: This member function will read the gatekeeper addresses and the
// multicast flag from the Registry and load the member variables
// AUTHOR: Colin Hulme
HKEY hKey;
DWORD dwDisposition;
DWORD dwType;
DWORD dwLen;
LONG lRet;
#ifdef _DEBUG
char szGKDebug[80];
#endif
SPIDER_TRACE(SP_FUNC, "CGatekeeper::Read()\n", 0);
dwType = REG_SZ;
lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Conferencing\\GatekeeperDLL"),
0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, &dwDisposition);
dwLen =IPADDR_SZ + 1;
#if(0) // don't do the registry hack now that setting the address is exposed
lRet = RegQueryValueEx(hKey, TEXT("GKIPAddress"), NULL, &dwType,
(LPBYTE)m_GKIPAddress, &dwLen);
SPIDER_DEBUGS(m_GKIPAddress);
if(m_GKIPAddress[0] != 0)
{
m_GKSockAddr.sin_addr.s_addr = inet_addr(m_GKIPAddress);
}
#endif // if(0)
dwType = REG_DWORD;
dwLen = sizeof(DWORD);
RegQueryValueEx(hKey, TEXT("GKMCastTTL"), NULL, &dwType,
(LPBYTE)&m_dwMCastTTL, &dwLen);
SPIDER_DEBUG(m_dwMCastTTL);
#if(0)
#ifdef _DEBUG
RegQueryValueEx(hKey, TEXT("GKRetryMS"), NULL, &dwType,
(LPBYTE)&m_dwRetryMS, &dwLen);
if (m_dwRetryMS == 0)
m_dwRetryMS = DEFAULT_RETRY_MS;
SPIDER_DEBUG(m_dwRetryMS);
RegQueryValueEx(hKey, TEXT("GKMaxRetries"), NULL, &dwType,
(LPBYTE)&m_dwMaxRetries, &dwLen);
if (m_dwMaxRetries == 0)
m_dwMaxRetries = DEFAULT_MAX_RETRIES;
SPIDER_DEBUG(m_dwMaxRetries);
#else
m_dwRetryMS = DEFAULT_RETRY_MS;
m_dwMaxRetries = DEFAULT_MAX_RETRIES;
#endif //_DEBUG
#endif // if(0)
RegCloseKey(hKey);
}
void
CGatekeeper::Write(void)
{
// ABSTRACT: This member function will write the gatekeeper addresses and the
// multicast flag to the Registry.
// AUTHOR: Colin Hulme
HKEY hKey;
DWORD dwDisposition;
#ifdef _DEBUG
char szGKDebug[80];
#endif
SPIDER_TRACE(SP_FUNC, "CGatekeeper::Write()\n", 0);
RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Intel\\GKIDLL\\2.0"),
0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, &dwDisposition);
RegSetValueEx(hKey, TEXT("GKIPAddress"), NULL, REG_SZ,
(LPBYTE)m_GKIPAddress, lstrlenA(m_GKIPAddress));
#if(0)
#ifdef _DEBUG
RegSetValueEx(hKey, TEXT("GKMCastTTL"), NULL, REG_DWORD,
(LPBYTE)&m_dwMCastTTL, sizeof(DWORD));
RegSetValueEx(hKey, TEXT("GKRetryMS"), NULL, REG_DWORD,
(LPBYTE)&m_dwRetryMS, sizeof(DWORD));
RegSetValueEx(hKey, TEXT("GKMaxRetries"), NULL, REG_DWORD,
(LPBYTE)&m_dwMaxRetries, sizeof(DWORD));
#endif //_DEBUG
#endif // if(0)
RegCloseKey(hKey);
}
#ifdef BROADCAST_DISCOVERY
void
CGatekeeper::DeleteCachedAddresses(void)
{
// ABSTRACT: This memeber function will delete the cached gatekeeper
// addresses from the Registry
//AUTHOR: Colin Hulme
HKEY hKey;
DWORD dwDisposition;
#ifdef _DEBUG
char szGKDebug[80];
#endif
SPIDER_TRACE(SP_FUNC, "CGatekeeper::DeleteCachedAddresses()\n", 0);
RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Intel\\GKIDLL\\2.0"),
0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, &dwDisposition);
RegDeleteValue(hKey, "GKIPAddress");
RegDeleteValue(hKey, "GKIPXAddress");
#ifdef _DEBUG
RegSetValueEx(hKey, TEXT("GKMCastTTL"), NULL, REG_DWORD,
(LPBYTE)&m_dwMCastTTL, sizeof(DWORD));
RegSetValueEx(hKey, TEXT("GKRetryMS"), NULL, REG_DWORD,
(LPBYTE)&m_dwRetryMS, sizeof(DWORD));
RegSetValueEx(hKey, TEXT("GKMaxRetries"), NULL, REG_DWORD,
(LPBYTE)&m_dwMaxRetries, sizeof(DWORD));
#endif
RegCloseKey(hKey);
}
#endif //#ifdef BROADCAST_DISCOVERY
void
CGatekeeper::Lock(void)
{
EnterCriticalSection(&m_CriticalSection);
m_dwLockingThread = GetCurrentThreadId();
}
void
CGatekeeper::Unlock(void)
{
// Assert that the unlock is done by the
// thread that holds the lock
ASSERT(m_dwLockingThread == GetCurrentThreadId());
m_dwLockingThread = 0;
LeaveCriticalSection(&m_CriticalSection);
}