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
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_
|
|
|