//#-------------------------------------------------------------- // // File: crascom.h // // Synopsis: This file holds the declarations of the // CRasCom class // // // History: 2/10/97 MKarki Created // // Copyright (C) 1997-98 Microsoft Corporation // All rights reserved. // //#-------------------------------------------------------------- #ifndef _CRASCOM_H_ #define _CRASCOM_H_ #include "resource.h" #include "vsafilter.h" class CRasCom: public IDispatchImpl, public IRecvRequest, public CComObjectRoot, public CComCoClass { public: // // registry declaration for the IasHelper // IAS_DECLARE_REGISTRY (IasHelper, 1, 0, IasHelperLib) // // this COM Component is not aggregatable // DECLARE_NOT_AGGREGATABLE(CRasCom) // // this COM component is a Singleton // DECLARE_CLASSFACTORY_SINGLETON (CRasCom) // // MACROS for ATL required methods // BEGIN_COM_MAP(CRasCom) COM_INTERFACE_ENTRY2(IDispatch, IIasComponent) COM_INTERFACE_ENTRY(IIasComponent) COM_INTERFACE_ENTRY(IRecvRequest) COM_INTERFACE_ENTRY_FUNC(__uuidof (IRequestSource), (ULONG_PTR)0, &CRasCom::QueryInterfaceReqSrc) END_COM_MAP() // // MACRO to declare Controlling IUnknown method // DECLARE_GET_CONTROLLING_UNKNOWN() CRasCom (VOID); ~CRasCom (VOID); public: // // method of the IRecvRequest interface // STDMETHOD (Process) ( /*[in]*/ DWORD dwAttributeCount, /*[in]*/ PIASATTRIBUTE *ppInIasAttribute, /*[out]*/ PDWORD pdwOutAttributeCount, /*[out]*/ PIASATTRIBUTE **pppOutIasAttribute, /*[in]*/ LONG IasRequest, /*[out]*/ LONG *pIasResponse, /*[in]*/ IASPROTOCOL IasProtocol, /*[out]*/ PLONG plReason, /*[in]*/ BOOL bProcessVSA ); // // methods of IIasComponent interface // STDMETHOD(Initialize)(); STDMETHOD(Shutdown)(); STDMETHOD(GetProperty)( /*[in]*/ LONG id, /*[out]*/ VARIANT *pValue ); STDMETHOD(PutProperty)( /*[in]*/ LONG id, /*[in]*/ VARIANT *pValue ); STDMETHOD(InitNew)(); STDMETHOD(Suspend)(); STDMETHOD(Resume)(); private: // // here is the class factory for the Request object // IClassFactory *m_pIClassFactory; // // here is the handle to the Request Handler // IRequestHandler *m_pIRequestHandler; // // here is the definition of the CRequestSource // which implements the method of the IRequestSource // interface // class CRequestSource : public IRequestSource { public: CRequestSource (CRasCom *pCRasCom); ~CRequestSource (); // // IUnknown methods - delegate to outer IUnknown // STDMETHOD(QueryInterface)( /*[in]*/ REFIID riid, /*[out]*/ void **ppv ) { IUnknown *pUnknown = m_pCRasCom->GetControllingUnknown(); return (pUnknown->QueryInterface(riid,ppv)); } STDMETHOD_(ULONG,AddRef)(void) { IUnknown *pUnknown = m_pCRasCom->GetControllingUnknown(); return (pUnknown->AddRef()); } STDMETHOD_(ULONG,Release)(void) { IUnknown *pUnknown = m_pCRasCom->GetControllingUnknown(); return (pUnknown->Release()); } // // IDispatch methods - delegate to outer class object // STDMETHOD(GetTypeInfoCount)( /*[out]*/ UINT *pctinfo ) { return (m_pCRasCom->GetTypeInfoCount (pctinfo)); } STDMETHOD(GetTypeInfo)( /*[in]*/ UINT iTInfo, /*[in]*/ LCID lcid, /*[out]*/ ITypeInfo **ppTInfo ) { return (m_pCRasCom->GetTypeInfo (iTInfo, lcid, ppTInfo)); } STDMETHOD(GetIDsOfNames)( /*[in]*/ const IID& riid, /*[in]*/ LPOLESTR *rgszNames, /*[in]*/ UINT cNames, /*[in]*/ LCID lcid, /*[out]*/ DISPID *rgDispId) { return (m_pCRasCom->GetIDsOfNames ( riid, rgszNames, cNames, lcid, rgDispId ) ); } STDMETHOD(Invoke)( /*[in]*/ DISPID dispIdMember, /*[in]*/ const IID& riid, /*[in]*/ LCID lcid, /*[in]*/ WORD wFlags, /*[in/out]*/DISPPARAMS *pDispParams, /*[out]*/ VARIANT *pVarResult, /*[out]*/ EXCEPINFO *pExcepInfo, /*[out]*/ UINT *puArgErr ) { return (m_pCRasCom->Invoke ( dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr ) ); } // // IRequestSource Interface method // STDMETHOD(OnRequestComplete)( /*[in]*/ IRequest *pIRequest, /*[in]*/ IASREQUESTSTATUS eStatus ); private: CRasCom* m_pCRasCom; }; // end of nested class CRequestSource // // private method used to remove attributes from the request // STDMETHOD (RemoveAttributesFromRequest) ( /*[in]*/ LONG lResponse, /*[in]*/ IAttributesRaw *pIasAttributesRaw, /*[out]*/ PDWORD pdwOutAttributeCount, /*[out]*/ PIASATTRIBUTE **pppOutIasOutAttribute ); // // this method is called when somone whants the // IRequestHandlercallback interface // static HRESULT WINAPI QueryInterfaceReqSrc ( VOID *pThis, REFIID riid, LPVOID *ppv, DWORD_PTR dwValue ); // // instantiate this nested class // CRequestSource m_objCRequestSource; // // now we can call into private methods of CRasCom // friend class CRequestSource; // // instantiate the VSAFilter class // VSAFilter m_objVSAFilter; // // flag to trac VSAFilter class object initialization // BOOL m_bVSAFilterInitialized; typedef enum _component_state_ { COMP_SHUTDOWN, COMP_UNINITIALIZED, COMP_INITIALIZED, COMP_SUSPENDED } COMPONENTSTATE, *PCOMPONENTSTATE; COMPONENTSTATE m_eCompState; // // pending requeset count // LONG m_lRequestCount; }; #endif // !define _CRASCOM_H_