Source code of Windows XP (NT5)
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.
|
|
//+----------------------------------------------------------------------------
//
// File: refs.cpp
//
// Module: CMDIAL32.DLL
//
// Synopsis: The module contains the code for profile referencing.
//
// Copyright (c) 1996-1999 Microsoft Corporation
//
// Author: quintinb created Header 08/16/99
//
//+----------------------------------------------------------------------------
#include "cmmaster.h"
#include "pbk_str.h"
//+---------------------------------------------------------------------------
//
// Function: ValidTopLevelPBK()
//
// Synopsis: Checks to see if the toplevel phone book is valid.
//
// Arguments: pArgs [the ptr to ArgsStruct]
//
// Returns: BOOL [True if there are valid phone books]
//
// History: henryt Created 4/7/97
//
//----------------------------------------------------------------------------
BOOL ValidTopLevelPBK( ArgsStruct *pArgs ) { LPTSTR pszTmp; LPTSTR pszFullPath; BOOL fValid = TRUE;
//
// First check the top level service profile pbk
//
pszTmp = pArgs->piniService->GPPS(c_pszCmSectionIsp, c_pszCmEntryIspPbFile);
if (!*pszTmp) { fValid = FALSE; } else { pszFullPath = CmBuildFullPathFromRelative(pArgs->piniProfile->GetFile(), pszTmp);
if (!pszFullPath || (FALSE == FileExists(pszFullPath))) { fValid = FALSE; } CmFree(pszFullPath); }
CmFree(pszTmp);
//
// If PBK failed, we're done
//
if (FALSE == fValid) { return fValid; }
//
// Now check the region file
//
pszTmp = pArgs->piniService->GPPS(c_pszCmSectionIsp, c_pszCmEntryIspRegionFile);
if (!*pszTmp) { fValid = FALSE; } else { pszFullPath = CmBuildFullPathFromRelative(pArgs->piniProfile->GetFile(), pszTmp);
if (!pszFullPath || (FALSE == FileExists(pszFullPath))) { fValid = FALSE; } CmFree(pszFullPath); }
CmFree(pszTmp);
return fValid; }
//+---------------------------------------------------------------------------
//
// Function: ValidReferencedPBKs()
//
// Synopsis: Checks to see if the phone books used by the referenced
// service profile(s) exist.
//
// Arguments: pArgs [the ptr to ArgsStruct]
//
// Returns: BOOL [True if there are valid phone books]
//
// History: henryt Created 4/7/97
//
//----------------------------------------------------------------------------
BOOL ValidReferencedPBKs( ArgsStruct *pArgs ) { LPTSTR pszTmp, pszTmp2; LPTSTR pszRef, pszNext; CIni iniRef(g_hInst); CIni iniFile(g_hInst, pArgs->piniService->GetFile()); LPTSTR pszRefFile; BOOL fValid = TRUE; BOOL fValidPairFound = FALSE; LPTSTR pszFullPath; //
// Now check the references.
//
pszTmp2 = iniFile.GPPS(c_pszCmSectionIsp, c_pszCmEntryIspReferences); pszRef = NULL; pszNext = pszTmp2; while (1) { if (!(pszRef = CmStrtok(pszNext, TEXT(" \t,")))) { break; }
fValid = TRUE; pszNext = pszRef + lstrlenU(pszRef) + 1;
iniFile.SetEntry(pszRef);
//
// Make sure that each referenced service has a valid pbk and pbr
//
pszRefFile = iniFile.GPPS(c_pszCmSectionIsp, c_pszCmEntryIspCmsFile); if (*pszRefFile) { //
// Ensure a full path to the RefFile
//
pszFullPath = CmBuildFullPathFromRelative(pArgs->piniProfile->GetFile(), pszRefFile); if (!pszFullPath) { fValid = FALSE; } else { iniRef.SetFile(pszFullPath); } CmFree(pszFullPath);
if (fValid) { //
// Test existence of phonebook
//
pszTmp = iniRef.GPPS(c_pszCmSectionIsp, c_pszCmEntryIspPbFile);
if (!*pszTmp) { fValid = FALSE; } else { pszFullPath = CmBuildFullPathFromRelative(pArgs->piniProfile->GetFile(), pszTmp); if (!pszFullPath || (FALSE == FileExists(pszFullPath))) { fValid = FALSE; } CmFree(pszFullPath); } CmFree(pszTmp);
//
// Now check the region file
//
pszTmp = iniRef.GPPS(c_pszCmSectionIsp, c_pszCmEntryIspRegionFile);
if (!*pszTmp) { fValid = FALSE; } else { pszFullPath = CmBuildFullPathFromRelative(pArgs->piniProfile->GetFile(), pszTmp); if (!pszFullPath || (FALSE == FileExists(pszFullPath))) { fValid = FALSE; } CmFree(pszFullPath); }
CmFree(pszTmp); } } else { fValid = FALSE; } CmFree(pszRefFile);
if (fValid) { fValidPairFound = TRUE; break; } } CmFree(pszTmp2);
return fValidPairFound; }
//+---------------------------------------------------------------------------
//
// Function: GetAppropriateIniService
//
// Synopsis: Depending on:
// 1. whether we're referencing or not,
// 2. the pbk from which the user selected the phone #
//
// this func creates a CIni obj with the correct cms file
//
// Arguments: pArgs Pointer to ArgsStruct
// dwEntry phone index
//
// Returns: CIni* - the ptr to the new object
//
// History: henryt Created 5/14/97
//----------------------------------------------------------------------------
CIni* GetAppropriateIniService( ArgsStruct *pArgs, DWORD dwEntry ) { CIni* piniService = new CIni(g_hInst);
if (!piniService) { CMTRACE(TEXT("GetAppropriateIniService() : alloc mem failed")); return NULL; }
//
// we need to work with the correct service file(the top-level service
// or a referenced service).
//
// according to the spec, we will always use the DUN settings from the cms
// associated w/ the phone book from which the user selected the POP. i.e.
// if the user switches the picked from a different pbk, we need to update
// the RAS connectoid.
//
if (IsBlankString(pArgs->aDialInfo[dwEntry].szPhoneBookFile) || lstrcmpiU(pArgs->aDialInfo[dwEntry].szPhoneBookFile, pArgs->piniService->GetFile()) == 0) { //
// the user either typed in the phone # or selected a phone # from the
// top level phone book
//
piniService->SetFile(pArgs->piniService->GetFile()); } else { //
// the user picked the phone # from a referenced phone book.
//
piniService->SetFile(pArgs->aDialInfo[dwEntry].szPhoneBookFile); }
return piniService; }
|