2009 lines
61 KiB
C++
2009 lines
61 KiB
C++
/*******************************************************************************
|
|
*
|
|
* mainfrm.cpp
|
|
*
|
|
* implementation of the CMainFrame class
|
|
*
|
|
* copyright notice: Copyright 1997, Citrix Systems Inc.
|
|
* Copyright (c) 1998 - 1999 Microsoft Corporation
|
|
*
|
|
* $Author: donm $ Don Messerli
|
|
*
|
|
*******************************************************************************/
|
|
|
|
#include "stdafx.h"
|
|
#include "afxpriv.h"
|
|
#include "afxcview.h"
|
|
#include "winadmin.h"
|
|
#include "admindoc.h"
|
|
#include "treeview.h"
|
|
#include "rtpane.h"
|
|
#include "dialogs.h"
|
|
#include "htmlhelp.h"
|
|
#include "mainfrm.h"
|
|
#include <winsock2.h>
|
|
|
|
#include <dsrole.h>
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#ifdef _STRESS_BUILD
|
|
DWORD RunStress( PVOID pv );
|
|
DWORD RunStressLite( PVOID pv );
|
|
BOOL g_fWaitForAllServersToDisconnect = 1;
|
|
#endif
|
|
|
|
INT_PTR CALLBACK FWarnDlg( HWND hwnd , UINT msg , WPARAM wp , LPARAM lp );
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame
|
|
|
|
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
|
|
|
|
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
|
|
//{{AFX_MSG_MAP(CMainFrame)
|
|
ON_WM_CREATE()
|
|
ON_MESSAGE(WM_ADMIN_CHANGEVIEW, OnAdminChangeView)
|
|
ON_MESSAGE(WM_ADMIN_ADD_SERVER, OnAdminAddServer)
|
|
ON_MESSAGE(WM_ADMIN_REMOVE_SERVER, OnAdminRemoveServer)
|
|
ON_MESSAGE(WM_ADMIN_UPDATE_SERVER, OnAdminUpdateServer)
|
|
ON_MESSAGE(WM_ADMIN_UPDATE_PROCESSES, OnAdminUpdateProcesses)
|
|
ON_MESSAGE(WM_ADMIN_REMOVE_PROCESS, OnAdminRemoveProcess)
|
|
ON_MESSAGE(WM_ADMIN_ADD_WINSTATION, OnAdminAddWinStation)
|
|
ON_MESSAGE(WM_ADMIN_UPDATE_WINSTATION, OnAdminUpdateWinStation)
|
|
ON_MESSAGE(WM_ADMIN_REMOVE_WINSTATION, OnAdminRemoveWinStation)
|
|
ON_MESSAGE(WM_ADMIN_UPDATE_SERVER_INFO, OnAdminUpdateServerInfo)
|
|
ON_MESSAGE(WM_ADMIN_REDISPLAY_LICENSES, OnAdminRedisplayLicenses)
|
|
ON_MESSAGE(WM_ADMIN_UPDATE_WINSTATIONS, OnAdminUpdateWinStations)
|
|
ON_MESSAGE(WM_ADMIN_UPDATE_DOMAIN, OnAdminUpdateDomain)
|
|
ON_MESSAGE(WM_ADMIN_ADD_DOMAIN, OnAdminAddDomain)
|
|
ON_MESSAGE(WM_ADMIN_VIEWS_READY, OnAdminViewsReady)
|
|
ON_MESSAGE(WM_FORCE_TREEVIEW_FOCUS , OnForceTreeViewFocus )
|
|
|
|
ON_MESSAGE( WM_ADMIN_ADDSERVERTOFAV , OnAdminAddServerToFavorites )
|
|
ON_MESSAGE( WM_ADMIN_REMOVESERVERFROMFAV , OnAdminRemoveServerFromFavs )
|
|
ON_MESSAGE( WM_ADMIN_GET_TV_STATES , OnAdminGetTVStates )
|
|
ON_MESSAGE( WM_ADMIN_UPDATE_TVSTATE , OnAdminUpdateTVStates )
|
|
|
|
ON_COMMAND(IDM_EXPAND_ALL, OnExpandAll)
|
|
ON_COMMAND(IDM_REFRESH, OnRefresh)
|
|
ON_COMMAND(IDM_CONNECT, OnConnect)
|
|
ON_COMMAND(IDM_DISCONNECT, OnDisconnect)
|
|
ON_COMMAND(IDM_MESSAGE, OnSendMessage)
|
|
ON_COMMAND(IDM_SHADOW, OnShadow)
|
|
ON_COMMAND(IDM_RESET, OnReset)
|
|
ON_COMMAND(IDM_STATUS, OnStatus)
|
|
ON_COMMAND(IDTM_CONNECT, OnTreeConnect)
|
|
ON_COMMAND(IDTM_DISCONNECT, OnTreeDisconnect)
|
|
ON_COMMAND(IDTM_MESSAGE, OnTreeSendMessage)
|
|
ON_COMMAND(IDTM_SHADOW, OnTreeShadow)
|
|
ON_COMMAND(IDTM_RESET, OnTreeReset)
|
|
ON_COMMAND(IDTM_STATUS, OnTreeStatus)
|
|
ON_COMMAND(IDM_LOGOFF, OnLogoff)
|
|
ON_COMMAND(IDM_TERMINATE, OnTerminate)
|
|
ON_COMMAND(IDM_PREFERENCES, OnPreferences)
|
|
ON_COMMAND(IDM_COLLAPSE_ALL, OnCollapseAll)
|
|
ON_COMMAND(IDM_COLLAPSE_TOSERVERS, OnCollapseToServers)
|
|
ON_COMMAND(IDM_COLLAPSE_TODOMAINS, OnCollapseToDomains)
|
|
ON_COMMAND(IDM_SHOW_SYSTEM_PROCESSES, OnShowSystemProcesses)
|
|
ON_COMMAND(IDM_SERVER_CONNECT, OnServerConnect)
|
|
ON_COMMAND(IDM_SERVER_DISCONNECT, OnServerDisconnect)
|
|
|
|
ON_COMMAND( IDTM_DOMAIN_FIND_SERVER , OnFindServer )
|
|
|
|
ON_COMMAND(IDM_SERVER_ADDTOFAV , OnAddToFavorites )
|
|
ON_COMMAND(IDM_SERVER_REMOVEFAV , OnRemoveFromFavs )
|
|
ON_COMMAND( IDM_ALLSERVERS_EMPTYFAVORITES , OnEmptyFavorites )
|
|
|
|
|
|
ON_COMMAND(IDTM_DOMAIN_CONNECT_ALL, OnTreeDomainConnectAllServers)
|
|
ON_COMMAND(IDTM_DOMAIN_DISCONNECT_ALL, OnTreeDomainDisconnectAllServers)
|
|
ON_COMMAND(IDTM_DOMAIN_FIND_SERVERS, OnTreeDomainFindServers)
|
|
ON_COMMAND(IDM_DOMAIN_CONNECT_ALL, OnDomainConnectAllServers)
|
|
ON_COMMAND(IDM_DOMAIN_DISCONNECT_ALL, OnDomainDisconnectAllServers)
|
|
ON_COMMAND(IDM_ALLSERVERS_CONNECT, OnAllServersConnect)
|
|
ON_COMMAND(IDM_ALLSERVERS_DISCONNECT, OnAllServersDisconnect)
|
|
ON_COMMAND(IDM_ALLSERVERS_FIND, OnAllServersFind)
|
|
ON_UPDATE_COMMAND_UI(IDM_CONNECT, OnUpdateConnect)
|
|
ON_UPDATE_COMMAND_UI(IDM_DISCONNECT, OnUpdateDisconnect)
|
|
ON_UPDATE_COMMAND_UI(IDM_LOGOFF, OnUpdateLogoff)
|
|
ON_UPDATE_COMMAND_UI(IDM_MESSAGE, OnUpdateMessage)
|
|
ON_UPDATE_COMMAND_UI(IDM_RESET, OnUpdateReset)
|
|
ON_UPDATE_COMMAND_UI(IDM_SHADOW, OnUpdateShadow)
|
|
ON_UPDATE_COMMAND_UI(IDM_STATUS, OnUpdateStatus)
|
|
ON_UPDATE_COMMAND_UI(IDM_TERMINATE, OnUpdateTerminate)
|
|
ON_UPDATE_COMMAND_UI(IDM_SERVER_CONNECT, OnUpdateServerConnect)
|
|
ON_UPDATE_COMMAND_UI(IDM_SERVER_DISCONNECT, OnUpdateServerDisconnect)
|
|
|
|
ON_UPDATE_COMMAND_UI( IDM_SERVER_ADDTOFAV , OnUpdateServerAddToFavorite )
|
|
ON_UPDATE_COMMAND_UI( IDM_SERVER_REMOVEFAV , OnUpdateServerRemoveFromFavorite )
|
|
|
|
ON_UPDATE_COMMAND_UI(IDTM_CONNECT, OnUpdateTreeConnect)
|
|
ON_UPDATE_COMMAND_UI(IDTM_DISCONNECT, OnUpdateTreeDisconnect)
|
|
ON_UPDATE_COMMAND_UI(IDTM_MESSAGE, OnUpdateTreeMessage)
|
|
ON_UPDATE_COMMAND_UI(IDTM_RESET, OnUpdateTreeReset)
|
|
ON_UPDATE_COMMAND_UI(IDTM_SHADOW, OnUpdateTreeShadow)
|
|
ON_UPDATE_COMMAND_UI(IDTM_STATUS, OnUpdateTreeStatus)
|
|
ON_UPDATE_COMMAND_UI(IDM_SHOW_SYSTEM_PROCESSES, OnUpdateShowSystemProcesses)
|
|
ON_UPDATE_COMMAND_UI_RANGE(IDM_DOMAIN_CONNECT_ALL, IDM_DOMAIN_DISCONNECT_ALL, OnUpdateDomainMenu)
|
|
ON_UPDATE_COMMAND_UI_RANGE(IDTM_DOMAIN_CONNECT_ALL, IDTM_DOMAIN_DISCONNECT_ALL, OnUpdateDomainPopupMenu)
|
|
ON_UPDATE_COMMAND_UI(IDTM_DOMAIN_FIND_SERVERS, OnUpdateDomainPopupFind)
|
|
ON_UPDATE_COMMAND_UI(IDM_REFRESH, OnUpdateRefresh)
|
|
|
|
ON_UPDATE_COMMAND_UI( IDM_ALLSERVERS_EMPTYFAVORITES , OnUpdateEmptyFavs )
|
|
|
|
ON_COMMAND( ID_TAB , OnTab )
|
|
ON_COMMAND( ID_SHIFTTAB , OnShiftTab )
|
|
ON_COMMAND( ID_CTRLTAB , OnCtrlTab )
|
|
ON_COMMAND( ID_CTRLSHIFTTAB , OnCtrlShiftTab )
|
|
ON_COMMAND( ID_NEXTPANE , OnNextPane )
|
|
ON_COMMAND( ID_PREVPANE , OnNextPane )
|
|
ON_COMMAND( ID_DELKEY , OnDelFavNode )
|
|
#ifdef _STRESS_BUILD
|
|
ON_COMMAND( IDM_ALLSERVERS_FAVALLADD , OnAddAllServersToFavorites )
|
|
ON_COMMAND( IDM_ALLSERVERS_RUNSTRESS , OnRunStress )
|
|
ON_COMMAND( IDM_ALLSERVERS_RUNSTRESSLITE, OnRunStressLite )
|
|
#endif
|
|
ON_WM_CLOSE()
|
|
//}}AFX_MSG_MAP
|
|
// Global help commands
|
|
ON_COMMAND(ID_HELP_FINDER, OnHtmlHelp)
|
|
ON_COMMAND(ID_HELP, OnHtmlHelp)
|
|
// ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp)
|
|
// ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
static UINT indicators[] =
|
|
{
|
|
ID_SEPARATOR, // status line indicator
|
|
ID_INDICATOR_CAPS,
|
|
ID_INDICATOR_NUM,
|
|
ID_INDICATOR_SCRL,
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame construction/destruction
|
|
|
|
CMainFrame::CMainFrame()
|
|
{
|
|
m_pLeftPane = NULL;
|
|
m_pRightPane = NULL;
|
|
}
|
|
|
|
|
|
CMainFrame::~CMainFrame()
|
|
{
|
|
|
|
}
|
|
|
|
void CMainFrame::OnHtmlHelp()
|
|
{
|
|
TCHAR * pTsAdminHelp = L"ts_adm_topnode.htm";
|
|
HtmlHelp(AfxGetMainWnd()->m_hWnd,L"TermSrv.Chm",HH_DISPLAY_TOPIC,(DWORD_PTR)pTsAdminHelp);
|
|
}
|
|
|
|
|
|
/*LRESULT CMainFrame::OnHelp(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
CFrameWnd::WinHelp(0L, HELP_FINDER);
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
if (!m_wndToolBar.Create(this) ||
|
|
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
|
|
{
|
|
// TRACE0("Failed to create toolbar\n");
|
|
return -1; // fail to create
|
|
}
|
|
|
|
if (!m_wndStatusBar.Create(this) ||
|
|
!m_wndStatusBar.SetIndicators(indicators,
|
|
sizeof(indicators)/sizeof(UINT)))
|
|
{
|
|
// TRACE0("Failed to create status bar\n");
|
|
return -1; // fail to create
|
|
}
|
|
|
|
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
|
|
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
|
|
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
|
|
|
|
// TODO: Delete these three lines if you don't want the toolbar to
|
|
// be dockable
|
|
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
|
|
EnableDocking(CBRS_ALIGN_ANY);
|
|
DockControlBar(&m_wndToolBar);
|
|
|
|
// If there is an extension DLL, call it's startup function
|
|
LPFNEXSTARTUPPROC StartupProc = ((CWinAdminApp*)AfxGetApp())->GetExtStartupProc();
|
|
if(StartupProc) {
|
|
(*StartupProc)(this->GetSafeHwnd());
|
|
}
|
|
|
|
DWORD dwTid;
|
|
|
|
HANDLE hThread = CreateThread( NULL , 0 , ( LPTHREAD_START_ROUTINE )CMainFrame::InitWarningThread, GetSafeHwnd() , 0 , &dwTid );
|
|
|
|
CloseHandle( hThread );
|
|
|
|
|
|
return 0;
|
|
} // end CMainFrame::OnCreate
|
|
|
|
|
|
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
|
|
CCreateContext* pContext)
|
|
{
|
|
BOOL rtn;
|
|
|
|
rtn = m_wndSplitter.CreateStatic(this, 1, 2);
|
|
#ifdef PUBLISHED_APPS
|
|
if(((CWinAdminApp*)AfxGetApp())->IsPicasso()) {
|
|
rtn |= m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftPane),
|
|
CSize(((CWinAdminApp *)AfxGetApp())->GetTreeWidth(), 300), pContext);
|
|
} else {
|
|
#else
|
|
{
|
|
#endif
|
|
rtn |= m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CAdminTreeView),
|
|
CSize(((CWinAdminApp *)AfxGetApp())->GetTreeWidth(), 300), pContext);
|
|
}
|
|
|
|
rtn |= m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightPane),
|
|
CSize(0, 0), pContext);
|
|
|
|
m_pLeftPane = m_wndSplitter.GetPane(0, 0);
|
|
m_pRightPane = m_wndSplitter.GetPane(0, 1);
|
|
|
|
return rtn;
|
|
} // end CMainFrame::OnCreateClient
|
|
|
|
|
|
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
// TODO: Modify the Window class or styles here by modifying
|
|
// the CREATESTRUCT cs
|
|
cs.x = 3;
|
|
cs.y = 3;
|
|
cs.cx = 635;
|
|
cs.cy = 444;
|
|
|
|
return CFrameWnd::PreCreateWindow(cs);
|
|
} // end CMainFrame::PreCreateWindow
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CMainFrame::AssertValid() const
|
|
{
|
|
CFrameWnd::AssertValid();
|
|
}
|
|
|
|
|
|
void CMainFrame::Dump(CDumpContext& dc) const
|
|
{
|
|
CFrameWnd::Dump(dc);
|
|
}
|
|
|
|
#endif //_DEBUG
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame message handlers
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminChangeView
|
|
//
|
|
// - handles the custom message WM_ADMIN_CHANGEVIEW
|
|
// - this message is sent to the mainframe by CAdminTreeView when a new tree
|
|
// item is selected
|
|
// - lParam holds the info structure for the newly selected tree node
|
|
// and is handed along to CRightPane as the lParam of another
|
|
// WM_WA_CHANGEVIEW message, which CRightPane then handles as it
|
|
// sees fit
|
|
//
|
|
LRESULT CMainFrame::OnAdminChangeView(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the right pane to change his view
|
|
m_pRightPane->SendMessage(WM_ADMIN_CHANGEVIEW, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminChangeView
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminAddServer
|
|
//
|
|
LRESULT CMainFrame::OnAdminAddServer(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the tree view to add server
|
|
m_pLeftPane->SendMessage(WM_ADMIN_ADD_SERVER, wParam, lParam);
|
|
|
|
// tell the right pane to add server
|
|
m_pRightPane->SendMessage(WM_ADMIN_ADD_SERVER, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminAddServer
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminRemoveServer
|
|
//
|
|
// wParam - TRUE if server disappeared, FALSE if via Server Filtering
|
|
// lParam - CServer to remove
|
|
LRESULT CMainFrame::OnAdminRemoveServer(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
ODS( L"CMainFrame!OnAdminRemoveServer\n" );
|
|
|
|
#if 0
|
|
if(wParam) {
|
|
// Is this the currently selected server?
|
|
CWinAdminDoc *doc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
|
|
if((CObject*)lParam == doc->GetCurrentSelectedNode()) {
|
|
CString TitleString;
|
|
CString MessageString;
|
|
|
|
TitleString.LoadString(AFX_IDS_APP_TITLE);
|
|
MessageString.Format(IDS_SERVER_DISAPPEARED, ((CServer*)lParam)->GetName());
|
|
MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
}
|
|
#endif
|
|
// tell the tree view to remove server
|
|
m_pLeftPane->SendMessage(WM_ADMIN_REMOVE_SERVER, wParam, lParam);
|
|
|
|
// tell the right pane to remove server
|
|
m_pRightPane->SendMessage(WM_ADMIN_REMOVE_SERVER, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminRemoveServer
|
|
|
|
//----------------------------------------------------------------------------
|
|
LRESULT CMainFrame::OnAdminAddServerToFavorites( WPARAM wp , LPARAM lp )
|
|
{
|
|
ODS( L"CMainFrame::OnAdminAddServerToFavorites\n" );
|
|
|
|
m_pLeftPane->SendMessage( WM_ADMIN_ADDSERVERTOFAV , wp , lp );
|
|
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CMainFrame::OnAdminRemoveServerFromFavs( WPARAM wp , LPARAM lp )
|
|
{
|
|
ODS( L"CMainFrame::OnAdminRemoveServerFromFavs\n" );
|
|
|
|
return m_pLeftPane->SendMessage( WM_ADMIN_REMOVESERVERFROMFAV , wp , lp );
|
|
}
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminUpdateServer
|
|
//
|
|
LRESULT CMainFrame::OnAdminUpdateServer(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the tree view to update server
|
|
m_pLeftPane->SendMessage(WM_ADMIN_UPDATE_SERVER, wParam, lParam);
|
|
|
|
// tell the right pane to update server
|
|
m_pRightPane->SendMessage(WM_ADMIN_UPDATE_SERVER, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminUpdateServer
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminUpdateProcesses
|
|
//
|
|
LRESULT CMainFrame::OnAdminUpdateProcesses(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the right pane to update processes
|
|
m_pRightPane->SendMessage(WM_ADMIN_UPDATE_PROCESSES, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminUpdateProcesses
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminRemoveProcess
|
|
//
|
|
LRESULT CMainFrame::OnAdminRemoveProcess(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the right pane to remove a process
|
|
m_pRightPane->SendMessage(WM_ADMIN_REMOVE_PROCESS, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminUpdateProcesses
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminAddWinStation
|
|
//
|
|
LRESULT CMainFrame::OnAdminAddWinStation(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the tree view to add a WinStation
|
|
m_pLeftPane->SendMessage(WM_ADMIN_ADD_WINSTATION, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminAddWinStation
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminUpdateWinStation
|
|
//
|
|
LRESULT CMainFrame::OnAdminUpdateWinStation(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the tree view to update WinStation
|
|
m_pLeftPane->SendMessage(WM_ADMIN_UPDATE_WINSTATION, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminUpdateWinStation
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminUpdateWinStations
|
|
//
|
|
LRESULT CMainFrame::OnAdminUpdateWinStations(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the right pane to update WinStations
|
|
m_pRightPane->SendMessage(WM_ADMIN_UPDATE_WINSTATIONS, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminUpdateWinStations
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminRemoveWinStation
|
|
//
|
|
LRESULT CMainFrame::OnAdminRemoveWinStation(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the tree view to remove a WinStation
|
|
m_pLeftPane->SendMessage(WM_ADMIN_REMOVE_WINSTATION, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminRemoveWinStation
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminUpdateDomain
|
|
//
|
|
LRESULT CMainFrame::OnAdminUpdateDomain(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the tree view to update the domain
|
|
m_pLeftPane->SendMessage(WM_ADMIN_UPDATE_DOMAIN, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminUpdateDomain
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminAddDomain
|
|
//
|
|
LRESULT CMainFrame::OnAdminAddDomain(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
return m_pLeftPane->SendMessage(WM_ADMIN_ADD_DOMAIN, wParam, lParam);
|
|
|
|
} // end CMainFrame::OnAdminAddDomain
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminUpdateServerInfo
|
|
//
|
|
LRESULT CMainFrame::OnAdminUpdateServerInfo(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the right pane to update server info
|
|
m_pRightPane->SendMessage(WM_ADMIN_UPDATE_SERVER_INFO, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminUpdateServerInfo
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminRedisplayLicenses
|
|
//
|
|
LRESULT CMainFrame::OnAdminRedisplayLicenses(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
ASSERT(lParam);
|
|
|
|
// tell the right pane to redisplay licenses
|
|
m_pRightPane->SendMessage(WM_ADMIN_REDISPLAY_LICENSES, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminRedisplayLicenses
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAdminViewsReady
|
|
//
|
|
LRESULT CMainFrame::OnAdminViewsReady(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
// tell the left pane that all views are ready
|
|
m_pLeftPane->SendMessage(WM_ADMIN_VIEWS_READY, wParam, lParam);
|
|
|
|
return 0;
|
|
|
|
} // end CMainFrame::OnAdminViewsReady
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnExpandAll
|
|
//
|
|
void CMainFrame::OnExpandAll()
|
|
{
|
|
// tell the tree view to expand all
|
|
m_pLeftPane->SendMessage(WM_ADMIN_EXPANDALL, 0, 0);
|
|
|
|
} // end CMainFrame::OnExpandAll
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnCollapseAll
|
|
//
|
|
void CMainFrame::OnCollapseAll()
|
|
{
|
|
// tell the tree view to collapse all
|
|
m_pLeftPane->SendMessage(WM_ADMIN_COLLAPSEALL, 0, 0);
|
|
|
|
} // end CMainFrame::OnCollapseAll
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnCollapseToServers
|
|
//
|
|
void CMainFrame::OnCollapseToServers()
|
|
{
|
|
// tell the tree view to collapse to servers
|
|
m_pLeftPane->SendMessage(WM_ADMIN_COLLAPSETOSERVERS, 0, 0);
|
|
|
|
} // end CMainFrame::OnCollapseToServers
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnCollapseToDomains
|
|
//
|
|
void CMainFrame::OnCollapseToDomains()
|
|
{
|
|
// tell the tree view to collapse to domains
|
|
m_pLeftPane->SendMessage(WM_ADMIN_COLLAPSETODOMAINS, 0, 0);
|
|
|
|
} // end CMainFrame::OnCollapseToDomains
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnRefresh
|
|
//
|
|
void CMainFrame::OnRefresh()
|
|
{
|
|
// tell the document to do a refresh
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->Refresh();
|
|
|
|
} // end CMainFrame::OnRefresh
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnConnect
|
|
//
|
|
void CMainFrame::OnConnect()
|
|
{
|
|
// We don't ask for confirmation, should we?
|
|
|
|
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
|
|
int view = pDoc->GetCurrentView();
|
|
int page = pDoc->GetCurrentPage();
|
|
|
|
// tell the document
|
|
BOOL user = FALSE;
|
|
if((view == VIEW_SERVER && page == PAGE_USERS)
|
|
|| (view == VIEW_ALL_SERVERS && page == PAGE_AS_USERS)
|
|
|| (view == VIEW_DOMAIN && page == PAGE_DOMAIN_USERS))
|
|
user = TRUE;
|
|
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ConnectWinStation(FALSE, user);
|
|
|
|
} // end CMainFrame::OnConnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeConnect
|
|
//
|
|
void CMainFrame::OnTreeConnect()
|
|
{
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ConnectWinStation(TRUE, FALSE);
|
|
|
|
} // end CMainFrame::OnTreeConnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnDisconnect
|
|
//
|
|
void CMainFrame::OnDisconnect()
|
|
{
|
|
DisconnectHelper(FALSE);
|
|
|
|
} // end CMainFrame::OnDisconnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeDisconnect
|
|
//
|
|
void CMainFrame::OnTreeDisconnect()
|
|
{
|
|
DisconnectHelper(TRUE);
|
|
|
|
} // end CMainFrame::OnTreeDisconnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeDisconnect
|
|
//
|
|
void CMainFrame::DisconnectHelper(BOOL bTree)
|
|
{
|
|
CString TitleString;
|
|
CString MessageString;
|
|
|
|
// Only bother the user if Confirmation is set
|
|
if(((CWinAdminApp*)AfxGetApp())->AskConfirmation()) {
|
|
|
|
TitleString.LoadString(AFX_IDS_APP_TITLE);
|
|
MessageString.LoadString(IDS_WARN_DISCONNECT);
|
|
|
|
if(IDOK != MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OKCANCEL)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
// tell the document
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->DisconnectWinStation(bTree);
|
|
|
|
} // end CMainFrame::DisconnectHelper
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnSendMessage
|
|
//
|
|
void CMainFrame::OnSendMessage()
|
|
{
|
|
SendMessageHelper(FALSE);
|
|
|
|
} // end CMainFrame::OnSendMessage
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeSendMessage
|
|
//
|
|
void CMainFrame::OnTreeSendMessage()
|
|
{
|
|
SendMessageHelper(TRUE);
|
|
|
|
} // end CMainFrame::OnTreeSendMessage
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::SendMessageHelper
|
|
//
|
|
void CMainFrame::SendMessageHelper(BOOL bTree)
|
|
{
|
|
CSendMessageDlg dlg; //AfxGetMainWnd());
|
|
|
|
if(dlg.DoModal() != IDOK || !(*dlg.m_szMessage))
|
|
return;
|
|
|
|
MessageParms *pParms = new MessageParms;
|
|
wcscpy(pParms->MessageTitle, dlg.m_szTitle);
|
|
wcscpy(pParms->MessageBody, dlg.m_szMessage);
|
|
|
|
// tell the document
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->SendWinStationMessage(bTree, pParms);
|
|
|
|
} // end CMainFrame::SendMessageHelper
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnShadow
|
|
//
|
|
void CMainFrame::OnShadow()
|
|
{
|
|
// tell the document to Shadow the WinStation(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ShadowWinStation(FALSE);
|
|
|
|
} // end CMainFrame::OnShadow
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeShadow
|
|
//
|
|
void CMainFrame::OnTreeShadow()
|
|
{
|
|
// tell the document to Shadow the WinStation(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ShadowWinStation(TRUE);
|
|
|
|
} // end CMainFrame::OnTreeShadow
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnReset
|
|
//
|
|
void CMainFrame::OnReset()
|
|
{
|
|
ResetHelper(FALSE);
|
|
|
|
} // end CMainFrame::OnReset
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeReset
|
|
//
|
|
void CMainFrame::OnTreeReset()
|
|
{
|
|
ResetHelper(TRUE);
|
|
|
|
} // end CMainFrame::OnTreeReset
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::ResetHelper
|
|
//
|
|
void CMainFrame::ResetHelper(BOOL bTree)
|
|
{
|
|
CString TitleString;
|
|
CString MessageString;
|
|
|
|
// Only bother the user if Confirmation is set
|
|
if(((CWinAdminApp*)AfxGetApp())->AskConfirmation()) {
|
|
|
|
TitleString.LoadString(AFX_IDS_APP_TITLE);
|
|
MessageString.LoadString(IDS_WARN_RESET);
|
|
|
|
if(IDOK != MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OKCANCEL)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
// tell the document to reset the WinStation(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ResetWinStation(bTree, TRUE);
|
|
|
|
} // end CMainFrame::ResetHelper
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnStatus
|
|
//
|
|
void CMainFrame::OnStatus()
|
|
{
|
|
// tell the document to reset the WinStation(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->StatusWinStation(FALSE);
|
|
|
|
} // end CMainFrame::OnStatus
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeStatus
|
|
//
|
|
void CMainFrame::OnTreeStatus()
|
|
{
|
|
// tell the document to reset the WinStation(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->StatusWinStation(TRUE);
|
|
|
|
} // end CMainFrame::OnTreeStatus
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnLogoff
|
|
//
|
|
void CMainFrame::OnLogoff()
|
|
{
|
|
CString TitleString;
|
|
CString MessageString;
|
|
|
|
// Only bother the user if Confirmation is set
|
|
if(((CWinAdminApp*)AfxGetApp())->AskConfirmation()) {
|
|
|
|
TitleString.LoadString(AFX_IDS_APP_TITLE);
|
|
MessageString.LoadString(IDS_WARN_LOGOFF);
|
|
|
|
if(IDOK != MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OKCANCEL)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
// tell the document to reset the WinStation(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ResetWinStation(FALSE, TRUE);
|
|
|
|
} // end CMainFrame::OnLogoff
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTerminate
|
|
//
|
|
void CMainFrame::OnTerminate()
|
|
{
|
|
CString TitleString;
|
|
CString MessageString;
|
|
|
|
// Only bother the user if Confirmation is set
|
|
if(((CWinAdminApp*)AfxGetApp())->AskConfirmation()) {
|
|
|
|
TitleString.LoadString(AFX_IDS_APP_TITLE);
|
|
MessageString.LoadString(IDS_WARN_TERMINATE);
|
|
|
|
if(IDOK != MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OKCANCEL)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
// tell the document to terminate the processes
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->TerminateProcess();
|
|
|
|
} // end CMainFrame::OnTerminate
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnServerConnect
|
|
//
|
|
void CMainFrame::OnServerConnect()
|
|
{
|
|
// tell the document to connect to the server(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ServerConnect();
|
|
|
|
} // end CMainFrame::OnServerConnect
|
|
|
|
//------------------------------------------------------------
|
|
void CMainFrame::OnAddToFavorites( )
|
|
{
|
|
// ok try following me
|
|
// I'm going to call a method in CWinAdminDoc to determine the current server
|
|
// and view. This will then be forwarded back here via sendmsg and then
|
|
// towards the treeview.
|
|
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ServerAddToFavorites( TRUE );
|
|
}
|
|
|
|
//=-----------------------------------------------------------
|
|
void CMainFrame::OnRemoveFromFavs( )
|
|
{
|
|
ODS( L"CMainFrame::OnRemoveFromFavs\n" );
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ServerAddToFavorites( FALSE );
|
|
}
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnServerDisconnect
|
|
//
|
|
void CMainFrame::OnServerDisconnect()
|
|
{
|
|
// tell the document to connect to the server(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ServerDisconnect();
|
|
|
|
} // end CMainFrame::OnServerDisconnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeDomainConnectAllServers
|
|
//
|
|
void CMainFrame::OnTreeDomainConnectAllServers()
|
|
{
|
|
// tell the document to connect to the server(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->TempDomainConnectAllServers();
|
|
|
|
} // end CMainFrame::OnTreeDomainConnectAllServers
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeDomainDisconnectAllServers
|
|
//
|
|
void CMainFrame::OnTreeDomainDisconnectAllServers()
|
|
{
|
|
// tell the document to connect to the server(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->TempDomainDisconnectAllServers();
|
|
|
|
} // end CMainFrame::OnTreeDomainDisconnectAllServers
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnTreeDomainFindServers
|
|
//
|
|
void CMainFrame::OnTreeDomainFindServers()
|
|
{
|
|
// tell the document to find servers in the domain
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->DomainFindServers();
|
|
|
|
} // end CMainFrame::OnTreeDomainFindServers
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnDomainConnectAllServers
|
|
//
|
|
void CMainFrame::OnDomainConnectAllServers()
|
|
{
|
|
// tell the document to connect to the server(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CurrentDomainConnectAllServers();
|
|
|
|
} // end CMainFrame::OnDomainConnectAllServers
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnDomainDisconnectAllServers
|
|
//
|
|
void CMainFrame::OnDomainDisconnectAllServers()
|
|
{
|
|
// tell the document to connect to the server(s)
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CurrentDomainDisconnectAllServers();
|
|
|
|
} // end CMainFrame::OnDomainDisconnectAllServers
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAllServersConnect
|
|
//
|
|
void CMainFrame::OnAllServersConnect()
|
|
{
|
|
// tell the document to connect to all servers
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ConnectToAllServers();
|
|
|
|
} // end CMainFrame::OnAllServersConnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAllServersDisconnect
|
|
//
|
|
void CMainFrame::OnAllServersDisconnect()
|
|
{
|
|
// tell the document to disconnect from all servers
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->DisconnectFromAllServers();
|
|
|
|
} // end CMainFrame::OnAllServersDisconnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnAllServersFind
|
|
//
|
|
void CMainFrame::OnAllServersFind()
|
|
{
|
|
// tell the document to find all servers in all domains
|
|
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->FindAllServers();
|
|
|
|
} // end CMainFrame::OnAllServersFind
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnPreferences
|
|
//
|
|
void CMainFrame::OnPreferences()
|
|
{
|
|
CPreferencesDlg dlg;
|
|
|
|
dlg.DoModal();
|
|
|
|
} // end CMainFrame::OnPreferences
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateConnect
|
|
//
|
|
void CMainFrame::OnUpdateConnect(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanConnect());
|
|
|
|
} // end CMainFrame::OnUpdateConnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateDisconnect
|
|
//
|
|
void CMainFrame::OnUpdateDisconnect(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanDisconnect());
|
|
|
|
} // end CMainFrame::OnUpdateDisconnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateLogoff
|
|
//
|
|
void CMainFrame::OnUpdateLogoff(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanLogoff());
|
|
|
|
} // end CMainFrame::OnUpdateLogoff
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateMessage
|
|
//
|
|
void CMainFrame::OnUpdateMessage(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanSendMessage());
|
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateRefresh
|
|
//
|
|
void CMainFrame::OnUpdateRefresh(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanRefresh());
|
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateReset
|
|
//
|
|
void CMainFrame::OnUpdateReset(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanReset());
|
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateShadow
|
|
//
|
|
void CMainFrame::OnUpdateShadow(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanShadow());
|
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateStatus
|
|
//
|
|
void CMainFrame::OnUpdateStatus(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanStatus());
|
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateTerminate
|
|
//
|
|
void CMainFrame::OnUpdateTerminate(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTerminate());
|
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateServerConnect
|
|
//
|
|
void CMainFrame::OnUpdateServerConnect(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanServerConnect());
|
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateServerDisconnect
|
|
//
|
|
void CMainFrame::OnUpdateServerDisconnect(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanServerDisconnect());
|
|
|
|
}
|
|
|
|
|
|
void CMainFrame::OnUpdateServerAddToFavorite( CCmdUI *pCmdUI )
|
|
{
|
|
pCmdUI->Enable( !( ( CWinAdminDoc* )( ( CWinAdminApp* )AfxGetApp() )->GetDocument() )->IsAlreadyFavorite() );
|
|
}
|
|
|
|
void CMainFrame::OnUpdateServerRemoveFromFavorite( CCmdUI *pCmdUI )
|
|
{
|
|
pCmdUI->Enable( ( ( CWinAdminDoc* )( ( CWinAdminApp* )AfxGetApp() )->GetDocument() )->IsAlreadyFavorite() );
|
|
}
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateTreeConnect
|
|
//
|
|
void CMainFrame::OnUpdateTreeConnect(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempConnect());
|
|
|
|
} // end CMainFrame::OnUpdateTreeConnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateTreeDisconnect
|
|
//
|
|
void CMainFrame::OnUpdateTreeDisconnect(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempDisconnect());
|
|
|
|
} // end CMainFrame::OnUpdateTreeDisconnect
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateTreeMessage
|
|
//
|
|
void CMainFrame::OnUpdateTreeMessage(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempSendMessage());
|
|
|
|
} // end CMainFrame::OnUpdateTreeMessage
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateTreeReset
|
|
//
|
|
void CMainFrame::OnUpdateTreeReset(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempReset());
|
|
|
|
} // end CMainFrame::OnUpdateTreeReset
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateTreeShadow
|
|
//
|
|
void CMainFrame::OnUpdateTreeShadow(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempShadow());
|
|
|
|
} // end CMainFrame::OnUpdateTreeShadow
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateTreeStatus
|
|
//
|
|
void CMainFrame::OnUpdateTreeStatus(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempStatus());
|
|
|
|
} // end CMainFrame::OnUpdateTreeStatus
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnShowSystemProcesses
|
|
//
|
|
void CMainFrame::OnShowSystemProcesses()
|
|
{
|
|
int state = ((CWinAdminApp*)AfxGetApp())->ShowSystemProcesses();
|
|
((CWinAdminApp*)AfxGetApp())->SetShowSystemProcesses(state^1);
|
|
|
|
// tell the right pane to redisplay processes
|
|
m_pRightPane->SendMessage(WM_ADMIN_REDISPLAY_PROCESSES, 0, 0);
|
|
|
|
} // end CMainFrame::OnShowSystemProcesses()
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateShowSystemProcesses
|
|
//
|
|
void CMainFrame::OnUpdateShowSystemProcesses(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(((CWinAdminApp*)AfxGetApp())->ShowSystemProcesses());
|
|
|
|
} // end CMainFrame::OnUpdateShowSystemProcesses
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateDomainPopupMenu
|
|
//
|
|
void CMainFrame::OnUpdateDomainPopupMenu(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempDomainConnect());
|
|
|
|
} // end CMainFrame::OnUpdateDomainPopupMenu
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateDomainPopupFind
|
|
//
|
|
void CMainFrame::OnUpdateDomainPopupFind(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempDomainFindServers());
|
|
|
|
} // end CMainFrame::OnUpdateDomainPopupFind
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnUpdateDomainMenu
|
|
//
|
|
void CMainFrame::OnUpdateDomainMenu(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanDomainConnect());
|
|
|
|
} // end CMainFrame::OnUpdateDomainMenu
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::OnClose
|
|
//
|
|
void CMainFrame::OnClose()
|
|
{
|
|
GetWindowPlacement(&((CWinAdminApp*)AfxGetApp())->m_Placement);
|
|
|
|
RECT rect;
|
|
m_pLeftPane->GetWindowRect(&rect);
|
|
((CWinAdminApp*)AfxGetApp())->SetTreeWidth(rect.right-rect.left);
|
|
|
|
CFrameWnd::OnClose();
|
|
|
|
} // end CMainFrame::OnClose
|
|
|
|
|
|
/////////////////////////////////////
|
|
// F'N: CMainFrame::ActivateFrame
|
|
//
|
|
void CMainFrame::ActivateFrame(int nCmdShow)
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
WINDOWPLACEMENT *pPlacement =
|
|
((CWinAdminApp *)AfxGetApp())->GetPlacement();
|
|
|
|
if ( pPlacement->length == -1 ) {
|
|
|
|
/*
|
|
* This is the first time that this is called, set the window
|
|
* placement and show state to the previously saved state.
|
|
*/
|
|
pPlacement->length = sizeof(WINDOWPLACEMENT);
|
|
|
|
/*
|
|
* If we have a previously saved placement state: set it.
|
|
*/
|
|
if ( pPlacement->rcNormalPosition.right != -1 ) {
|
|
|
|
if ( nCmdShow != SW_SHOWNORMAL )
|
|
pPlacement->showCmd = nCmdShow;
|
|
else
|
|
nCmdShow = pPlacement->showCmd;
|
|
|
|
SetWindowPlacement(pPlacement);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Perform the parent classes' ActivateFrame().
|
|
*/
|
|
CFrameWnd::ActivateFrame(nCmdShow);
|
|
|
|
} // end CMainFrame::ActivateFrame
|
|
|
|
//---------------------------------------------------------------------------
|
|
// bugid352062
|
|
// Splash message for people who hate to RTFM
|
|
//---------------------------------------------------------------------------
|
|
void CMainFrame::InitWarningThread( PVOID *pvParam )
|
|
{
|
|
// display messagebox
|
|
HWND hwnd = ( HWND )pvParam;
|
|
DWORD dwSessionId;
|
|
|
|
if( ProcessIdToSessionId( GetCurrentProcessId( ) , &dwSessionId ) )
|
|
{
|
|
if( dwSessionId == WTSGetActiveConsoleSessionId() )
|
|
{
|
|
// check if we are to show the dialog box
|
|
// a) if the key does not exist show the dialog
|
|
// b) if the key exist and the value is zero show the dialog
|
|
|
|
HKEY hKey;
|
|
|
|
DWORD dwStatus = RegOpenKeyEx( HKEY_CURRENT_USER , TEXT( "Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\TSADMIN" ) , 0 , KEY_READ , &hKey );
|
|
|
|
if( dwStatus == ERROR_SUCCESS )
|
|
{
|
|
DWORD dwData = 0;
|
|
|
|
DWORD dwSizeofData;
|
|
|
|
dwSizeofData = sizeof( DWORD );
|
|
|
|
RegQueryValueEx( hKey , TEXT( "DisableConsoleWarning" ) , 0 , NULL , ( LPBYTE )&dwData , &dwSizeofData );
|
|
|
|
RegCloseKey( hKey );
|
|
|
|
if( dwData != 0 )
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
::DialogBox( NULL , MAKEINTRESOURCE( IDD_DIALOG_FEATUREWARN ) , hwnd , ( DLGPROC )FWarnDlg );
|
|
}
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Sets regkey DisableConsoleWarning
|
|
//---------------------------------------------------------------------------
|
|
INT_PTR CALLBACK FWarnDlg( HWND hwnd , UINT msg , WPARAM wp , LPARAM lp )
|
|
{
|
|
switch( msg )
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
HICON hIcon = LoadIcon( NULL , IDI_INFORMATION );
|
|
|
|
SendMessage( GetDlgItem( hwnd , IDC_FWICON ) , STM_SETIMAGE, IMAGE_ICON, (LPARAM) hIcon );
|
|
|
|
// center dialog
|
|
|
|
RECT rParent;
|
|
RECT rMe;
|
|
|
|
GetWindowRect( GetParent( hwnd ) , &rParent );
|
|
GetWindowRect( hwnd , &rMe );
|
|
|
|
int xDelta , yDelta;
|
|
|
|
xDelta = ( ( rParent.right - rParent.left ) - ( rMe.right - rMe.left ) ) / 2;
|
|
|
|
if( xDelta < 0 )
|
|
{
|
|
xDelta = 0;
|
|
}
|
|
|
|
yDelta = ( ( rParent.bottom - rParent.top ) - ( rMe.bottom - rMe.top ) ) / 2;
|
|
|
|
if( yDelta < 0 )
|
|
{
|
|
yDelta = 0;
|
|
}
|
|
|
|
SetWindowPos( hwnd , NULL , rParent.left + xDelta , rParent.top + yDelta , 0 , 0 , SWP_NOSIZE );
|
|
}
|
|
|
|
case WM_COMMAND:
|
|
|
|
if( LOWORD( wp ) == IDOK )
|
|
{
|
|
// check the button and save the settings
|
|
HKEY hKey;
|
|
|
|
DWORD dwDisp;
|
|
|
|
DWORD dwStatus = RegCreateKeyEx( HKEY_CURRENT_USER , TEXT( "Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\TSADMIN" ) ,
|
|
0 , NULL , 0 , KEY_ALL_ACCESS , NULL , &hKey , &dwDisp );
|
|
|
|
if( dwStatus == ERROR_SUCCESS )
|
|
{
|
|
DWORD dwBool = 0;
|
|
|
|
if( IsDlgButtonChecked( hwnd , IDC_CHECK_NOMORE ) == BST_CHECKED )
|
|
{
|
|
dwBool = ( DWORD )-1;
|
|
}
|
|
|
|
RegSetValueEx( hKey , TEXT( "DisableConsoleWarning" ), 0 , REG_DWORD , ( LPBYTE )&dwBool , sizeof( dwBool ) );
|
|
|
|
RegCloseKey( hKey );
|
|
}
|
|
|
|
// HKCU\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSADMIN\DisableConsoleWarning (REG_DWORD)
|
|
EndDialog( hwnd , 0 );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//=----------------------------------------------------------------------------------------------
|
|
void CMainFrame::OnTab( )
|
|
{
|
|
ODS( L"CMainFrame::OnTab received\n");
|
|
|
|
// pre tabbing
|
|
// set this state so that we can distinguish how the tabs received focus
|
|
// we can rule out the tab key
|
|
|
|
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
|
|
|
|
pDoc->SetOnTabFlag( );
|
|
|
|
m_pRightPane->SendMessage( WM_ADMIN_TABBED_VIEW , 0 , 0 );
|
|
|
|
pDoc->ResetOnTabFlag( );
|
|
|
|
// end tabbing
|
|
|
|
}
|
|
|
|
//=----------------------------------------------------------------------------------------------
|
|
void CMainFrame::OnShiftTab( )
|
|
{
|
|
ODS( L"CMainFrame::OnShiftTab received\n" );
|
|
|
|
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
|
|
|
|
pDoc->SetOnTabFlag( );
|
|
|
|
m_pRightPane->SendMessage( WM_ADMIN_SHIFTTABBED_VIEW , 0 , 0 );
|
|
|
|
pDoc->ResetOnTabFlag( );
|
|
}
|
|
|
|
//=----------------------------------------------------------------------------------------------
|
|
//= this message is sent from the right pane item in the view
|
|
//
|
|
LRESULT CMainFrame::OnForceTreeViewFocus( WPARAM wp , LPARAM lp )
|
|
{
|
|
m_pLeftPane->SetFocus( );
|
|
|
|
return 0;
|
|
}
|
|
|
|
//=----------------------------------------------------------------------------------------------
|
|
// this is to rotate around the tabs and treeview
|
|
//
|
|
void CMainFrame::OnCtrlTab( )
|
|
{
|
|
ODS( L"CMainFrame::OnCtrlTab received\n" );
|
|
|
|
m_pRightPane->SendMessage( WM_ADMIN_CTRLTABBED_VIEW , 0 , 0 );
|
|
}
|
|
|
|
//=----------------------------------------------------------------------------------------------
|
|
// this is to rotate around the tabs and treeview in the "other" direction
|
|
//
|
|
void CMainFrame::OnCtrlShiftTab( )
|
|
{
|
|
ODS( L"CMainFrame::OnCtrlShiftTab\n" );
|
|
|
|
m_pRightPane->SendMessage( WM_ADMIN_CTRLSHIFTTABBED_VIEW , 0 , 0 );
|
|
}
|
|
|
|
//=-----------------------------------------------------------------------------------------
|
|
void CMainFrame::OnNextPane( )
|
|
{
|
|
ODS( L"CMainFrame::OnNextPane\n" );
|
|
|
|
m_pRightPane->SendMessage( WM_ADMIN_NEXTPANE_VIEW , 0 , 0 );
|
|
}
|
|
|
|
//=-----------------------------------------------------------------------------------------
|
|
void CMainFrame::OnDelFavNode( )
|
|
{
|
|
ODS( L"CMainFrame::OnDelFavNode\n" );
|
|
|
|
m_pLeftPane->SendMessage( WM_ADMIN_DELTREE_NODE , 0 , 0 );
|
|
}
|
|
|
|
//This will find the server with the given name
|
|
//and place the cursor on it. The server may be
|
|
//added to the list if it's not already there
|
|
bool CMainFrame::LocateServer(LPCTSTR sServerName)
|
|
{
|
|
TCHAR szServerName[ 256 ];
|
|
CString cstrTitle;
|
|
CString cstrMsg;
|
|
|
|
CWaitCursor wait;
|
|
|
|
DBGMSG( L"Server to connect to is %s\n" , sServerName );
|
|
|
|
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
|
|
|
|
// resolve name
|
|
// check to see if its an ipv4 address
|
|
|
|
lstrcpy( szServerName , sServerName );
|
|
|
|
WSADATA wsaData;
|
|
if( WSAStartup( 0x202 , &wsaData ) == 0 )
|
|
{
|
|
char szAnsiServerName[ 256 ];
|
|
WideCharToMultiByte( CP_OEMCP ,
|
|
0 ,
|
|
szServerName,
|
|
-1,
|
|
szAnsiServerName ,
|
|
sizeof( szAnsiServerName ),
|
|
NULL ,
|
|
NULL );
|
|
|
|
|
|
int nAddr = 0;
|
|
nAddr = inet_addr( szAnsiServerName );
|
|
|
|
// if this is a valid ipv4 address then lets get the host name
|
|
// otherwise lets fall through and see if its a valid server name
|
|
|
|
if( nAddr != 0 && nAddr != INADDR_NONE )
|
|
{
|
|
ODS( L"Server name is IPV4\n" );
|
|
|
|
struct hostent *pHostEnt;
|
|
pHostEnt = gethostbyaddr( ( char * )&nAddr , 4 , AF_INET );
|
|
|
|
if( pHostEnt != NULL )
|
|
{
|
|
DWORD dwSize;
|
|
|
|
TCHAR szDnsServerName[ 256 ];
|
|
MultiByteToWideChar( CP_OEMCP ,
|
|
0 ,
|
|
pHostEnt->h_name ,
|
|
-1,
|
|
szDnsServerName,
|
|
sizeof( szDnsServerName ) / sizeof( TCHAR ) );
|
|
|
|
dwSize = sizeof( szServerName ) / sizeof( TCHAR );
|
|
|
|
DnsHostnameToComputerName( szDnsServerName , szServerName , &dwSize );
|
|
|
|
}
|
|
else
|
|
{
|
|
// there was an error ( ip addr was probably not valid )
|
|
// display error
|
|
cstrTitle.LoadString( AFX_IDS_APP_TITLE );
|
|
cstrMsg.LoadString( IDS_NO_SERVER );
|
|
|
|
MessageBox( cstrMsg , cstrTitle , MB_OK | MB_ICONINFORMATION );
|
|
|
|
WSACleanup();
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
}
|
|
|
|
WSACleanup();
|
|
}
|
|
|
|
|
|
CServer *pServer = pDoc->FindServerByName( szServerName );
|
|
|
|
|
|
if( pServer == NULL )
|
|
{
|
|
TCHAR szDomainName[ 256 ];
|
|
|
|
// this means that the server is not in the list
|
|
// let's find out what domain this server belongs to
|
|
DBGMSG( L"%s could not be found in the server list\n" , szServerName );
|
|
|
|
// Verify it's a terminal server we can connect to.
|
|
HANDLE hTerminalServer = NULL;
|
|
|
|
hTerminalServer = WinStationOpenServer( szServerName );
|
|
|
|
if( hTerminalServer == NULL )
|
|
{
|
|
DBGMSG( L"WinstationOpenServer failed with %d\n" , GetLastError( ) );
|
|
cstrTitle.LoadString( AFX_IDS_APP_TITLE );
|
|
cstrMsg.LoadString( IDS_NO_SERVER );
|
|
MessageBox( cstrMsg , cstrTitle , MB_OK | MB_ICONINFORMATION );
|
|
return false;
|
|
}
|
|
|
|
WinStationCloseServer( hTerminalServer );
|
|
|
|
|
|
DSROLE_PRIMARY_DOMAIN_INFO_BASIC *pDsRPDIB = NULL;
|
|
|
|
DWORD dwStatus = DsRoleGetPrimaryDomainInformation(
|
|
szServerName ,
|
|
DsRolePrimaryDomainInfoBasic,
|
|
( PBYTE * )&pDsRPDIB );
|
|
|
|
DBGMSG( L"DsRoleGetPrimaryDomainInformation returned 0x%x\n" , dwStatus );
|
|
|
|
|
|
if( dwStatus == ERROR_SUCCESS && pDsRPDIB != NULL )
|
|
{
|
|
lstrcpy( szDomainName , pDsRPDIB->DomainNameFlat );
|
|
|
|
DsRoleFreeMemory( pDsRPDIB );
|
|
}
|
|
|
|
if( dwStatus != ERROR_SUCCESS )
|
|
{
|
|
// otherwise the server probably does not exist or its on
|
|
// a non-trusted domain
|
|
LPTSTR pBuffer = NULL;
|
|
|
|
cstrTitle.LoadString( AFX_IDS_APP_TITLE );
|
|
// cstrMsg.LoadString( IDS_NO_SERVER );
|
|
|
|
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM,
|
|
NULL, //ignored
|
|
dwStatus , //message ID
|
|
MAKELANGID( LANG_NEUTRAL, SUBLANG_NEUTRAL ), //message language
|
|
(LPTSTR)&pBuffer, //address of buffer pointer
|
|
0, //minimum buffer size
|
|
NULL );
|
|
|
|
if( pBuffer != NULL )
|
|
{
|
|
cstrMsg.Format( IDS_NOSERVER_REASON , pBuffer );
|
|
|
|
LocalFree( pBuffer );
|
|
}
|
|
else
|
|
{
|
|
cstrMsg.Format( IDS_NOSERVER_REASON , TEXT("" ) );
|
|
}
|
|
|
|
MessageBox( cstrMsg , cstrTitle , MB_OK | MB_ICONINFORMATION );
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
// find the domain
|
|
|
|
BOOL bFound = FALSE;
|
|
|
|
CObList *pDomainList = pDoc->GetDomainList();
|
|
|
|
POSITION pos = pDomainList->GetHeadPosition();
|
|
|
|
while( pos )
|
|
{
|
|
CDomain *pDomain = ( CDomain* )pDomainList->GetNext( pos );
|
|
|
|
if( lstrcmpi( pDomain->GetName( ) , szDomainName ) == 0 )
|
|
{
|
|
bFound = TRUE;
|
|
|
|
CServer *pServer = new CServer( pDomain , szServerName , FALSE , FALSE );
|
|
|
|
if( pServer == NULL )
|
|
{
|
|
break;
|
|
}
|
|
|
|
pServer->SetManualFind();
|
|
// add server to list
|
|
pDoc->AddServer( pServer );
|
|
|
|
SendMessage( WM_ADMIN_ADD_SERVER , ( WPARAM )TVI_SORT , ( LPARAM )pServer );
|
|
|
|
m_pLeftPane->SendMessage( WM_ADMIN_GOTO_SERVER , 0 , ( LPARAM )pServer );
|
|
|
|
break;
|
|
}
|
|
}
|
|
if( !bFound )
|
|
{
|
|
CDomain *pDomain = new CDomain( szDomainName );
|
|
|
|
if( pDomain == NULL )
|
|
return false;
|
|
|
|
pDoc->AddDomain( pDomain );
|
|
|
|
m_pLeftPane->SendMessage( WM_ADMIN_ADD_DOMAIN , (WPARAM)NULL , ( LPARAM )pDomain );
|
|
|
|
CServer *pServer = new CServer( pDomain , szServerName , FALSE , FALSE );
|
|
|
|
if( pServer == NULL )
|
|
return false;
|
|
|
|
pServer->SetManualFind();
|
|
// add server to list
|
|
pDoc->AddServer( pServer );
|
|
|
|
SendMessage( WM_ADMIN_ADD_SERVER , ( WPARAM )TVI_SORT , ( LPARAM )pServer );
|
|
|
|
m_pLeftPane->SendMessage( WM_ADMIN_GOTO_SERVER , 0 , ( LPARAM )pServer );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// scroll to server
|
|
DBGMSG( L"Server %s is in the list\n",szServerName );
|
|
|
|
if( pServer->IsState(SS_DISCONNECTING) )
|
|
{
|
|
TCHAR buf[ 256 ];
|
|
ODS( L"but it's gone away so we're not jumping to server\n" );
|
|
cstrTitle.LoadString( AFX_IDS_APP_TITLE );
|
|
cstrMsg.LoadString( IDS_CURRENT_DISCON );
|
|
|
|
wsprintf( buf , cstrMsg , szServerName );
|
|
MessageBox( buf , cstrTitle , MB_OK | MB_ICONINFORMATION );
|
|
|
|
return false;
|
|
}
|
|
|
|
if( pServer->GetTreeItem( ) == NULL )
|
|
{
|
|
ODS( L"this server has no association to the tree add it now\n" );
|
|
|
|
SendMessage( WM_ADMIN_ADD_SERVER , ( WPARAM )TVI_SORT , ( LPARAM )pServer );
|
|
}
|
|
|
|
m_pLeftPane->SendMessage( WM_ADMIN_GOTO_SERVER , 0 , ( LPARAM )pServer );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
//=-----------------------------------------------------------------------------------------
|
|
void CMainFrame::OnFindServer( )
|
|
{
|
|
CMyDialog dlg;
|
|
|
|
if( dlg.DoModal( ) == IDOK )
|
|
{
|
|
if (LocateServer(dlg.m_cstrServerName));
|
|
m_pLeftPane->SendMessage(WM_ADMIN_CONNECT_TO_SERVER, 0, 0);
|
|
}
|
|
}
|
|
|
|
//=-----------------------------------------------------------------
|
|
LRESULT CMainFrame::OnAdminGetTVStates( WPARAM wp , LPARAM lp )
|
|
{
|
|
ODS( L"CMainFrame::OnAdminGetTVStates\n" );
|
|
return m_pLeftPane->SendMessage( WM_ADMIN_GET_TV_STATES , 0 , 0 );
|
|
}
|
|
|
|
//=-----------------------------------------------------------------
|
|
LRESULT CMainFrame::OnAdminUpdateTVStates( WPARAM , LPARAM )
|
|
{
|
|
ODS( L"CMainFrame::OnAdminUpdateTVStates\n" );
|
|
return m_pLeftPane->SendMessage( WM_ADMIN_UPDATE_TVSTATE , 0 , 0 );
|
|
}
|
|
|
|
//=-----------------------------------------------------------------
|
|
void CMainFrame::OnEmptyFavorites( )
|
|
{
|
|
ODS( L"CMainFrame!OnEmptyFavorites\n" );
|
|
|
|
m_pLeftPane->SendMessage( IDM_ALLSERVERS_EMPTYFAVORITES , 0 , 0 );
|
|
|
|
}
|
|
|
|
void CMainFrame::OnUpdateEmptyFavs( CCmdUI* pCmdUI )
|
|
{
|
|
BOOL b = ( BOOL )m_pLeftPane->SendMessage( WM_ISFAVLISTEMPTY , 0 , 0 );
|
|
|
|
pCmdUI->Enable( !b );
|
|
}
|
|
//=-----------------------------------------------------------------
|
|
#ifdef _STRESS_BUILD
|
|
void CMainFrame::OnAddAllServersToFavorites( )
|
|
{
|
|
ODS( L"!OnAddAllServersToFavorites -- if you're seeing this you're running a special stress build\n" );
|
|
|
|
// loop through every server and add to fav's
|
|
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
|
|
|
|
CObList *pServerList = pDoc->GetServerList();
|
|
|
|
POSITION pos = pServerList->GetHeadPosition();
|
|
|
|
while( pos )
|
|
{
|
|
CServer *pServer = ( CServer* )pServerList->GetNext( pos );
|
|
|
|
if( pServer != NULL &&
|
|
!pServer->IsState( SS_DISCONNECTING ) &&
|
|
pServer->GetTreeItemFromFav() == NULL )
|
|
{
|
|
m_pLeftPane->SendMessage( WM_ADMIN_ADDSERVERTOFAV , 0 , ( LPARAM )pServer );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//=-----------------------------------------------------------------
|
|
void CMainFrame::OnRunStress( )
|
|
{
|
|
ODS( L"OnRunStress! Stress starting...\n" );
|
|
|
|
AfxBeginThread((AFX_THREADPROC)RunStress , ( PVOID )m_pLeftPane );
|
|
|
|
}
|
|
|
|
//=-----------------------------------------------------------------
|
|
void CMainFrame::OnRunStressLite( )
|
|
{
|
|
ODS( L"OnRunStressLite! Stress lite starting...\n" );
|
|
|
|
AfxBeginThread((AFX_THREADPROC)RunStressLite , ( PVOID )m_pLeftPane );
|
|
|
|
}
|
|
|
|
//=-----------------------------------------------------------------
|
|
DWORD RunStressLite( PVOID pv )
|
|
{
|
|
CWnd *pLeftPane = ( CWnd * )pv;
|
|
|
|
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
|
|
|
|
CObList *pDomainList = pDoc->GetDomainList();
|
|
|
|
CFrameWnd *p = (CFrameWnd*)pDoc->GetMainWnd();
|
|
|
|
// get all domains to start enumerating
|
|
|
|
pDoc->FindAllServers( );
|
|
|
|
int nStress = 0;
|
|
|
|
while( 1 )
|
|
{
|
|
|
|
DBGMSG( L"Stress lite run #%d\n" , nStress );
|
|
|
|
Sleep( 2 * 1000 * 60 );
|
|
|
|
// add all servers to favorites
|
|
|
|
ODS( L"STRES RUN! Adding all servers to favorites\n" );
|
|
|
|
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_FAVALLADD , ( LPARAM )p->GetSafeHwnd( ) );
|
|
|
|
pLeftPane->SendMessage( WM_ADMIN_EXPANDALL , 0 , 0 );
|
|
|
|
// wait 1 minutes
|
|
|
|
Sleep( 1 * 1000 * 60 );
|
|
|
|
// remove all servers from favorites
|
|
ODS( L"STRESS RUN! emptying favorites\n" );
|
|
|
|
pLeftPane->SendMessage( IDM_ALLSERVERS_EMPTYFAVORITES , 1 , 0 );
|
|
|
|
nStress++;
|
|
|
|
// start over ( no end );
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//=-----------------------------------------------------------------
|
|
DWORD RunStress( PVOID pv )
|
|
{
|
|
CWnd *pLeftPane = ( CWnd * )pv;
|
|
|
|
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
|
|
|
|
CObList *pDomainList = pDoc->GetDomainList();
|
|
|
|
CFrameWnd *p = (CFrameWnd*)pDoc->GetMainWnd();
|
|
|
|
|
|
// select each domain connect to each domain
|
|
|
|
POSITION pos = pDomainList->GetHeadPosition();
|
|
|
|
while( pos )
|
|
{
|
|
// Get a pointer to the domain
|
|
|
|
CDomain *pDomain = (CDomain*)pDomainList->GetNext(pos);
|
|
|
|
// If this domain isn't currently enumerating servers, tell it to
|
|
|
|
if( !pDomain->GetThreadPointer( ) )
|
|
{
|
|
// refresh server
|
|
if( lstrcmpi( pDomain->GetName( ) , L"ASIA" ) == 0 ||
|
|
lstrcmpi( pDomain->GetName( ) , L"HAIFA" ) == 0 )
|
|
{
|
|
DBGMSG( L"STRESS RUN! Enumerating %s\n", pDomain->GetName( ) );
|
|
|
|
pDomain->StartEnumerating();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
while( 1 )
|
|
{
|
|
// wait a half a second.
|
|
|
|
Sleep( 1 * 10 * 1000 );
|
|
|
|
// pLeftPane->SendMessage( WM_ADMIN_COLLAPSEALL , 0 , 0 );
|
|
|
|
// connect to them all
|
|
|
|
ODS( L"\nSTRESS RUN! Connecting to all servers\n\n" );
|
|
|
|
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_CONNECT,( LPARAM )p->GetSafeHwnd( ) );
|
|
// pDoc->ConnectToAllServers();
|
|
|
|
Sleep( 1 * 30 * 1000 );
|
|
|
|
// pLeftPane->SendMessage( WM_ADMIN_EXPANDALL , 0 , 0 );
|
|
|
|
// disconnect them all
|
|
|
|
ODS( L"\nSTRESS RUN! Disconnecting from all servers\n\n" );
|
|
|
|
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_DISCONNECT,( LPARAM )p->GetSafeHwnd( ) );
|
|
|
|
// pDoc->DisconnectFromAllServers( );
|
|
|
|
ODS( L"\nSTRESS RUN! waiting for completion\n\n" );
|
|
|
|
while( g_fWaitForAllServersToDisconnect );
|
|
|
|
ODS( L"\nSTRESS RUN! done completing\n\n" );
|
|
|
|
// pLeftPane->SendMessage( WM_ADMIN_COLLAPSEALL , 0 , 0 );
|
|
|
|
// add all to favorites
|
|
|
|
ODS( L"\nSTRESS RUN! Adding all servers to favorites\n\n" );
|
|
|
|
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_FAVALLADD , ( LPARAM )p->GetSafeHwnd( ) );
|
|
|
|
// pLeftPane->SendMessage( WM_ADMIN_EXPANDALL , 0 , 0 );
|
|
|
|
// connect to them all
|
|
|
|
Sleep( 1 * 60 * 1000 );
|
|
|
|
ODS( L"\nSTRESS RUN! Connecting phase 2 to all servers\n\n" );
|
|
|
|
// pDoc->ConnectToAllServers();
|
|
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_CONNECT,( LPARAM )p->GetSafeHwnd( ) );
|
|
|
|
Sleep( 1 * 30 * 1000 );
|
|
|
|
ODS( L"\nSTRESS RUN! Disconnecting phase 2 from all servers\n\n" );
|
|
|
|
// pDoc->DisconnectFromAllServers( );
|
|
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_DISCONNECT,( LPARAM )p->GetSafeHwnd( ) );
|
|
|
|
while( g_fWaitForAllServersToDisconnect );
|
|
|
|
// remove from favs
|
|
|
|
ODS( L"STRESS RUN! emptying favorites\n" );
|
|
|
|
pLeftPane->SendMessage( IDM_ALLSERVERS_EMPTYFAVORITES , 1 , 0 );
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#endif |