//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: S M P S H . H // // Contents: The property sheets header // // Notes: // // Author: CWill 10/14/1997 // //---------------------------------------------------------------------------- // // The Status Monitor's General Page // extern const WCHAR c_szNetCfgHelpFile[]; const UINT PWM_UPDATE_STATUS_DISPLAY = WM_USER + 1; const UINT PWM_UPDATE_RAS_LINK_LIST = WM_USER + 2; const UINT PWM_UPDATE_IPCFG_DISPLAY = WM_USER + 3; enum StatTrans { Stat_Unknown, Stat_Bytes, Stat_Packets }; // // The Status Monitors General Page // class ATL_NO_VTABLE CPspStatusMonitorGen : public CComObjectRootEx , public CPropSheetPage, public INetConnectionStatisticsNotifySink { public: CPspStatusMonitorGen(VOID); BEGIN_COM_MAP(CPspStatusMonitorGen) COM_INTERFACE_ENTRY(INetConnectionStatisticsNotifySink) END_COM_MAP() BEGIN_MSG_MAP(CPspStatusMonitorGen) // Windows Messages // MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_CLOSE, OnClose) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu); MESSAGE_HANDLER(WM_HELP, OnHelp); MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor) MESSAGE_HANDLER(WM_TIMER, OnTimer) MESSAGE_HANDLER(PWM_UPDATE_STATUS_DISPLAY, OnUpdateStatusDisplay) MESSAGE_HANDLER(WM_PAINT, OnPaint) // Notifications // NOTIFY_CODE_HANDLER(PSN_SETACTIVE, OnSetActive) NOTIFY_CODE_HANDLER(PSN_KILLACTIVE, OnKillActive) // Command handlers COMMAND_ID_HANDLER(IDC_PSB_DISCONNECT, OnDisconnect) COMMAND_ID_HANDLER(IDC_PSB_PROPERTIES, OnRaiseProperties) END_MSG_MAP() // Message handlers // public: LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled); LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnSetCursor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnUpdateStatusDisplay(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnSetActive(INT idCtrl, LPNMHDR pnmh, BOOL & bHandled); LRESULT OnKillActive(INT idCtrl, LPNMHDR pnmh, BOOL & bHandled); LRESULT OnDisconnect(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); LRESULT OnRaiseProperties(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); friend class CPspStatusMonitorRas; public: STDMETHOD(OnStatisticsChanged)(DWORD dwChangeFlags); VOID FinalRelease (); // Helper functions // public: HRESULT HrInitGenPage(CNetStatisticsEngine* pnseNew, INetConnection* pncNew, const DWORD * adwHelpIDs = NULL); HRESULT HrCleanupGenPage(VOID); HRESULT HrDisconnectConnection(BOOL fConfirmed = FALSE); VOID SetAsFirstPage(BOOL fFirst = TRUE) { m_fIsFirstPage = fFirst; } // Utility Functions // protected: VOID UpdatePage( STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); virtual VOID UpdatePageSpeed( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); VOID UpdatePageConnectionStatus( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); virtual VOID UpdatePageIcon(DWORD dwChangeFlags); VOID UpdateSignalStrengthIcon(INT iRSSI); virtual VOID UpdatePageDuration( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); virtual VOID UpdatePageBytesTransmitting( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData, StatTrans iStat); virtual VOID UpdatePageBytesReceiving( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData, StatTrans iStat); VOID UpdatePageCompTransmitting( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); VOID UpdatePageCompReceiving( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); VOID UpdatePageErrorsTransmitting( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); VOID UpdatePageErrorsReceiving( const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); BOOL FIsShowLanErrorRegKeySet(); virtual BOOL ShouldShowPackets(const STATMON_ENGINEDATA* pseNewData); protected: STATMON_ENGINEDATA* m_psmEngineData; CNetStatisticsEngine* m_pnseStat; DWORD m_dwChangeFlags; DWORD m_dwConPointCookie; BOOL m_fStats; NETCON_MEDIATYPE m_ncmType; NETCON_SUBMEDIATYPE m_ncsmType; DWORD m_dwCharacter; DWORD m_dwLastUpdateStatusDisplayTick; BOOL m_fProcessingTimerEvent; int m_iStatTrans; const DWORD * m_adwHelpIDs; BOOL m_fIsFirstPage; INT m_iLastSignalStrength; }; // // The Status Monitors Tools Page // class CPspStatusMonitorTool: public CPropSheetPage { public: BEGIN_MSG_MAP(CPshStatusMonitorTools) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu); MESSAGE_HANDLER(WM_HELP, OnHelp); COMMAND_ID_HANDLER(IDC_BTN_SM_TOOLS_OPEN, OnToolOpen) NOTIFY_CODE_HANDLER(LVN_ITEMACTIVATE, OnItemActivate) NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, OnItemChanged) END_MSG_MAP() // Message handlers // public: LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled); LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnToolOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); LRESULT OnItemActivate(INT idCtrl, LPNMHDR pnmh, BOOL& bHandled); LRESULT OnItemChanged(INT idCtrl, LPNMHDR pnmh, BOOL& bHandled); CPspStatusMonitorTool(VOID); ~CPspStatusMonitorTool(VOID); public: HRESULT HrInitToolPage(INetConnection* pncInit, const DWORD * adwHelpIDs = NULL); BOOL FToolListEmpty() { return (m_lstpsmte.size()==0); } private: virtual HRESULT HrInitToolPageType(INetConnection* pncInit) PURE; virtual HRESULT HrAddCommandLineFlags(tstring* pstrFlags, CStatMonToolEntry* psmteSel) PURE; virtual HRESULT HrGetDeviceType(INetConnection* pncInit) PURE; virtual HRESULT HrGetComponentList(INetConnection* pncInit) PURE; // Utility Functions // private: HRESULT HrCreateToolList(INetConnection* pncInit); BOOL FToolToAddToList(CStatMonToolEntry* psmteTest); HRESULT HrFillToolList(VOID); HRESULT HrAddOneEntryToToolList( CStatMonToolEntry* psmteAdd, INT iItem); HRESULT HrLaunchTool(VOID); HRESULT HrAddAllCommandLineFlags(tstring* pstrFlags, CStatMonToolEntry* psmteSel); HRESULT HrAddCommonCommandLineFlags(tstring* pstrFlags, CStatMonToolEntry* psmteSel); // Internal data // protected: HWND m_hwndToolList; list m_lstpsmte; NETCON_MEDIATYPE m_ncmType; NETCON_SUBMEDIATYPE m_ncsmType; tstring m_strDeviceType; list m_lstpstrCompIds; GUID m_guidId; DWORD m_dwCharacter; const DWORD * m_adwHelpIDs; }; // // The Status Monitors RAS Page // // // Data associated with each of the sub devices in a modem connection // class CRasDeviceInfo { public: CRasDeviceInfo() { m_iSubEntry = -1; } VOID SetDeviceName(PCWSTR pszDeviceName) { m_strDeviceName = pszDeviceName; } VOID SetSubEntry(DWORD iSubEntry) { m_iSubEntry = iSubEntry; } PCWSTR PszGetDeviceName(VOID) { return m_strDeviceName.c_str(); } DWORD DwGetSubEntry(VOID) { return m_iSubEntry; } private: tstring m_strDeviceName; DWORD m_iSubEntry; }; // // The RAS page // class CPspStatusMonitorRas: public CPropSheetPage { public: BEGIN_MSG_MAP(CPshStatusMonitorRas) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu); MESSAGE_HANDLER(WM_HELP, OnHelp); MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor); COMMAND_ID_HANDLER(IDC_BTN_SM_SUSPEND_DEVICE, OnSuspendDevice) COMMAND_ID_HANDLER(IDC_CMB_SM_RAS_DEVICES, OnDeviceDropDown) MESSAGE_HANDLER(PWM_UPDATE_RAS_LINK_LIST, OnUpdateRasLinkList) END_MSG_MAP() // Message handlers // public: LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled); LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnSetCursor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnSuspendDevice(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); LRESULT OnDeviceDropDown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); LRESULT OnUpdateRasLinkList(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); CPspStatusMonitorRas(); ~CPspStatusMonitorRas(VOID); public: HRESULT HrInitRasPage(INetConnection* pncInit, CPspStatusMonitorGen * pGenPage, const DWORD * dwHelpIDs = NULL); // Utility Functions // private: VOID FillDeviceDropDown(); VOID FillPropertyList(); VOID FillRasClientProperty(); VOID FillRasServerProperty(); int InsertProperty(int * piItem, UINT unId, tstring& strValue); NETCON_STATUS NcsGetDeviceStatus(CRasDeviceInfo* prdiStatus); VOID SetButtonStatus(CRasDeviceInfo* prdiSelect); UINT GetActiveDeviceCount(); // Internal data // protected: HRASCONN m_hRasConn; tstring m_strPbkFile; tstring m_strEntryName; tstring m_strConnectionName; list m_lstprdi; CPspStatusMonitorGen * m_pGenPage; // initialize NETCON_MEDIATYPE m_ncmType; DWORD m_dwCharacter; const DWORD * m_adwHelpIDs; }; // // Implementation of the RAS pages // class CPspRasGen: public CPspStatusMonitorGen { public: CPspRasGen(VOID); VOID put_MediaType(NETCON_MEDIATYPE ncmType, NETCON_SUBMEDIATYPE ncsmType); VOID put_Character(DWORD dwCharacter); }; class CPspRasTool: public CPspStatusMonitorTool { public: CPspRasTool(VOID); VOID put_MediaType(NETCON_MEDIATYPE ncmType, NETCON_SUBMEDIATYPE ncsmType); VOID put_Character(DWORD dwCharacter); HRESULT HrInitToolPageType(INetConnection* pncInit); HRESULT HrAddCommandLineFlags(tstring* pstrFlags, CStatMonToolEntry* psmteSel); HRESULT HrGetDeviceType(INetConnection* pncInit); HRESULT HrGetComponentList(INetConnection* pncInit); }; // // Implementation of the LAN pages // class CPspLanGen: public CPspStatusMonitorGen { public: CPspLanGen(VOID); VOID put_MediaType(NETCON_MEDIATYPE ncmType, NETCON_SUBMEDIATYPE ncsmType); }; class CPspLanTool: public CPspStatusMonitorTool { public: CPspLanTool(VOID); HRESULT HrInitToolPageType(INetConnection* pncInit); HRESULT HrAddCommandLineFlags(tstring* pstrFlags, CStatMonToolEntry* psmteSel); HRESULT HrGetDeviceType(INetConnection* pncInit); HRESULT HrGetComponentList(INetConnection* pncInit); private: tstring m_strDeviceName; }; // // Implementation of the Shared Access pages // class CPspSharedAccessGen: public CPspStatusMonitorGen { public: CPspSharedAccessGen(VOID); VOID put_MediaType(NETCON_MEDIATYPE ncmType, NETCON_SUBMEDIATYPE ncsmType); protected: VOID UpdatePageBytesReceiving(const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData, StatTrans iStat); VOID UpdatePageBytesTransmitting(const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData, StatTrans iStat); BOOL ShouldShowPackets(const STATMON_ENGINEDATA* pseNewData); VOID UpdatePageIcon(DWORD dwChangeFlags); VOID UpdatePageSpeed(const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); VOID UpdatePageDuration(const STATMON_ENGINEDATA* pseOldData, const STATMON_ENGINEDATA* pseNewData); }; class CPspSharedAccessTool : public CPspStatusMonitorTool { public: CPspSharedAccessTool(); HRESULT HrInitToolPageType(INetConnection* pncInit); HRESULT HrAddCommandLineFlags(tstring* pstrFlags, CStatMonToolEntry* psmteSel); HRESULT HrGetDeviceType(INetConnection* pncInit); HRESULT HrGetComponentList(INetConnection* pncInit); }; class CAdvIpcfgDlg : public CDialogImpl { public: enum { IDD = IDD_DIALOG_ADV_IPCFG }; BEGIN_MSG_MAP(CAdvIpcfgDlg) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog); MESSAGE_HANDLER(WM_CLOSE, OnClose); MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu); MESSAGE_HANDLER(WM_HELP, OnHelp); MESSAGE_HANDLER(PWM_UPDATE_IPCFG_DISPLAY, OnUpdateDisplay) COMMAND_ID_HANDLER(IDOK, OnOk); COMMAND_ID_HANDLER(IDCANCEL, OnCancel); NOTIFY_CODE_HANDLER(LVN_KEYDOWN, OnListKeyDown); END_MSG_MAP() // public: CAdvIpcfgDlg(); ~CAdvIpcfgDlg() {} VOID InitDialog(const GUID & guidConnection, const DWORD * dwHelpIDs = NULL) { m_guidConnection = guidConnection; m_adwHelpIDs = dwHelpIDs; } // Dialog creation overides public: LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnUpdateDisplay(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnOk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); LRESULT OnListKeyDown(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); private: HRESULT PopulateListControl(); VOID AddToListControl(int iIndex, LPWSTR szFirst, LPWSTR szSecond); int AddIPAddrToListControl(int iStartIndex, PIP_ADDR_STRING pAddrList, LPWSTR pszAddrDescription, LPWSTR pszMaskDescription = NULL, BOOL fShowDescriptionForMutliple = FALSE ); int AddWinsServersToList(int iStartIndex); VOID CopyListToClipboard(); int IPAddrToString( PIP_ADDR_STRING pAddrList, tstring * pstrAddr, tstring * pstrMask = NULL ); HRESULT FormatTime(time_t t, tstring & str); protected: GUID m_guidConnection; HWND m_hList; const DWORD * m_adwHelpIDs; }; // // The State page // class CPspStatusMonitorIpcfg: public CPropSheetPage { protected: public: BEGIN_MSG_MAP(CPspStatusMonitorIpcfg) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu); MESSAGE_HANDLER(WM_HELP, OnHelp); MESSAGE_HANDLER(PWM_UPDATE_IPCFG_DISPLAY, OnUpdateDisplay) COMMAND_ID_HANDLER(IDC_STATE_BTN_REPAIR, OnRepair); COMMAND_ID_HANDLER(IDC_STATE_BTN_DETAIL, OnDetails); NOTIFY_CODE_HANDLER(PSN_SETACTIVE, OnActive) NOTIFY_CODE_HANDLER(PSN_KILLACTIVE, OnKillActive) END_MSG_MAP() // Message handlers // public: LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled); LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnRepair(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); LRESULT OnDetails(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled); LRESULT OnActive(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); LRESULT OnKillActive(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); LRESULT OnUpdateDisplay(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled); CPspStatusMonitorIpcfg(); ~CPspStatusMonitorIpcfg(); public: HRESULT HrInitPage(INetConnection * pnConnection, const DWORD * adwHelpIDs = NULL); VOID CleanupPage(); VOID SetAsFirstPage(BOOL fFirst = TRUE) { m_fIsFirstPage = fFirst; } static DWORD WINAPI IPAddrListenProc(LPVOID lpParameter); static DWORD WINAPI AdvIpCfgProc(LPVOID lpParameter); // Utility Functions // private: HRESULT GetIPConfigInfo(); VOID InitializeData(); VOID RefreshUI(); VOID StopAddressListenThread(); // Internal data // protected: CAdvIpcfgDlg m_dlgAdvanced; GUID m_guidConnection; tstring m_strConnectionName; tstring m_strIPAddress; tstring m_strSubnetMask; tstring m_strGateway; HANDLE m_hEventAddrListenThreadStopCommand; HANDLE m_hEventAddrListenThreadStopNotify; DHCP_ADDRESS_TYPE m_dhcpAddrType; BOOL m_fDhcp; // initialize NETCON_MEDIATYPE m_ncmType; const DWORD * m_adwHelpIDs; INetConnection * m_pConn; BOOL m_fListenAddrChange; BOOL m_fEnableOpButtons; BOOL m_fIsFirstPage; };