windows-nt/Source/XPSP1/NT/inetsrv/iis/ui/itools/linkchk/useropt.cpp

548 lines
8.6 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name :
useropt.h
Abstract:
Global user options class and help class implementations. This class
can only instantiate by CLinkCheckerMgr. Therefore, a single instance
of this class will live inside CLinkCheckerMgr. You can access
the this instance by calling GetLinkCheckMgr().GetUserOptions().
Author:
Michael Cheuk (mcheuk)
Project:
Link Checker
Revision History:
--*/
#include "stdafx.h"
#include "useropt.h"
#include "lcmgr.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//------------------------------------------------------------------
// CVirtualDirInfo
//
void
CVirtualDirInfo::PreProcessAlias(
)
/*++
Routine Description:
Preprocess the current virtual directory alias. The alias will be in
the form of / or /dir/
Arguments:
N/A
Return Value:
N/A
--*/
{
// Change everything to lower case
m_strAlias.MakeLower();
// Change '\' to '/'
CLinkCheckerMgr::ChangeBackSlash(m_strAlias);
// Make sure strAlias is in the form of / or /dir/
if( m_strAlias.GetAt( m_strAlias.GetLength() - 1 ) != _TCHAR('/') )
{
m_strAlias += _TCHAR('/');
}
} // CVirtualDirInfo::PreProcessAlias
void
CVirtualDirInfo::PreProcessPath(
)
/*++
Routine Description:
Preprocess the current virtual directory path. The alias will be in
the form of c:\ or c:\dir\
Arguments:
N/A
Return Value:
N/A
--*/
{
// Change everything to lower case
m_strPath.MakeLower();
// Make sure strPath is in the form of \ or \dir\
if( m_strPath.GetAt( m_strPath.GetLength() - 1 ) != _TCHAR('\\') )
{
m_strPath += _TCHAR('\\');
}
} // CVirtualDirInfo::PreProcessPath
//------------------------------------------------------------------
// CBrowserInfoList
//
POSITION
CBrowserInfoList::GetHeadSelectedPosition(
) const
/*++
Routine Description:
Get the first selected browser. It works like GetHeadPosition()
Arguments:
N/A
Return Value:
POSITION - A POSITION value that can be used for iteration or
object pointer retrieval; NULL if the list is empty
--*/
{
POSITION Pos = GetHeadPosition();
while(Pos)
{
POSITION PosCurrent = Pos;
if(GetNext(Pos).IsSelected())
{
return PosCurrent;
break;
}
}
return NULL;
} // CBrowserInfoList::GetHeadSelectedPosition
CBrowserInfo&
CBrowserInfoList::GetNextSelected(
POSITION& Pos
)
/*++
Routine Description:
Get next selected browser. It works like GetNext()
Arguments:
Pos - A reference to a POSITION value returned by
a previous GetHeadSelectedPosition, GetNextSelected
Return Value:
CBrowserInfo& - returns a reference to an element of the list
--*/
{
CBrowserInfo& Info = GetNext(Pos);
while(Pos)
{
POSITION PosCurrent = Pos;
if(GetNext(Pos).IsSelected())
{
Pos = PosCurrent;
break;
}
}
return Info;
} // CBrowserInfoList::GetNextSelected
//------------------------------------------------------------------
// CLanguageInfoList
//
POSITION
CLanguageInfoList::GetHeadSelectedPosition(
) const
/*++
Routine Description:
Get the first selected browser. It works like GetHeadPosition()
Arguments:
N/A
Return Value:
POSITION - A POSITION value that can be used for iteration or
object pointer retrieval; NULL if the list is empty
--*/
{
POSITION Pos = GetHeadPosition();
while(Pos)
{
POSITION PosCurrent = Pos;
if(GetNext(Pos).IsSelected())
{
return PosCurrent;
break;
}
}
return NULL;
} // CLanguageInfo::GetHeadSelectedPosition
CLanguageInfo&
CLanguageInfoList::GetNextSelected(
POSITION& Pos
)
/*++
Routine Description:
Get next selected language. It works like GetNext()
Arguments:
Pos - A reference to a POSITION value returned by
a previous GetNext, GetHeadPosition, GetNextSelected,
or other member function call
Return Value:
CLanguageInfo& - returns a reference to an element of the list
--*/
{
CLanguageInfo& Info = GetNext(Pos);
while(Pos)
{
POSITION PosCurrent = Pos;
if(GetNext(Pos).IsSelected())
{
Pos = PosCurrent;
break;
}
}
return Info;
} // CLanguageInfoList::GetNextSelected
//------------------------------------------------------------------
// CUserOptions
//
void
CUserOptions::AddDirectory(
const CVirtualDirInfo& Info
)
/*++
Routine Description:
Add this virtual directory to the link list.
Arguments:
Info - virtual directory infomation to add
Return Value:
N/A
--*/
{
// Finally, add it to the array
try
{
m_VirtualDirInfoList.AddTail(Info);
}
catch(CMemoryException* pEx)
{
pEx->Delete();
}
} // CUserOptions::AddDirectory
void
CUserOptions::AddURL(
LPCTSTR lpszURL
)
/*++
Routine Description:
Add this URL to the link list.
Arguments:
lpszURL - URL to add
Return Value:
N/A
--*/
{
CString strURL(lpszURL);
// Change '\' to '/'
CLinkCheckerMgr::ChangeBackSlash(strURL);
try
{
m_strURLList.AddTail(strURL);
}
catch(CMemoryException* pEx)
{
pEx->Delete();
}
} // CUserOptions::AddURL
void
CUserOptions::AddAvailableBrowser(
const CBrowserInfo& Info
)
/*++
Routine Description:
Add this browser information to the available list.
Arguments:
Info - Browser information to add
Return Value:
N/A
--*/
{
try
{
m_BrowserInfoList.AddTail(Info);
}
catch(CMemoryException* pEx)
{
pEx->Delete();
}
} // CUserOptions::AddAvailableBrowser
void
CUserOptions::AddAvailableLanguage(
const CLanguageInfo& Info
)
/*++
Routine Description:
Add this language information to the available list.
Arguments:
Info - Language information to add
Return Value:
N/A
--*/
{
try
{
m_LanguageInfoList.AddTail(Info);
}
catch(CMemoryException* pEx)
{
pEx->Delete();
}
} // CUserOptions::AddAvailableLanguage
void
CUserOptions::SetOptions(
BOOL fCheckLocalLinks,
BOOL fCheckRemoteLinks,
BOOL fLogToFile,
const CString& strLogFilename,
BOOL fLogToEventMgr
)
/*++
Routine Description:
Set the user options in the main dialog
Arguments:
N/A
Return Value:
N/A
--*/
{
m_fCheckLocalLinks = fCheckLocalLinks;
m_fCheckRemoteLinks = fCheckRemoteLinks;
m_fLogToFile= fLogToFile;
m_strLogFilename = strLogFilename;
m_fLogToEventMgr = fLogToEventMgr;
} // CUserOptions::SetOptions
void
CUserOptions::SetAthenication(
const CString& strNTUsername,
const CString& strNTPassword,
const CString& strBasicUsername,
const CString& strBasicPassword
)
/*++
Routine Description:
Set NTLM & HTTP basic athenications.
Arguments:
N/A
Return Value:
N/A
--*/
{
m_strNTUsername = strNTUsername;
m_strNTPassword = strNTPassword;
m_strBasicUsername = strBasicUsername;
m_strBasicPassword = strBasicPassword;
} // CUserOptions::SetAthenication
// Get the hostname
const CString&
CUserOptions::GetHostName(
)
/*++
Routine Description:
Get the hostname.
Arguments:
N/A
Return Value:
N/A
--*/
{
// If the hostname does not exists, it means the user pass in
// a list of URL to link checker. (Server nane is not required for
// this case.) Now, we can get the hostname from the URL
if(m_strHostName.IsEmpty() && m_strURLList.GetCount() > 0)
{
// Set up the current hostname string
LPTSTR lpszHostName = m_strHostName.GetBuffer(INTERNET_MAX_HOST_NAME_LENGTH);
URL_COMPONENTS urlcomp;
memset(&urlcomp, 0, sizeof(urlcomp));
urlcomp.dwStructSize = sizeof(urlcomp);
urlcomp.lpszHostName = lpszHostName;
urlcomp.dwHostNameLength = INTERNET_MAX_HOST_NAME_LENGTH;
// Crack it
VERIFY(CWininet::InternetCrackUrlA(
m_strURLList.GetHead(), m_strURLList.GetHead().GetLength(), NULL, &urlcomp));
m_strHostName.ReleaseBuffer();
}
return m_strHostName;
} // CUserOptions::GetHostName
void
CUserOptions::PreProcessServerName(
)
/*++
Routine Description:
Preprocess the server name such that for server "\\hostname"
- GetServerName() return \\hostname
- GetHostName() return hostname
Arguments:
N/A
Return Value:
N/A
--*/
{
// Change everything to lower case
m_strHostName.MakeLower();
// Change '\' to '/'
CLinkCheckerMgr::ChangeBackSlash(m_strHostName);
// Make sure m_strHostName is not in front of localhost
const CString strBackSlash(_T("//"));
if( m_strHostName.Find(strBackSlash) == 0 )
{
m_strHostName = m_strHostName.Mid(strBackSlash.GetLength());
}
} // CUserOptions::PreProcessServerName