Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

577 lines
12 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: agent.hxx
//
// Contents:
//
// Classes:
//
// Functions:
//
// History: 11-21-1996 JohannP (Johann Posch) Created
//
//----------------------------------------------------------------------------
#ifndef _AGENT_HXX_
#define _AGENT_HXX_
#include "webchk.h"
class CAtomX
{
public:
CAtomX()
{
}
CAtomX(ATOM atom)
{
_atom = atom;
}
CAtomX(LPCWSTR pwzStr)
{
char szStr[SZMIMESIZE_MAX];
W2A(pwzStr, szStr, SZMIMESIZE_MAX);
_atom = AddAtom(szStr);
}
CAtomX(LPCSTR pszStr)
{
_atom = AddAtom(pszStr);
}
operator void* ()
{
return (void *)_atom;
}
~CAtomX()
{
}
private:
DWORD _atom;
};
class CKey
{
public:
CKey()
{
}
CKey(ATOM atom)
{
_atom = atom;
}
CKey(LPCWSTR pwzStr)
{
W2A(pwzStr, _szStr, SZMIMESIZE_MAX);
_atom = AddAtom(_szStr);
//_pwzStr = pwzStr;
_pszStr = _szStr;
}
CKey(LPCSTR pszStr)
{
_atom = AddAtom(pszStr);
}
operator void* ()
{
return (void *)_atom;
}
/*
operator LPCWSTR ()
{
return _pwzStr;
}
*/
operator LPCSTR ()
{
return _pszStr;
}
~CKey()
{
}
private:
DWORD _atom;
//LPCWSTR _pwzStr;
LPCSTR _pszStr;
char _szStr[SZMIMESIZE_MAX];
};
class CXUnknown
{
public:
CXUnknown(IUnknown *pUnk)
{
_pUnk = pUnk;
_pUnk->AddRef();
}
~CXUnknown()
{
_pUnk->Release();
}
private:
IUnknown *_pUnk;
};
#ifdef foofoo
//class CXNode : public CList<CXUnknown *, CXUnknown*>
//class CXNode : public CList<IUnknown *, IUnknown*>
clase CXNode : public CPtrArray
{
public:
CXNode() : _cElements(0)
{
_pos = 0;
}
CXNode(IUnknown *pUnk) : _cElements(1)
{
Add(pUnk);
pUnk->AddRef();
_pos = 0;
}
BOOL Add(IUnknown *pUnk)
{
_cElements++;
Add(pUnk);
pUnk->AddRef();
return TRUE;
}
BOOL Remove(IUnknown *pUnk)
{
IUnknown *pUnkVal = 0;
if (_Map.Lookup(pUnk, (void *&)pUnkVal) )
{
_Map.RemoveKey(pUnk);
_cElements--;
pUnk->Release();
}
else
{
TransAssert((FALSE));
}
return (_cElements) ? TRUE : FALSE;
}
IUnknown * FindFirst()
{
IUnknown *pUnkVal = 0;
_pos = _Map.GetStartPosition();
if (_pos)
{
DWORD dwKey;
_Map.GetNextAssoc(_pos, (VOID *&)dwKey, (void *&) pUnkVal);
}
return pUnkVal;
}
IUnknown * FindNext()
{
IUnknown *pUnkVal = 0;
if (_pos)
{
DWORD dwKey;
_Map.GetNextAssoc(_pos, (void *&)dwKey, (void *&) pUnkVal);
}
return pUnkVal;
}
~CProtNode()
{
TransAssert((_cElements == 0));
}
private:
CRefCount _cElements;
int _pos;
};
#endif //foofoo
//+---------------------------------------------------------------------------
//
// Class: CProtNode ()
//
// Purpose:
//
// Interface: Add --
// Remove
// FindFirst --
// FindNext --
//
// History: 10-29-1996 JohannP (Johann Posch) Created
//
// Notes:
//
//----------------------------------------------------------------------------
class CProtNode : public CObject
{
public:
CProtNode(IUnknown *pUnk) : _cElements(1)
{
_Map.SetAt(pUnk, pUnk);
pUnk->AddRef();
}
BOOL Add(IUnknown *pUnk)
{
_cElements++;
_Map.SetAt(pUnk, pUnk);
pUnk->AddRef();
return TRUE;
}
BOOL Remove(IUnknown *pUnk)
{
IUnknown *pUnkVal = 0;
if (_Map.Lookup(pUnk, (void *&)pUnkVal) )
{
_Map.RemoveKey(pUnk);
_cElements--;
pUnk->Release();
}
else
{
TransAssert((FALSE));
}
return (_cElements) ? TRUE : FALSE;
}
/*
IUnknown * FindFirst()
{
IUnknown *pUnkVal = 0;
_pos = _Map.GetStartPosition();
if (_pos)
{
DWORD dwKey;
_Map.GetNextAssoc(_pos, (VOID *&)dwKey, (void *&) pUnkVal);
if (pUnkVal)
{
pUnkVal->AddRef();
}
}
return pUnkVal;
}
IUnknown * FindNext()
{
IUnknown *pUnkVal = 0;
if (_pos)
{
DWORD dwKey;
_Map.GetNextAssoc(_pos, (void *&)dwKey, (void *&) pUnkVal);
if (pUnkVal)
{
pUnkVal->AddRef();
}
}
return pUnkVal;
}
*/
BOOL FindFirst(IUnknown *& prUnk)
{
BOOL fRet = FALSE;
_pos = _Map.GetStartPosition();
if (_pos)
{
DWORD dwKey;
_Map.GetNextAssoc(_pos, (VOID *&)dwKey, (void *&) prUnk);
if (prUnk)
{
prUnk->AddRef();
fRet = TRUE;
}
}
return fRet;
}
BOOL FindNext(IUnknown *& prUnk)
{
BOOL fRet = FALSE;
if (_pos)
{
DWORD dwKey;
_Map.GetNextAssoc(_pos, (VOID *&)dwKey, (void *&) prUnk);
if (prUnk)
{
prUnk->AddRef();
fRet = TRUE;
}
}
return fRet;
}
~CProtNode()
{
TransAssert((_cElements == 0));
}
private:
CRefCount _cElements;
CAtomX _atom;
CMapPtrToPtr _Map;
POSITION _pos;
};
//+---------------------------------------------------------------------------
//
// Class: CMapStrToXVal ()
//
// Purpose:
//
// Interface: QueryInterface --
// AddRef --
// Release --
// AddVal --
// UnAddVal --
// FindFirst --
// FindNext --
// _cElements --
// _CRefs --
// _cElements --
// _Map --
//
// History: 10-29-1996 JohannP (Johann Posch) Created
//
// Notes:
//
//----------------------------------------------------------------------------
class CMapStrToXVal
{
public:
STDMETHODIMP AddVal(IUnknown *pUnk,LPCWSTR pwzName);
STDMETHODIMP RemoveVal(IUnknown *pUnk,LPCWSTR pwzName);
STDMETHODIMP FindFirst(LPCWSTR pwzName, IUnknown **ppUnk);
STDMETHODIMP FindNext(LPCWSTR pwzName, IUnknown **ppUnk);
public:
CMapStrToXVal() : _cElements(0), _CRefs(1)
{
}
~CMapStrToXVal()
{
TransAssert((_cElements == 0));
}
private:
CRefCount _CRefs; // the total refcount of this object
CRefCount _cElements; // the total refcount of this object
CMapStringToOb _Map;
CMutexSem _mxs; // single access to protocol manager
};
#define WEBCHECK_ITEMSINKS_MAX 256
class CUnknown : public IUnknown
{
public:
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
private:
CRefCount _CRefs; // the total refcount of this object
};
class COInetItem : public IOInetItem
{
public:
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP GetURL(
LPOLESTR *ppwzUrl
);
STDMETHODIMP GetInfo(
DWORD dwOptions,
LPOLESTR *ppwzItemMime,
LPCLSID *pclsidItem,
LPOLESTR *ppwzProtocol,
LPCLSID *pclsidProtocol,
DWORD *pdwOut
);
STDMETHODIMP GetItemData(
DWORD *grfITEMF,
ITEMDATA * pitemdata
);
private:
CRefCount _CRefs; // the total refcount of this object
};
class COInetItemSink : public IOInetItemSink
{
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP OnItem(
ITEMTYPE itemtype,
IOInetItem *pWChkItem,
DWORD dwReserved
);
private:
CRefCount _CRefs; // the total refcount of this object
};
class COInetAgent : public IOInetAgent
{
public:
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// will start a listening protocol (APP) and listen for items
// eg. mc or alert etc.
STDMETHODIMP StartListen(
const LPCWSTR szProtocol,
IOInetItemFilter *pWChkItemFilter,
DWORD grfFilterMode,
CLSID *pclsidProtocol,
DWORD dwReserved
);
// will release the sink passed in at StartListen
STDMETHODIMP StopListen(
CLSID *pclsidProtocol
);
// add item to the spooler
STDMETHODIMP ScheduleItem(
IOInetItem *pWChkItem,
IOInetDestination *pWChkDest,
SCHEDULEDATA *pschdata,
DWORD dwMode,
DWORD *pdwCookie
);
STDMETHODIMP RevokeItem(
DWORD dwCookie
);
private:
CRefCount _CRefs; // the total refcount of this object
COInetItemSink _aCWIS[WEBCHECK_ITEMSINKS_MAX]; // the connection points
COInetItemSink _aCWISListen[WEBCHECK_ITEMSINKS_MAX]; // the connection points
};
class COInetAdvisor : public IOInetAdvisor
{
public:
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// will start a listening protocol (APP) and listen for items
// eg. mc or alert etc.
STDMETHODIMP StartListen(
const LPCWSTR wzProtocol,
IOInetItemFilter *pWChkItemFilter,
DWORD grfFilterMode,
CLSID *pclsidProtocol,
DWORD dwReserved
);
// will release the sink passed in at StartListen
STDMETHODIMP StopListen(
CLSID *pclsidProtocol
);
STDMETHODIMP Advise(
IOInetItemSink *pWChkItemSink,
DWORD grfMode,
ULONG cMimes,
const LPCWSTR *ppwzItemMimes,
DWORD dwReserved
);
STDMETHODIMP Unadvise(
IOInetItemSink *pWChkItemSink,
ULONG cMimes,
const LPCWSTR *ppwzItemMimes
);
STDMETHODIMP SendAdvise(
ITEMTYPE itemtype,
IOInetItem *pWChkItem,
DWORD grfMode,
LPCWSTR pwzItemMimes,
DWORD dwReserved
);
public:
COInetAdvisor() : _CRefs(1)
{
}
~COInetAdvisor()
{
}
private:
CRefCount _CRefs; // the total refcount of this object
CMapStrToXVal _AdvSinks;
};
HRESULT GetOInetAdvisor(DWORD dwMode, IOInetAdvisor **ppOInetAdvisor, DWORD dwReserved);
#endif // _AGENT_HXX_