688 lines
12 KiB
C++
688 lines
12 KiB
C++
|
/*++
|
|||
|
|
|||
|
<EFBFBD> 1998 Seagate Software, Inc. All rights reserved
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
RmsClien.cpp
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Implementation of CRmsClient
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Brian Dodd [brian] 15-Nov-1996
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
|
|||
|
#include "RmsClien.h"
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::CompareTo(
|
|||
|
IN IUnknown *pCollectable,
|
|||
|
OUT SHORT *pResult
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IWsbCollectable::CompareTo
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = E_FAIL;
|
|||
|
SHORT result = 1;
|
|||
|
|
|||
|
WsbTraceIn( OLESTR("CRmsClient::CompareTo"), OLESTR("") );
|
|||
|
|
|||
|
try {
|
|||
|
|
|||
|
// Validate arguments - Okay if pResult is NULL
|
|||
|
WsbAssertPointer( pCollectable );
|
|||
|
|
|||
|
CComQIPtr<IRmsClient, &IID_IRmsClient> pClient = pCollectable;
|
|||
|
WsbAssertPointer( pClient );
|
|||
|
|
|||
|
CComQIPtr<IRmsComObject, &IID_IRmsComObject> pObject = pCollectable;
|
|||
|
WsbAssertPointer( pObject );
|
|||
|
|
|||
|
switch ( m_findBy ) {
|
|||
|
|
|||
|
case RmsFindByClassId:
|
|||
|
{
|
|||
|
|
|||
|
CLSID ownerClassId;
|
|||
|
|
|||
|
// Get owner class Id
|
|||
|
WsbAffirmHr(pClient->GetOwnerClassId( &ownerClassId ) );
|
|||
|
|
|||
|
if ( m_ownerClassId == ownerClassId ) {
|
|||
|
|
|||
|
// Owner ClassId matches
|
|||
|
hr = S_OK;
|
|||
|
result = 0;
|
|||
|
|
|||
|
}
|
|||
|
else {
|
|||
|
hr = S_FALSE;
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case RmsFindByName:
|
|||
|
{
|
|||
|
|
|||
|
CWsbBstrPtr name;
|
|||
|
CWsbBstrPtr password;
|
|||
|
|
|||
|
// Get name
|
|||
|
WsbAffirmHr(pClient->GetName( &name ) );
|
|||
|
|
|||
|
if ( m_Name == name ) {
|
|||
|
|
|||
|
// Names match, now try password
|
|||
|
|
|||
|
// Get password
|
|||
|
WsbAffirmHr(pClient->GetPassword( &password ) );
|
|||
|
|
|||
|
if ( m_password == password ) {
|
|||
|
|
|||
|
// Passwords match
|
|||
|
hr = S_OK;
|
|||
|
result = 0;
|
|||
|
|
|||
|
}
|
|||
|
else {
|
|||
|
hr = S_FALSE;
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else {
|
|||
|
hr = S_FALSE;
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case RmsFindByObjectId:
|
|||
|
default:
|
|||
|
|
|||
|
// Do CompareTo for object
|
|||
|
hr = CRmsComObject::CompareTo( pCollectable, &result );
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
WsbCatch(hr);
|
|||
|
|
|||
|
if ( SUCCEEDED(hr) && (0 != pResult) ){
|
|||
|
*pResult = result;
|
|||
|
}
|
|||
|
|
|||
|
WsbTraceOut( OLESTR("CRmsClient::CompareTo"),
|
|||
|
OLESTR("hr = <%ls>, result = <%ls>"),
|
|||
|
WsbHrAsString( hr ), WsbPtrToShortAsString( pResult ) );
|
|||
|
|
|||
|
return hr;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
CRmsClient::FinalConstruct(
|
|||
|
void
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
CComObjectRoot::FinalConstruct
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
|
|||
|
try {
|
|||
|
WsbAssertHr(CWsbObject::FinalConstruct());
|
|||
|
|
|||
|
// Initialize data
|
|||
|
m_ownerClassId = GUID_NULL;
|
|||
|
|
|||
|
m_password = RMS_UNDEFINED_STRING;
|
|||
|
|
|||
|
m_sizeofInfo = 0;
|
|||
|
|
|||
|
// memset(m_info, 0, MaxInfo);
|
|||
|
|
|||
|
m_verifierClass = GUID_NULL;
|
|||
|
|
|||
|
m_portalClass = GUID_NULL;
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::GetClassID(
|
|||
|
OUT CLSID* pClsid
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IPersist::GetClassID
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
|
|||
|
WsbTraceIn(OLESTR("CRmsClient::GetClassID"), OLESTR(""));
|
|||
|
|
|||
|
try {
|
|||
|
|
|||
|
WsbAssert(0 != pClsid, E_POINTER);
|
|||
|
|
|||
|
*pClsid = CLSID_CRmsClient;
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
WsbTraceOut(OLESTR("CRmsClient::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::GetSizeMax(
|
|||
|
OUT ULARGE_INTEGER* pcbSize
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IPersistStream::GetSizeMax
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = E_NOTIMPL;
|
|||
|
|
|||
|
// ULONG nameLen;
|
|||
|
// ULONG passwordLen;
|
|||
|
|
|||
|
WsbTraceIn(OLESTR("CRmsClient::GetSizeMax"), OLESTR(""));
|
|||
|
|
|||
|
// try {
|
|||
|
// WsbAssert(0 != pcbSize, E_POINTER);
|
|||
|
|
|||
|
// nameLen = SysStringByteLen(m_name);
|
|||
|
// passwordLen = SysStringByteLen(m_password);
|
|||
|
|
|||
|
// // set up maximum size
|
|||
|
// pcbSize->QuadPart = WsbPersistSizeOf(CLSID) + // m_ownerClassId
|
|||
|
// WsbPersistSizeOf(LONG) + // length of m_name
|
|||
|
// nameLen + // m_name
|
|||
|
// WsbPersistSizeOf(LONG) + // length of m_password
|
|||
|
// nameLen + // m_password
|
|||
|
//// WsbPersistSizeOf(SHORT) + // m_sizeofInfo
|
|||
|
//// MaxInfo + // m_info
|
|||
|
// WsbPersistSizeOf(CLSID) + // m_sizeofInfo
|
|||
|
// WsbPersistSizeOf(CLSID); // m_sizeofInfo
|
|||
|
|
|||
|
|
|||
|
// } WsbCatch(hr);
|
|||
|
|
|||
|
WsbTraceOut(OLESTR("CRmsClient::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pcbSize));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::Load(
|
|||
|
IN IStream* pStream
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IPersistStream::Load
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
ULONG ulBytes = 0;
|
|||
|
|
|||
|
WsbTraceIn(OLESTR("CRmsClient::Load"), OLESTR(""));
|
|||
|
|
|||
|
try {
|
|||
|
|
|||
|
WsbAssert(0 != pStream, E_POINTER);
|
|||
|
|
|||
|
WsbAffirmHr(CRmsComObject::Load(pStream));
|
|||
|
|
|||
|
// Read value
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_ownerClassId));
|
|||
|
|
|||
|
WsbAffirmHr(WsbBstrFromStream(pStream, &m_password));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_sizeofInfo));
|
|||
|
|
|||
|
// WsbAffirmHr(WsbLoadFromStream(pStream, &m_info));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_verifierClass));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_portalClass));
|
|||
|
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
WsbTraceOut(OLESTR("CRmsClient::Load"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::Save(
|
|||
|
IN IStream* pStream,
|
|||
|
IN BOOL clearDirty
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IPersistStream::Save
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
ULONG ulBytes = 0;
|
|||
|
|
|||
|
WsbTraceIn(OLESTR("CRmsClient::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
|
|||
|
|
|||
|
try {
|
|||
|
WsbAssert(0 != pStream, E_POINTER);
|
|||
|
|
|||
|
WsbAffirmHr(CRmsComObject::Save(pStream, clearDirty));
|
|||
|
|
|||
|
// Save value
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_ownerClassId));
|
|||
|
|
|||
|
WsbAffirmHr(WsbBstrToStream(pStream, m_password));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_sizeofInfo));
|
|||
|
|
|||
|
// WsbAffirmHr(WsbSaveToStream(pStream, m_info));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_verifierClass));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_portalClass));
|
|||
|
|
|||
|
|
|||
|
// Do we need to clear the dirty bit?
|
|||
|
if (clearDirty) {
|
|||
|
m_isDirty = FALSE;
|
|||
|
}
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
WsbTraceOut(OLESTR("CRmsClient::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::Test(
|
|||
|
OUT USHORT *pPassed,
|
|||
|
OUT USHORT *pFailed
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IWsbTestable::Test
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
|
|||
|
CComPtr<IRmsClient> pClient1;
|
|||
|
CComPtr<IRmsClient> pClient2;
|
|||
|
|
|||
|
CComPtr<IPersistFile> pFile1;
|
|||
|
CComPtr<IPersistFile> pFile2;
|
|||
|
|
|||
|
CLSID clsidWork1;
|
|||
|
CLSID clsidWork2;
|
|||
|
|
|||
|
CWsbBstrPtr bstrVal1 = OLESTR("5A5A5A");
|
|||
|
CWsbBstrPtr bstrWork1;
|
|||
|
CWsbBstrPtr bstrWork2;
|
|||
|
|
|||
|
|
|||
|
WsbTraceIn(OLESTR("CRmsClient::Test"), OLESTR(""));
|
|||
|
|
|||
|
try {
|
|||
|
// Get the Client interface.
|
|||
|
hr = S_OK;
|
|||
|
|
|||
|
try {
|
|||
|
WsbAssertHr(((IUnknown*) (IRmsClient*) this)->QueryInterface(IID_IRmsClient, (void**) &pClient1));
|
|||
|
|
|||
|
// Test SetOwnerClassId & GetOwnerClassId
|
|||
|
clsidWork1 = CLSID_NULL;
|
|||
|
|
|||
|
SetOwnerClassId(clsidWork1);
|
|||
|
|
|||
|
GetOwnerClassId(&clsidWork2);
|
|||
|
|
|||
|
if(clsidWork1 == clsidWork2){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetName & GetName interface
|
|||
|
bstrWork1 = bstrVal1;
|
|||
|
|
|||
|
SetName(bstrWork1);
|
|||
|
|
|||
|
GetName(&bstrWork2);
|
|||
|
|
|||
|
if (bstrWork1 == bstrWork2){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetPassword & GetPassword interface
|
|||
|
bstrWork1 = bstrVal1;
|
|||
|
|
|||
|
SetPassword(bstrWork1);
|
|||
|
|
|||
|
GetPassword(&bstrWork2);
|
|||
|
|
|||
|
if (bstrWork1 == bstrWork2){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetVerifierClass & GetVerifierClass
|
|||
|
clsidWork1 = CLSID_NULL;
|
|||
|
|
|||
|
SetVerifierClass(clsidWork1);
|
|||
|
|
|||
|
GetVerifierClass(&clsidWork2);
|
|||
|
|
|||
|
if(clsidWork1 == clsidWork2){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetPortalClass & GetPortalClass
|
|||
|
clsidWork1 = CLSID_NULL;
|
|||
|
|
|||
|
SetPortalClass(clsidWork1);
|
|||
|
|
|||
|
GetPortalClass(&clsidWork2);
|
|||
|
|
|||
|
if(clsidWork1 == clsidWork2){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
// Tally up the results
|
|||
|
|
|||
|
hr = S_OK;
|
|||
|
if (*pFailed) {
|
|||
|
hr = S_FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
WsbTraceOut(OLESTR("CRmsClient::Test"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::GetOwnerClassId(
|
|||
|
CLSID *pClassId
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::GetOwnerClassId
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pClassId = m_ownerClassId;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::SetOwnerClassId(
|
|||
|
CLSID classId
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::SetOwnerClassId
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_ownerClassId = classId;
|
|||
|
m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::GetName(
|
|||
|
BSTR *pName
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::GetName
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
WsbAssertPointer (pName);
|
|||
|
|
|||
|
m_Name. CopyToBstr (pName);
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::SetName(
|
|||
|
BSTR name
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::SetName
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_Name = name;
|
|||
|
m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::GetPassword(
|
|||
|
BSTR *pPassword
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::GetPassword
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
WsbAssertPointer (pPassword);
|
|||
|
|
|||
|
m_password. CopyToBstr (pPassword);
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::SetPassword(
|
|||
|
BSTR password
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::SetPassword
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_password = password;
|
|||
|
m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::GetInfo(
|
|||
|
UCHAR *pInfo,
|
|||
|
SHORT *pSize
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::GetInfo
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
memmove (pInfo, m_info, m_sizeofInfo);
|
|||
|
*pSize = m_sizeofInfo;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::SetInfo(
|
|||
|
UCHAR *pInfo,
|
|||
|
SHORT size
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::SetInfo
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
memmove (m_info, pInfo, size);
|
|||
|
m_sizeofInfo = size;
|
|||
|
m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::GetVerifierClass(
|
|||
|
CLSID *pClassId
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::GetVerifierClass
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pClassId = m_verifierClass;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::SetVerifierClass(
|
|||
|
CLSID classId
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::GetVerifierClass
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_verifierClass = classId;
|
|||
|
m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::GetPortalClass(
|
|||
|
CLSID *pClassId
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::GetPortalClass
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pClassId = m_portalClass;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsClient::SetPortalClass(
|
|||
|
CLSID classId
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsClient::SetPortalClass
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_portalClass = classId;
|
|||
|
m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|