You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
6.6 KiB
236 lines
6.6 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1997.
|
|
//
|
|
// File: C M U T I L . C P P
|
|
//
|
|
// Contents: Connection manager.
|
|
//
|
|
// Notes:
|
|
//
|
|
// Author: omiller 1 Jun 2000
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
#include "cmutil.h"
|
|
#include <objbase.h>
|
|
#include <ncmisc.h>
|
|
|
|
// Create an instance of CMUTIL so that we can be global
|
|
//
|
|
CCMUtil CCMUtil::s_instance; //ISSUE: Evil, evil, evil. This can throw and cause a crash.
|
|
|
|
CCMUtil::CCMUtil() throw(SE_Exception)
|
|
{
|
|
InitializeCriticalSection( &m_CriticalSection );
|
|
}
|
|
|
|
CCMUtil::~CCMUtil() throw()
|
|
{
|
|
DeleteCriticalSection( &m_CriticalSection );
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: GetIteratorFromGuid
|
|
//
|
|
// Purpose: Retrieve the guid, name and status of a Hidden connectiod
|
|
//
|
|
// Connection Manager has two stages: Dialup and VPN.
|
|
// For the Dialup it creates a hidden connectoid that the
|
|
// folder (netshell) does not see. However netman caches
|
|
// the name, guid and status of this connectedoid. Both
|
|
// the parent and child connectoid have the same name.
|
|
//
|
|
// Arguments:
|
|
// guid [in] GUID of the hidden connectiod to search for
|
|
//
|
|
// Returns: S_OK -- Found the hidden connectoid
|
|
//
|
|
// Author: omiller 1 Jun 2000
|
|
//
|
|
// Notes:
|
|
//
|
|
CCMUtil::CMEntryTable::iterator CCMUtil::GetIteratorFromGuid(const GUID & guid)
|
|
{
|
|
CMEntryTable::iterator iter;
|
|
|
|
// Search through the list of hidden connections
|
|
//
|
|
for (iter = m_Table.begin(); iter != m_Table.end(); iter++)
|
|
{
|
|
if( iter->m_guid == guid )
|
|
{
|
|
// Found the hidden connection that maps to this guid
|
|
//
|
|
return iter;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: HrGetEntry
|
|
//
|
|
// Purpose: Retrive the guid, name and status of a Hidden connectiod
|
|
//
|
|
// Connection Manager has two stages: Dialup and VPN.
|
|
// For the Dialup it creates a hidden connectoid that the
|
|
// folder (netshell) does not see. However netman caches
|
|
// the name, guid and status of this connectedoid. Both
|
|
// the parent and child connectoid have the same name.
|
|
//
|
|
// Arguments:
|
|
// guid [in] GUID of the hidden connectiod to search for
|
|
// cm [out] A copy to the hidden entry
|
|
//
|
|
// Returns: TRUE -- Found the hidden connectoid
|
|
//
|
|
// Author: omiller 1 Jun 2000
|
|
//
|
|
// Notes:
|
|
//
|
|
HRESULT CCMUtil::HrGetEntry(const GUID & guid, CMEntry & cm)
|
|
{
|
|
CMEntryTable::iterator iter;
|
|
HRESULT hr = S_FALSE;
|
|
CExceptionSafeLock esCritSec(&m_CriticalSection);
|
|
|
|
iter = GetIteratorFromGuid(guid);
|
|
|
|
if( iter )
|
|
{
|
|
cm = *iter;
|
|
hr = S_OK;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: HrGetEntry
|
|
//
|
|
// Purpose: Retrive the guid, name and status of a Hidden connectiod
|
|
//
|
|
// Connection Manager has two stages: Dialup and VPN.
|
|
// For the Dialup it creates a hidden connectoid that the
|
|
// folder (netshell) does not see. However netman caches
|
|
// the name, guid and status of this connectedoid. Both
|
|
// the parent and child connectoid have the same name.
|
|
//
|
|
// Arguments:
|
|
// szEntryName [in] Name of the connection to look for
|
|
// cm [out] A copy to the hidden entry
|
|
//
|
|
// Returns: S_OK -- Found the hidden connectoid
|
|
//
|
|
// Author: omiller 1 Jun 2000
|
|
//
|
|
// Notes:
|
|
//
|
|
HRESULT CCMUtil::HrGetEntry(const WCHAR * szEntryName, CMEntry & cm)
|
|
{
|
|
CMEntryTable::iterator iter;
|
|
CExceptionSafeLock esCritSec(&m_CriticalSection);
|
|
|
|
for (iter = m_Table.begin(); iter != m_Table.end(); iter++)
|
|
{
|
|
if( lstrcmp(iter->m_szEntryName,szEntryName) == 0 )
|
|
{
|
|
// Found the Hidden connectoid that maps to that name
|
|
//
|
|
cm = *iter;
|
|
return S_OK;
|
|
}
|
|
}
|
|
|
|
return S_FALSE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: SetEntry
|
|
//
|
|
// Purpose: Stores or Updates the guid, name and status of a Hidden connectiod
|
|
//
|
|
// Connection Manager has two stages: Dialup and VPN.
|
|
// For the Dialup it creates a hidden connectoid that the
|
|
// folder (netshell) does not see. However netman caches
|
|
// the name, guid and status of this connectedoid. Both
|
|
// the parent and child connectoid have the same name.
|
|
//
|
|
// Arguments:
|
|
// guid [in] Guid of the Hidden connectiod
|
|
// szEntryName [in] Name of the Hidden connectiod
|
|
// ncs [in] Status of the hidden connectiod
|
|
//
|
|
// Returns: nothing
|
|
//
|
|
// Author: omiller 1 Jun 2000
|
|
//
|
|
// Notes:
|
|
//
|
|
void CCMUtil::SetEntry(const GUID & guid, const WCHAR * szEntryName, const NETCON_STATUS ncs) throw (std::bad_alloc)
|
|
{
|
|
CMEntryTable::iterator iter;
|
|
CExceptionSafeLock esCritSec(&m_CriticalSection);
|
|
|
|
iter = GetIteratorFromGuid(guid);
|
|
|
|
if( iter )
|
|
{
|
|
iter->Set(guid,szEntryName,ncs);
|
|
}
|
|
else
|
|
{
|
|
m_Table.push_back( CMEntry(guid,szEntryName,ncs) ); // can throw
|
|
}
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: RemoveEntry
|
|
//
|
|
// Purpose: Removes a hidden connectiod from the list
|
|
//
|
|
// Connection Manager has two stages: Dialup and VPN.
|
|
// For the Dialup it creates a hidden connectoid that the
|
|
// folder (netshell) does not see. However netman caches
|
|
// the name, guid and status of this connectedoid. Both
|
|
// the parent and child connectoid have the same name.
|
|
//
|
|
// Arguments:
|
|
// guid [in] Guid of the Hidden connectiod
|
|
//
|
|
// Returns: S_OK -- Found the hidden connectoid
|
|
//
|
|
// Author: omiller 1 Jun 2000
|
|
//
|
|
// Notes:
|
|
//
|
|
void CCMUtil::RemoveEntry(const GUID & guid) throw()
|
|
{
|
|
/*
|
|
CMEntryTable::iterator iter;
|
|
|
|
EnterCriticalSection(&m_CriticalSection);
|
|
|
|
iter = GetIteratorFromGuid(guid);
|
|
|
|
if( iter )
|
|
{
|
|
m_Table.erase(iter);
|
|
}
|
|
|
|
LeaveCriticalSection(&m_CriticalSection);
|
|
*/
|
|
}
|
|
|