//+---------------------------------------------------------------------------- // // 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; }