You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
820 lines
20 KiB
820 lines
20 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
|
//
|
|
// File: agent.CXX
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 11-21-1996 JohannP (Johann Posch) Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
#include <agent.h>
|
|
|
|
COInetAdvisor *g_pCOInetAdvisor = 0;
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: GetOInetAdvisor
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [dwMode] --
|
|
// [ppOInetAdvisor] --
|
|
// [dwReserved] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-07-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
HRESULT GetOInetAdvisor(DWORD dwMode, IOInetAdvisor **ppOInetAdvisor, DWORD dwReserved)
|
|
{
|
|
|
|
HRESULT hr = NOERROR;
|
|
TransDebugOut((DEB_SESSION, "API _IN GetOInetAdvisor\n"));
|
|
|
|
TransAssert(( (ppOInetAdvisor != NULL) && (dwMode == 0) && (dwReserved == 0) && "Invalid argument"));
|
|
|
|
if (ppOInetAdvisor && !dwMode && !dwReserved)
|
|
{
|
|
/*
|
|
if (g_pCOInetAdvisor == 0)
|
|
{
|
|
g_pCOInetAdvisor = new COInetAdvisor();
|
|
}
|
|
|
|
if (g_pCOInetAdvisor)
|
|
{
|
|
g_pCOInetAdvisor->AddRef();
|
|
*ppOInetAdvisor = g_pCOInetAdvisor;
|
|
}
|
|
else
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
*/
|
|
}
|
|
else
|
|
{
|
|
hr = E_INVALIDARG;
|
|
}
|
|
|
|
TransDebugOut((DEB_SESSION, "API OUT GetOInetAdvisor (hr:%lx) \n", hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetItem::QueryInterface
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [riid] --
|
|
// [ppvObj] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetItem::QueryInterface(REFIID riid, void **ppvObj)
|
|
{
|
|
VDATEPTROUT(ppvObj, void *);
|
|
VDATETHIS(this);
|
|
HRESULT hr = NOERROR;
|
|
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetItem::QueryInterface\n", this));
|
|
|
|
*ppvObj = NULL;
|
|
if ((riid == IID_IUnknown) || (riid == IID_IOInetAdvisor) )
|
|
{
|
|
*ppvObj = this;
|
|
AddRef();
|
|
}
|
|
else
|
|
{
|
|
hr = E_NOINTERFACE;
|
|
}
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetItem::QueryInterface (hr:%lx\n", this,hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: COInetItem::AddRef
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [ULONG] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP_(ULONG) COInetItem::AddRef(void)
|
|
{
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetItem::AddRef\n", this));
|
|
|
|
LONG lRet = ++_CRefs;
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetItem::AddRef (cRefs:%ld)\n", this,lRet));
|
|
return lRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: COInetItem::Release
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [ULONG] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP_(ULONG) COInetItem::Release(void)
|
|
{
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetItem::Release\n", this));
|
|
|
|
LONG lRet = --_CRefs;
|
|
|
|
if (_CRefs == 0)
|
|
{
|
|
//delete this;
|
|
}
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetItem::Release (cRefs:%ld)\n",this,lRet));
|
|
return lRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetItem::GetURL
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [ppwzUrl] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 12-02-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetItem::GetURL(LPOLESTR *ppwzUrl)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetItem::GetURL\n", this));
|
|
HRESULT hr = E_FAIL;
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetItem::GetURL (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetItem::GetInfo
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [dwOptions] --
|
|
// [ppwzItemMime] --
|
|
// [pclsidItem] --
|
|
// [ppwzProtocol] --
|
|
// [pclsidProtocol] --
|
|
// [pdwOut] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 12-02-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetItem::GetInfo(
|
|
DWORD dwOptions,
|
|
LPOLESTR *ppwzItemMime,
|
|
LPCLSID *pclsidItem,
|
|
LPOLESTR *ppwzProtocol,
|
|
LPCLSID *pclsidProtocol,
|
|
DWORD *pdwOut
|
|
)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetItem::GetInfo\n", this));
|
|
HRESULT hr = E_FAIL;
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetItem::GetInfo (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetItem::GetItemData
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [ITEMDATA] --
|
|
// [pitemdata] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 12-02-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetItem::GetItemData(DWORD *grfITEMF,ITEMDATA * pitemdata)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetItem::GetItemData\n", this));
|
|
HRESULT hr = E_FAIL;
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetItem::GetItemData (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetItemSink::QueryInterface
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [riid] --
|
|
// [ppvObj] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetItemSink::QueryInterface(REFIID riid, void **ppvObj)
|
|
{
|
|
VDATEPTROUT(ppvObj, void *);
|
|
VDATETHIS(this);
|
|
HRESULT hr = NOERROR;
|
|
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetItemSink::QueryInterface\n", this));
|
|
|
|
*ppvObj = NULL;
|
|
if ((riid == IID_IUnknown) || (riid == IID_IOInetAdvisor) )
|
|
{
|
|
*ppvObj = this;
|
|
AddRef();
|
|
}
|
|
else
|
|
{
|
|
hr = E_NOINTERFACE;
|
|
}
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetItemSink::QueryInterface (hr:%lx\n", this,hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: COInetItemSink::AddRef
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [ULONG] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP_(ULONG) COInetItemSink::AddRef(void)
|
|
{
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetItemSink::AddRef\n", this));
|
|
|
|
LONG lRet = ++_CRefs;
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetItemSink::AddRef (cRefs:%ld)\n", this,lRet));
|
|
return lRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: COInetItemSink::Release
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [ULONG] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP_(ULONG) COInetItemSink::Release(void)
|
|
{
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetItemSink::Release\n", this));
|
|
|
|
LONG lRet = --_CRefs;
|
|
|
|
if (_CRefs == 0)
|
|
{
|
|
//delete this;
|
|
}
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetItemSink::Release (cRefs:%ld)\n",this,lRet));
|
|
return lRet;
|
|
}
|
|
|
|
STDMETHODIMP COInetItemSink::OnItem(
|
|
ITEMTYPE itemtype,
|
|
IOInetItem *pWChkItem,
|
|
DWORD dwReserved
|
|
)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetItemSink::OnItem\n", this));
|
|
HRESULT hr = E_FAIL;
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetItemSink::OnItem (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetAdvisor::QueryInterface
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [riid] --
|
|
// [ppvObj] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetAdvisor::QueryInterface(REFIID riid, void **ppvObj)
|
|
{
|
|
VDATEPTROUT(ppvObj, void *);
|
|
VDATETHIS(this);
|
|
HRESULT hr = NOERROR;
|
|
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetAdvisor::QueryInterface\n", this));
|
|
|
|
*ppvObj = NULL;
|
|
if ((riid == IID_IUnknown) || (riid == IID_IOInetAdvisor) )
|
|
{
|
|
*ppvObj = this;
|
|
AddRef();
|
|
}
|
|
else
|
|
{
|
|
hr = E_NOINTERFACE;
|
|
}
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetAdvisor::QueryInterface (hr:%lx\n", this,hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: COInetAdvisor::AddRef
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [ULONG] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP_(ULONG) COInetAdvisor::AddRef(void)
|
|
{
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetAdvisor::AddRef\n", this));
|
|
|
|
LONG lRet = ++_CRefs;
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetAdvisor::AddRef (cRefs:%ld)\n", this,lRet));
|
|
return lRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: COInetAdvisor::Release
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [ULONG] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 11-22-96 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP_(ULONG) COInetAdvisor::Release(void)
|
|
{
|
|
TransDebugOut((DEB_SESSION, "%p _IN COInetAdvisor::Release\n", this));
|
|
|
|
LONG lRet = --_CRefs;
|
|
|
|
if (_CRefs == 0)
|
|
{
|
|
// this is global
|
|
//delete this;
|
|
}
|
|
|
|
TransDebugOut((DEB_SESSION, "%p OUT COInetAdvisor::Release (cRefs:%ld)\n",this,lRet));
|
|
return lRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetAdvisor::StartListen
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [szProtocol] --
|
|
// [pWChkItemSink] --
|
|
// [grfFilterMode] --
|
|
// [pclsidProtocol] --
|
|
// [dwReserved] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 12-02-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetAdvisor::StartListen(
|
|
const LPCWSTR szProtocol,
|
|
IOInetItemFilter *pWChkItemFilter,
|
|
DWORD grfFilterMode,
|
|
CLSID *pclsidProtocol,
|
|
DWORD dwReserved
|
|
)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetAdvisor::StartListen\n", this));
|
|
HRESULT hr = E_FAIL;
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetAdvisor::StartListen (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetAdvisor::StopListen
|
|
//
|
|
// Synopsis: will release the sink passed in at StartListen
|
|
//
|
|
// Arguments: [pclsidProtocol] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 12-02-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetAdvisor::StopListen(CLSID *pclsidProtocol)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetAdvisor::StopListen\n", this));
|
|
HRESULT hr = E_FAIL;
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetAdvisor::StopListen (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetAdvisor::Advise
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [pWChkItemSink] --
|
|
// [grfMode] --
|
|
// [cMimes] --
|
|
// [ppwzItemMimes] --
|
|
// [dwReserved] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 12-02-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetAdvisor::Advise(IOInetItemSink *pWChkItemSink, DWORD grfMode, ULONG cMimes, const LPCWSTR *ppwzItemMimes, DWORD dwReserved)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetAdvisor::Advise\n", this));
|
|
HRESULT hr = NOERROR;
|
|
|
|
for (ULONG i = 0; i < cMimes; i++)
|
|
{
|
|
LPCWSTR pwzStr = *(ppwzItemMimes+i);
|
|
_AdvSinks.AddVal(pWChkItemSink, pwzStr);
|
|
}
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetAdvisor::Advise (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetAdvisor::Unadvise
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [pWChkItemSink] --
|
|
// [cMimes] --
|
|
// [ppwzItemMimes] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 12-02-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetAdvisor::Unadvise(IOInetItemSink *pWChkItemSink, ULONG cMimes, const LPCWSTR *ppwzItemMimes)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetAdvisor::Unadvise\n", this));
|
|
HRESULT hr = NOERROR;
|
|
|
|
for (ULONG i = 0; i < cMimes; i++)
|
|
{
|
|
LPCWSTR pwzStr = *(ppwzItemMimes+i);
|
|
_AdvSinks.RemoveVal(pWChkItemSink, pwzStr);
|
|
}
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetAdvisor::Unadvise (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: COInetAdvisor::SendAdvise
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [itemtype] --
|
|
// [pWChkItem] --
|
|
// [grfMode] --
|
|
// [pwzItemMimes] --
|
|
// [dwReserved] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 12-02-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP COInetAdvisor::SendAdvise(
|
|
ITEMTYPE itemtype,
|
|
IOInetItem * pWChkItem,
|
|
DWORD grfMode,
|
|
LPCWSTR pwzItemMimes,
|
|
DWORD dwReserved
|
|
)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN COInetAdvisor::SendAdvise\n", this));
|
|
HRESULT hr;
|
|
HRESULT hr1 = E_FAIL;
|
|
|
|
IOInetItemSink *pWChkItemSink = 0;
|
|
|
|
hr = _AdvSinks.FindFirst(pwzItemMimes, (IUnknown **)&pWChkItemSink);
|
|
|
|
if (hr == NOERROR)
|
|
{
|
|
|
|
do
|
|
{
|
|
hr1 = pWChkItemSink->OnItem(itemtype, pWChkItem, 0);
|
|
pWChkItemSink->Release();
|
|
pWChkItemSink = 0;
|
|
|
|
hr = _AdvSinks.FindNext(pwzItemMimes, (IUnknown **)&pWChkItemSink);
|
|
|
|
} while (hr == NOERROR);
|
|
|
|
}
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT COInetAdvisor::SendAdvise (hr:%lx)\n",this, hr1));
|
|
return hr1;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: CMapStrToXVal::AddVal
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [LPCWSTR] --
|
|
// [ULONG] --
|
|
// [cNames] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 10-29-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP CMapStrToXVal::AddVal(IUnknown *pUnk, LPCWSTR pwzName)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN CMapStrToXVal::AddVal\n", this));
|
|
HRESULT hr = NOERROR;
|
|
|
|
TransAssert((pUnk && pwzName));
|
|
CLock lck(_mxs);
|
|
|
|
CXUnknown cunk = pUnk;
|
|
|
|
if (pUnk && pwzName)
|
|
{
|
|
CProtNode *pNode;
|
|
CKey ckey = pwzName;
|
|
|
|
if (_Map.Lookup(ckey, (CObject *&)pNode) )
|
|
{
|
|
pNode->Add(pUnk);
|
|
}
|
|
else
|
|
{
|
|
pNode = new CProtNode(pUnk);
|
|
if (pNode)
|
|
{
|
|
_Map.SetAt(ckey, pNode);
|
|
_cElements++;
|
|
}
|
|
else
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
hr = E_INVALIDARG;
|
|
}
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT CMapStrToXVal::AddVal (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: CMapStrToXVal::RemoveVal
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [pUnk] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 10-29-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP CMapStrToXVal::RemoveVal(IUnknown *pUnk,LPCWSTR pwzName)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN CMapStrToXVal::RemoveVal\n", this));
|
|
HRESULT hr = NOERROR;
|
|
|
|
CLock lck(_mxs);
|
|
|
|
if (pUnk && pwzName)
|
|
{
|
|
CProtNode *pNode;
|
|
CKey ckey = pwzName;
|
|
|
|
if (_Map.Lookup(ckey, (CObject *&)pNode) )
|
|
{
|
|
pNode->Remove(pUnk);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_INVALIDARG;
|
|
}
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT CMapStrToXVal::RemoveVal (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: CMapStrToXVal::FindFirst
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [pwzName] --
|
|
// [ppUnk] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 10-29-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP CMapStrToXVal::FindFirst(LPCWSTR pwzName, IUnknown **ppUnk)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN CMapStrToXVal::FindFirst\n", this));
|
|
HRESULT hr = E_FAIL;
|
|
|
|
CLock lck(_mxs);
|
|
TransAssert(( pwzName && ppUnk));
|
|
|
|
if (_cElements)
|
|
{
|
|
CProtNode *pNode;
|
|
CKey ckey = pwzName;
|
|
|
|
if ( (_Map.Lookup(ckey, (CObject *&)pNode) )
|
|
&& (pNode->FindFirst(*ppUnk)) )
|
|
{
|
|
hr = NOERROR;
|
|
}
|
|
}
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT CMapStrToXVal::FindFirst (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: CMapStrToXVal::FindNext
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: [pwzName] --
|
|
// [ppUnk] --
|
|
//
|
|
// Returns:
|
|
//
|
|
// History: 10-29-1996 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
STDMETHODIMP CMapStrToXVal::FindNext(LPCWSTR pwzName, IUnknown **ppUnk)
|
|
{
|
|
TransDebugOut((DEB_PROT, "%p _IN CMapStrToXVal::FindNext\n", this));
|
|
HRESULT hr = E_FAIL;
|
|
|
|
CLock lck(_mxs);
|
|
TransAssert(( pwzName && ppUnk));
|
|
|
|
if (_cElements)
|
|
{
|
|
CProtNode *pNode;
|
|
CKey ckey = pwzName;
|
|
|
|
if ( (_Map.Lookup(ckey, (CObject *&)pNode) )
|
|
&& (pNode->FindNext(*ppUnk)) )
|
|
{
|
|
hr = NOERROR;
|
|
}
|
|
}
|
|
|
|
TransDebugOut((DEB_PROT, "%p OUT CMapStrToXVal::FindNext (hr:%lx)\n",this, hr));
|
|
return hr;
|
|
}
|
|
|
|
|
|
|