windows-nt/Source/XPSP1/NT/admin/pchealth/upload/server/isapi/wrapper.cpp
2020-09-26 16:20:57 +08:00

204 lines
4.6 KiB
C++

/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
Wrapper.cpp
Abstract:
This file contains the implementation of the COM wrapper classes,
used for interfacing with the Custom Providers.
Revision History:
Davide Massarenti (Dmassare) 04/25/2000
created
******************************************************************************/
#include "stdafx.h"
////////////////////////////////////////////////////////////////////////////////
MPCServerCOMWrapper::MPCServerCOMWrapper( /*[in]*/ MPCServer* mpcsServer )
{
m_mpcsServer = mpcsServer; // MPCServer* m_mpcsServer;
}
MPCServerCOMWrapper::~MPCServerCOMWrapper()
{
}
STDMETHODIMP MPCServerCOMWrapper::GetRequestVariable( /*[in]*/ BSTR bstrName, /*[out]*/ BSTR *pbstrVal )
{
__ULT_FUNC_ENTRY( "MPCServerCOMWrapper::GetRequestVariable" );
USES_CONVERSION;
HRESULT hr;
MPC::wstring szValue;
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_STRING_NOT_EMPTY(bstrName);
__MPC_PARAMCHECK_POINTER_AND_SET(pbstrVal,NULL);
__MPC_PARAMCHECK_END();
__MPC_EXIT_IF_METHOD_FAILS(hr, m_mpcsServer->m_hcCallback->GetServerVariable( W2A( bstrName ), szValue ));
hr = MPC::GetBSTR( szValue.c_str(), pbstrVal );
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
STDMETHODIMP MPCServerCOMWrapper::AbortTransfer()
{
__ULT_FUNC_ENTRY( "MPCServerCOMWrapper::AbortTransfer" );
m_mpcsServer->SetResponse( UploadLibrary::UL_RESPONSE_DENIED );
m_mpcsServer->m_fTerminated = true;
__ULT_FUNC_EXIT(S_OK);
}
STDMETHODIMP MPCServerCOMWrapper::CompleteTransfer( /*[in]*/ IStream* data )
{
__ULT_FUNC_ENTRY( "MPCServerCOMWrapper::CompleteTransfer" );
HRESULT hr;
__MPC_EXIT_IF_METHOD_FAILS(hr, m_mpcsServer->CustomProvider_SetResponse( data ));
m_mpcsServer->m_fTerminated = true;
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
MPCSessionCOMWrapper::MPCSessionCOMWrapper( /*[in]*/ MPCSession* mpcsSession )
{
m_mpcsSession = mpcsSession; // MPCSession* m_mpcsSession;
}
MPCSessionCOMWrapper::~MPCSessionCOMWrapper()
{
}
////////////////////
STDMETHODIMP MPCSessionCOMWrapper::get_Client( /*[out]*/ BSTR *pVal )
{
CComBSTR tmp( m_mpcsSession->GetClient()->GetServer()->m_crClientRequest.sigClient.guidMachineID );
return MPC::GetBSTR( tmp, pVal );
}
STDMETHODIMP MPCSessionCOMWrapper::get_Command( /*[out]*/ DWORD *pVal )
{
if(pVal == NULL) return E_POINTER;
*pVal = m_mpcsSession->GetClient()->GetServer()->m_crClientRequest.dwCommand;
return S_OK;
}
STDMETHODIMP MPCSessionCOMWrapper::get_ProviderID( /*[out]*/ BSTR *pVal )
{
return MPC::GetBSTR( m_mpcsSession->m_szProviderID.c_str(), pVal );
}
STDMETHODIMP MPCSessionCOMWrapper::get_Username( /*[out]*/ BSTR *pVal )
{
return MPC::GetBSTR( m_mpcsSession->m_szUsername.c_str(), pVal );
}
STDMETHODIMP MPCSessionCOMWrapper::get_JobID( /*[out]*/ BSTR *pVal )
{
return MPC::GetBSTR( m_mpcsSession->m_szJobID.c_str(), pVal );
}
STDMETHODIMP MPCSessionCOMWrapper::get_SizeAvailable( /*[out]*/ DWORD *pVal )
{
if(pVal == NULL) return E_POINTER;
*pVal = m_mpcsSession->m_dwCurrentSize;
return S_OK;
}
STDMETHODIMP MPCSessionCOMWrapper::get_SizeTotal( /*[out]*/ DWORD *pVal )
{
if(pVal == NULL) return E_POINTER;
*pVal = m_mpcsSession->m_dwTotalSize;
return S_OK;
}
STDMETHODIMP MPCSessionCOMWrapper::get_SizeOriginal( /*[out]*/ DWORD *pVal )
{
if(pVal == NULL) return E_POINTER;
*pVal = m_mpcsSession->m_dwOriginalSize;
return S_OK;
}
STDMETHODIMP MPCSessionCOMWrapper::get_Data( /*[out]*/ IStream* *pStm )
{
__ULT_FUNC_ENTRY( "MPCServerCOMWrapper::GetRequestVariable" );
HRESULT hr;
HANDLE hfFile = NULL;
CComPtr<MPC::FileStream> stream;
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_POINTER_AND_SET(pStm,NULL);
__MPC_PARAMCHECK_END();
__MPC_EXIT_IF_METHOD_FAILS(hr, m_mpcsSession->OpenFile( hfFile, 0, false ));
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &stream ));
__MPC_EXIT_IF_METHOD_FAILS(hr, stream->InitForRead( L"", hfFile ));
__MPC_EXIT_IF_METHOD_FAILS(hr, stream.QueryInterface( pStm ));
__ULT_FUNC_CLEANUP;
if(hfFile) ::CloseHandle( hfFile );
__ULT_FUNC_EXIT(hr);
}
STDMETHODIMP MPCSessionCOMWrapper::get_ProviderData( /*[out]*/ DWORD *pVal )
{
if(pVal == NULL) return E_POINTER;
*pVal = m_mpcsSession->m_dwProviderData;
return S_OK;
}
STDMETHODIMP MPCSessionCOMWrapper::put_ProviderData( /*[in]*/ DWORD newVal )
{
m_mpcsSession->m_dwProviderData = newVal;
m_mpcsSession->m_fDirty = true;
return S_OK;
}