420 lines
11 KiB
C++
420 lines
11 KiB
C++
/******************************************************************************
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
ISAPIprovider.cpp
|
|
|
|
Abstract:
|
|
This file contains the implementation of the CISAPIprovider class,
|
|
the support class for accessing and modifying the configuration of the
|
|
ISAPI extension used by the Upload Library.
|
|
|
|
Revision History:
|
|
Davide Massarenti (Dmassare) 04/28/99
|
|
created
|
|
|
|
******************************************************************************/
|
|
|
|
#include "stdafx.h"
|
|
|
|
static const WCHAR text_FINAL_DESTINATIONS[] = L"FINAL_DESTINATIONS";
|
|
static const WCHAR text_MAX_JOBS_PER_DAY [] = L"MAX_JOBS_PER_DAY" ;
|
|
static const WCHAR text_MAX_BYTES_PER_DAY [] = L"MAX_BYTES_PER_DAY" ;
|
|
static const WCHAR text_MAX_JOB_SIZE [] = L"MAX_JOB_SIZE" ;
|
|
static const WCHAR text_AUTHENTICATED [] = L"AUTHENTICATED" ;
|
|
static const WCHAR text_PROCESSING_MODE [] = L"PROCESSING_MODE" ;
|
|
static const WCHAR text_LOGON_URL [] = L"LOGON_URL" ;
|
|
static const WCHAR text_PROVIDER_CLASS [] = L"PROVIDER_CLASS" ;
|
|
|
|
|
|
CISAPIprovider::CISAPIprovider()
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIprovider::CISAPIprovider" );
|
|
|
|
// MPC::wstring m_szName;
|
|
//
|
|
// PathList m_lstFinalDestinations;
|
|
//
|
|
m_dwMaxJobsPerDay = 100; // DWORD m_dwMaxJobsPerDay;
|
|
m_dwMaxBytesPerDay = 10*1024*1024; // DWORD m_dwMaxBytesPerDay;
|
|
m_dwMaxJobSize = 2*1024*1024; // DWORD m_dwMaxJobSize;
|
|
//
|
|
m_fAuthenticated = FALSE; // BOOL m_fAuthenticated;
|
|
m_fProcessingMode = 0; // DWORD m_fProcessingMode;
|
|
//
|
|
// MPC::wstring m_szLogonURL;
|
|
// MPC::wstring m_szProviderGUID;
|
|
}
|
|
|
|
CISAPIprovider::CISAPIprovider( /*[in]*/ MPC::wstring szName )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIprovider::CISAPIprovider" );
|
|
|
|
|
|
m_szName = szName; // MPC::wstring m_szName;
|
|
//
|
|
// PathList m_lstFinalDestinations;
|
|
//
|
|
m_dwMaxJobsPerDay = 100; // DWORD m_dwMaxJobsPerDay;
|
|
m_dwMaxBytesPerDay = 10*1024*1024; // DWORD m_dwMaxBytesPerDay;
|
|
m_dwMaxJobSize = 2*1024*1024; // DWORD m_dwMaxJobSize;
|
|
//
|
|
m_fAuthenticated = FALSE; // BOOL m_fAuthenticated;
|
|
m_fProcessingMode = 0; // DWORD m_fProcessingMode;
|
|
//
|
|
// MPC::wstring m_szLogonURL;
|
|
// MPC::wstring m_szProviderGUID;
|
|
}
|
|
|
|
bool CISAPIprovider::operator==( /*[in]*/ const MPC::wstring& rhs )
|
|
{
|
|
__ULT_FUNC_ENTRY("CISAPIprovider::operator==");
|
|
|
|
MPC::NocaseCompare cmp;
|
|
bool fRes;
|
|
|
|
|
|
fRes = cmp( m_szName, rhs );
|
|
|
|
|
|
__ULT_FUNC_EXIT(fRes);
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT CISAPIprovider::Load( /*[in]*/ MPC::RegKey& rkBase )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIprovider::Load" );
|
|
|
|
HRESULT hr;
|
|
MPC::RegKey rkRoot;
|
|
CComVariant vValue;
|
|
bool fFound;
|
|
|
|
|
|
m_lstFinalDestinations.clear();
|
|
|
|
//
|
|
// If the registry key doesn't exist, simply exit.
|
|
//
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkBase.SubKey( m_szName.c_str(), rkRoot ));
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.Exists( fFound ));
|
|
if(fFound == false)
|
|
{
|
|
__MPC_SET_ERROR_AND_EXIT(hr, S_OK);
|
|
}
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_MAX_JOBS_PER_DAY ));
|
|
if(fFound && vValue.vt == VT_I4) m_dwMaxJobsPerDay = vValue.lVal;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_MAX_BYTES_PER_DAY ));
|
|
if(fFound && vValue.vt == VT_I4) m_dwMaxBytesPerDay = vValue.lVal;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_MAX_JOB_SIZE ));
|
|
if(fFound && vValue.vt == VT_I4) m_dwMaxJobSize = vValue.lVal;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_AUTHENTICATED ));
|
|
if(fFound && vValue.vt == VT_I4) m_fAuthenticated = vValue.lVal;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_PROCESSING_MODE ));
|
|
if(fFound && vValue.vt == VT_I4) m_fProcessingMode = vValue.lVal;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_LOGON_URL ));
|
|
if(fFound && vValue.vt == VT_BSTR) m_szLogonURL = SAFEBSTR( vValue.bstrVal );
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_PROVIDER_CLASS ));
|
|
if(fFound && vValue.vt == VT_BSTR) m_szProviderGUID = SAFEBSTR( vValue.bstrVal );
|
|
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_FINAL_DESTINATIONS ));
|
|
if(fFound && vValue.vt == VT_BSTR)
|
|
{
|
|
//
|
|
// Split the registry value, a semicolon-separated list of paths, into individual paths.
|
|
//
|
|
MPC::wstring szFinalDestinations = SAFEBSTR( vValue.bstrVal );
|
|
MPC::wstring::size_type iPos = 0;
|
|
MPC::wstring::size_type iEnd;
|
|
|
|
while(1)
|
|
{
|
|
iEnd = szFinalDestinations.find( L";", iPos );
|
|
|
|
if(iEnd == MPC::string::npos) // Last component.
|
|
{
|
|
m_lstFinalDestinations.push_back( MPC::wstring( &szFinalDestinations[iPos] ) );
|
|
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
m_lstFinalDestinations.push_back( MPC::wstring( &szFinalDestinations[iPos], &szFinalDestinations[iEnd] ) );
|
|
|
|
iPos = iEnd+1;
|
|
}
|
|
}
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
|
|
HRESULT CISAPIprovider::Save( /*[in]*/ MPC::RegKey& rkBase )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIProvider::Save" );
|
|
|
|
HRESULT hr;
|
|
MPC::RegKey rkRoot;
|
|
CComVariant vValue;
|
|
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkBase.SubKey( m_szName.c_str(), rkRoot ));
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.Create( ));
|
|
|
|
|
|
|
|
vValue = (long)m_dwMaxJobsPerDay;
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_MAX_JOBS_PER_DAY ));
|
|
|
|
vValue = (long)m_dwMaxBytesPerDay;
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_MAX_BYTES_PER_DAY ));
|
|
|
|
vValue = (long)m_dwMaxJobSize;
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_MAX_JOB_SIZE ));
|
|
|
|
vValue = (long)m_fAuthenticated;
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_AUTHENTICATED ));
|
|
|
|
vValue = (long)m_fProcessingMode;
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_PROCESSING_MODE ));
|
|
|
|
vValue = m_szLogonURL.c_str();
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_LOGON_URL ));
|
|
|
|
vValue = m_szProviderGUID.c_str();
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_PROVIDER_CLASS ));
|
|
|
|
|
|
{
|
|
MPC::wstring szFinalDestinations;
|
|
PathIter it = m_lstFinalDestinations.begin();
|
|
|
|
while(it != m_lstFinalDestinations.end())
|
|
{
|
|
szFinalDestinations.append( *it++ );
|
|
|
|
if(it != m_lstFinalDestinations.end()) szFinalDestinations.append( L";" );
|
|
}
|
|
|
|
if(szFinalDestinations.length() != 0)
|
|
{
|
|
vValue = szFinalDestinations.c_str();
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_FINAL_DESTINATIONS ));
|
|
}
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT CISAPIprovider::GetLocations( /*[out]*/ PathIter& itBegin ,
|
|
/*[out]*/ PathIter& itEnd )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIprovider::GetLocations" );
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
itBegin = m_lstFinalDestinations.begin();
|
|
itEnd = m_lstFinalDestinations.end ();
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
HRESULT CISAPIprovider::NewLocation( /*[out]*/ PathIter& itNew ,
|
|
/*[in] */ const MPC::wstring& szPath )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIprovider::NewLocation" );
|
|
|
|
HRESULT hr;
|
|
bool fFound;
|
|
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, GetLocation( itNew, fFound, szPath ));
|
|
if(fFound == false)
|
|
{
|
|
itNew = m_lstFinalDestinations.insert( m_lstFinalDestinations.end(), szPath );
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
HRESULT CISAPIprovider::GetLocation( /*[out]*/ PathIter& itOld ,
|
|
/*[out]*/ bool& fFound ,
|
|
/*[in] */ const MPC::wstring& szPath )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIprovider::GetLocation" );
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
itOld = std::find( m_lstFinalDestinations.begin(), m_lstFinalDestinations.end(), szPath );
|
|
if(itOld == m_lstFinalDestinations.end())
|
|
{
|
|
fFound = false;
|
|
}
|
|
else
|
|
{
|
|
fFound = true;
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
HRESULT CISAPIprovider::DelLocation( /*[in]*/ PathIter& itOld )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIprovider::DelLocation" );
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
m_lstFinalDestinations.erase( itOld );
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT CISAPIprovider::get_Name( /*[out]*/ MPC::wstring& szName )
|
|
{
|
|
szName = m_szName;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::get_MaxJobsPerDay( /*[out]*/ DWORD& dwMaxJobsPerDay )
|
|
{
|
|
dwMaxJobsPerDay = m_dwMaxJobsPerDay;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::get_MaxBytesPerDay( /*[out]*/ DWORD& dwMaxBytesPerDay )
|
|
{
|
|
dwMaxBytesPerDay = m_dwMaxBytesPerDay;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::get_MaxJobSize( /*[out]*/ DWORD& dwMaxJobSize )
|
|
{
|
|
dwMaxJobSize = m_dwMaxJobSize;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::get_Authenticated( /*[out]*/ BOOL& fAuthenticated )
|
|
{
|
|
fAuthenticated = m_fAuthenticated;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::get_ProcessingMode( /*[out]*/ DWORD& fProcessingMode )
|
|
{
|
|
fProcessingMode = m_fProcessingMode;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::get_LogonURL( /*[out]*/ MPC::wstring& szLogonURL )
|
|
{
|
|
szLogonURL = m_szLogonURL;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::get_ProviderGUID( /*[out]*/ MPC::wstring& szProviderGUID )
|
|
{
|
|
szProviderGUID = m_szProviderGUID;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
////////////////////////////////////////
|
|
|
|
HRESULT CISAPIprovider::put_MaxJobsPerDay( /*[in]*/ DWORD dwMaxJobsPerDay )
|
|
{
|
|
m_dwMaxJobsPerDay = dwMaxJobsPerDay;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::put_MaxBytesPerDay( /*[in]*/ DWORD dwMaxBytesPerDay )
|
|
{
|
|
m_dwMaxBytesPerDay = dwMaxBytesPerDay;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::put_MaxJobSize( /*[in]*/ DWORD dwMaxJobSize )
|
|
{
|
|
m_dwMaxJobSize = dwMaxJobSize;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::put_Authenticated( /*[in]*/ BOOL fAuthenticated )
|
|
{
|
|
m_fAuthenticated = fAuthenticated;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::put_ProcessingMode( /*[in]*/ DWORD fProcessingMode )
|
|
{
|
|
m_fProcessingMode = fProcessingMode;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::put_LogonURL( /*[in]*/ const MPC::wstring& szLogonURL )
|
|
{
|
|
m_szLogonURL = szLogonURL;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CISAPIprovider::put_ProviderGUID( /*[in]*/ const MPC::wstring& szProviderGUID )
|
|
{
|
|
m_szProviderGUID = szProviderGUID;
|
|
|
|
return S_OK;
|
|
}
|