/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/ /* dialin.h Interface administration FILE HISTORY: */ #ifndef _DIALIN_H #define _DIALIN_H #ifndef _BASEHAND_H #include "basehand.h" #endif #ifndef _HANDLERS_H_ #include "handlers.h" #endif #ifndef _ROUTER_H #include "router.h" #endif #ifndef _INFO_H #include "info.h" #endif #ifndef _BASECON_H #include "basecon.h" #endif #ifndef _RTRUTIL_H_ #include "rtrutil.h" #endif #include "rasdlg.h" #define MPR_INTERFACE_NOT_LOADED 0x00010000 // forward declarations class RouterAdminConfigStream; interface IRouterInfo; struct ColumnData; struct SDialInNodeMenu; /*--------------------------------------------------------------------------- Struct: DialInNodeData This is information related to the set of interfaces (not per-interface), this is intended for SHARED data. Put data in here that needs to be accessed by the child nodes. All other private data should go in the handler. ---------------------------------------------------------------------------*/ struct DialInNodeData { DialInNodeData(); ~DialInNodeData(); #ifdef DEBUG char m_szDebug[32]; // for iding structures #endif static HRESULT InitAdminNodeData(ITFSNode *pNode, RouterAdminConfigStream *pConfigStream); static HRESULT FreeAdminNodeData(ITFSNode *pNode); HRESULT LoadHandle(LPCTSTR pszMachineName); HANDLE GetHandle(); void ReleaseHandles(); protected: CString m_stMachineName; SPMprServerHandle m_sphDdmHandle; }; #define GET_DIALINNODEDATA(pNode) \ ((DialInNodeData *) pNode->GetData(TFS_DATA_USER)) #define SET_DIALINNODEDATA(pNode, pData) \ pNode->SetData(TFS_DATA_USER, (LONG_PTR) pData) /*--------------------------------------------------------------------------- This is the list of columns available for the Interfaces node - User name, "foo" - Duration "01:44:22" - Number of ports ---------------------------------------------------------------------------*/ enum { DIALIN_SI_USERNAME = 0, DIALIN_SI_DURATION = 1, DIALIN_SI_NUMBEROFPORTS = 2, DIALIN_MAX_COLUMNS, // Entries after this are not visible to the end-user DIALIN_SI_DOMAIN = DIALIN_MAX_COLUMNS, DIALIN_SI_CONNECTION, DIALIN_SI_MAX, }; /*--------------------------------------------------------------------------- Struct: DialinListEntry ---------------------------------------------------------------------------*/ struct DialInListEntry { RAS_CONNECTION_0 m_rc0; DWORD m_cPorts; }; typedef CList DialInList; /*--------------------------------------------------------------------------- Class: DialInNodeHandler ---------------------------------------------------------------------------*/ class DialInNodeHandler : public BaseContainerHandler { public: DialInNodeHandler(ITFSComponentData *pCompData); HRESULT Init(IRouterInfo *pInfo, RouterAdminConfigStream *pConfigStream); // Override QI to handle embedded interface STDMETHOD(QueryInterface)(REFIID iid, LPVOID *ppv); DeclareEmbeddedInterface(IRtrAdviseSink, IUnknown) // base handler functionality we override OVERRIDE_NodeHandler_DestroyHandler(); OVERRIDE_NodeHandler_GetString(); OVERRIDE_NodeHandler_HasPropertyPages(); OVERRIDE_NodeHandler_OnAddMenuItems(); OVERRIDE_NodeHandler_OnCommand(); OVERRIDE_NodeHandler_OnCreateDataObject(); OVERRIDE_ResultHandler_CompareItems(); OVERRIDE_ResultHandler_AddMenuItems(); OVERRIDE_ResultHandler_Command(); // override handler notifications OVERRIDE_BaseHandlerNotify_OnExpand(); OVERRIDE_BaseResultHandlerNotify_OnResultShow(); // Initializes the node HRESULT ConstructNode(ITFSNode *pNode); // User-initiated commands // Helper function to add interfaces to the UI HRESULT AddDialInUserNode(ITFSNode *pParent, const DialInListEntry &dialinEntry); // Causes a sync action (synchronizes data not the structure) HRESULT SynchronizeNodeData(ITFSNode *pNode); HRESULT PartialSynchronizeNodeData(ITFSNode *pNode); HRESULT UnmarkAllNodes(ITFSNode *pNode, ITFSNodeEnum *pEnum); HRESULT RemoveAllUnmarkedNodes(ITFSNode *pNode, ITFSNodeEnum *pEnum); HRESULT GenerateListOfUsers(ITFSNode *pNode, DialInList *pList, DWORD *pdwCount); HRESULT SetUserData(ITFSNode *pNode, const DialInListEntry& dialin); // Structure used to pass data to callbacks - used as a way of // avoiding recomputation struct SMenuData { SPITFSNode m_spNode; }; static ULONG GetSendAllMenuFlags(const SRouterNodeMenu *pMenuData, INT_PTR pUserData); protected: SPIDataObject m_spDataObject; // cachecd data object CString m_stTitle; // holds the title of the node LONG_PTR m_ulConnId; // notification id for router info LONG_PTR m_ulRefreshConnId; // id for refresh notifications LONG_PTR m_ulPartialRefreshConnId; // id for partial refresh notifications BOOL m_bExpanded; // is the node expanded? MMC_COOKIE m_cookie; // cookie for the node RouterAdminConfigStream * m_pConfigStream; }; /*--------------------------------------------------------------------------- Class: DialInUserHandler ---------------------------------------------------------------------------*/ class DialInUserHandler : public BaseRouterHandler { public: DialInUserHandler(ITFSComponentData *pCompData); ~DialInUserHandler() { DEBUG_DECREMENT_INSTANCE_COUNTER(DialInUserHandler); } HRESULT Init(IRouterInfo *pInfo, ITFSNode *pParent); // Override QI to handle embedded interface DeclareIUnknownMembers(IMPL) // STDMETHOD(QueryInterface)(REFIID iid, LPVOID *ppv); OVERRIDE_ResultHandler_GetString(); OVERRIDE_ResultHandler_HasPropertyPages(); OVERRIDE_ResultHandler_CompareItems(); OVERRIDE_ResultHandler_AddMenuItems(); OVERRIDE_ResultHandler_Command(); OVERRIDE_ResultHandler_OnCreateDataObject(); OVERRIDE_ResultHandler_DestroyResultHandler(); OVERRIDE_BaseResultHandlerNotify_OnResultItemClkOrDblClk(); // Initializes the node HRESULT ConstructNode(ITFSNode *pNode, IInterfaceInfo *pIfInfo, const DialInListEntry *pEntry); // Refresh the data for this node void RefreshInterface(MMC_COOKIE cookie); public: // Structure used to pass data to callbacks - used as a way of // avoiding recomputation struct SMenuData { SPITFSNode m_spNode; DialInUserHandler * m_pDialin; // non-AddRef'd }; static ULONG GetSendMsgMenuFlags(const SRouterNodeMenu *, INT_PTR); protected: CString m_stTitle; // holds the title of the node DWORD m_ulConnId; DialInListEntry m_entry; // It is assumed that this will be valid for the lifetime of this node! DeclareEmbeddedInterface(IRtrAdviseSink, IUnknown) }; #endif _DIALIN_H