//+--------------------------------------------------------------------------- // // 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 //class CXNode : public CList 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_