513 lines
14 KiB
C++
513 lines
14 KiB
C++
|
/**********************************************************************/
|
|||
|
/** Microsoft Windows/NT **/
|
|||
|
/** Copyright(c) Microsoft Corp., 1991 **/
|
|||
|
/**********************************************************************/
|
|||
|
|
|||
|
/*
|
|||
|
srvprop.cxx
|
|||
|
Class definitions for the SERVER_PROPERTIES class.
|
|||
|
|
|||
|
This file contains the class declarations for the SERVER_PROPERTIES.
|
|||
|
The SERVER_PROPERTIES class implements the Server Manager main property
|
|||
|
sheet.
|
|||
|
|
|||
|
FILE HISTORY:
|
|||
|
NarenG 1-Oct-1992 Stole from NETUI server manager.
|
|||
|
Removed LM specific stuff and put AFP
|
|||
|
specific stuff
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
#define INCL_NET
|
|||
|
#define INCL_WINDOWS
|
|||
|
#define INCL_WINDOWS_GDI
|
|||
|
#define INCL_NETERRORS
|
|||
|
#define INCL_DOSERRORS
|
|||
|
#define INCL_NETLIB
|
|||
|
#include <lmui.hxx>
|
|||
|
|
|||
|
#define INCL_BLT_WINDOW
|
|||
|
#define INCL_BLT_DIALOG
|
|||
|
#define INCL_BLT_CONTROL
|
|||
|
#define INCL_BLT_MISC
|
|||
|
#define INCL_BLT_CLIENT
|
|||
|
#define INCL_BLT_MSGPOPUP
|
|||
|
#define INCL_BLT_SPIN_GROUP
|
|||
|
#define INCL_BLT_GROUP
|
|||
|
#include <blt.hxx>
|
|||
|
|
|||
|
#if defined(DEBUG)
|
|||
|
static const CHAR szFileName[] = __FILE__;
|
|||
|
#define _FILENAME_DEFINED_ONCE szFileName
|
|||
|
#endif // DEBUG
|
|||
|
|
|||
|
#include <uiassert.hxx>
|
|||
|
#include <dbgstr.hxx>
|
|||
|
|
|||
|
#include <lmsrvres.hxx>
|
|||
|
|
|||
|
extern "C"
|
|||
|
{
|
|||
|
#include <afpmgr.h>
|
|||
|
#include <macfile.h>
|
|||
|
|
|||
|
} // extern "C"
|
|||
|
|
|||
|
#include <srvprop.hxx>
|
|||
|
#include <volumes.hxx>
|
|||
|
#include <sessions.hxx>
|
|||
|
#include <openfile.hxx>
|
|||
|
#include <util.hxx>
|
|||
|
#include <server.hxx>
|
|||
|
|
|||
|
|
|||
|
#define PATH_SEPARATOR TCH('\\')
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// This macro is used in the SERVER_PROPERTIES::OnCommand() method to
|
|||
|
// invoke the appropriate dialog when one of the graphical buttons is
|
|||
|
// pressed. If DIALOG_WINDOW's destructor were virtual, we could do
|
|||
|
// all of this in a common worker function, thus reducing code size.
|
|||
|
//
|
|||
|
// NOTE: This macro assumes that the dialog constructor takes an HWND
|
|||
|
// and a AFP_SERVER_HANDLE. This macro further assumes that there
|
|||
|
// is a variable named _hserver of type AFP_SERVER_HANDLE in some
|
|||
|
// visible scope.
|
|||
|
//
|
|||
|
|
|||
|
#define SUBPROPERTY( DlgClass ) \
|
|||
|
if( TRUE ) \
|
|||
|
{ \
|
|||
|
DlgClass * pDlg = new DlgClass( QueryHwnd(), \
|
|||
|
_hServer, \
|
|||
|
_pszServerName ); \
|
|||
|
\
|
|||
|
DWORD err = ( pDlg == NULL ) ? ERROR_NOT_ENOUGH_MEMORY \
|
|||
|
: pDlg->Process(); \
|
|||
|
\
|
|||
|
if( err != NERR_Success ) \
|
|||
|
{ \
|
|||
|
MsgPopup( this, err ); \
|
|||
|
} \
|
|||
|
\
|
|||
|
delete pDlg; \
|
|||
|
\
|
|||
|
RepaintNow(); \
|
|||
|
Refresh(); \
|
|||
|
\
|
|||
|
return TRUE; \
|
|||
|
} \
|
|||
|
else
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// SERVER_PROPERTIES methods.
|
|||
|
//
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
|
|||
|
NAME: SERVER_PROPERTIES :: SERVER_PROPERTIES
|
|||
|
|
|||
|
SYNOPSIS: SERVER_PROPERTIES class constructor.
|
|||
|
|
|||
|
ENTRY: hWndOwner - Handle to the "owning" window.
|
|||
|
|
|||
|
pszServerName - Name of the target server.
|
|||
|
|
|||
|
EXIT: The object is constructed.
|
|||
|
|
|||
|
RETURNS: No return value.
|
|||
|
|
|||
|
NOTES: All SERVER_PROPERTIES methods assume that the current
|
|||
|
user has sufficient privilege to adminster the target
|
|||
|
server.
|
|||
|
|
|||
|
HISTORY:
|
|||
|
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
|
|||
|
|
|||
|
********************************************************************/
|
|||
|
SERVER_PROPERTIES :: SERVER_PROPERTIES( HWND hWndOwner,
|
|||
|
AFP_SERVER_HANDLE hServer,
|
|||
|
const TCHAR * pszServerName )
|
|||
|
: DIALOG_WINDOW( IDD_SERVER_PROPERTIES, hWndOwner ),
|
|||
|
_pszServerName( pszServerName ),
|
|||
|
_sltCurrentActiveSessions( this, IDSP_DT_CURRENT_SESSIONS ),
|
|||
|
_sltCurrentOpenFiles( this, IDSP_DT_CURRENT_OPENFILES ),
|
|||
|
_sltCurrentFileLocks( this, IDSP_DT_CURRENT_FILELOCKS ),
|
|||
|
_hServer( hServer ),
|
|||
|
/* MSKK NaotoN Appended for Localizing into Japanese 8/24/93 */
|
|||
|
#ifdef JAPAN
|
|||
|
_fontHelv( (TCHAR *)"<EFBFBD>l<EFBFBD>r <20>S<EFBFBD>V<EFBFBD>b<EFBFBD>N", FIXED_PITCH | FF_MODERN, 8, FONT_ATT_DEFAULT ),
|
|||
|
#else
|
|||
|
_fontHelv( FONT_DEFAULT ),
|
|||
|
#endif
|
|||
|
/* end */
|
|||
|
_gbUsers( this,
|
|||
|
IDSP_GB_USERS,
|
|||
|
MAKEINTRESOURCE( IDBM_USERS )),
|
|||
|
_gbVolumes( this,
|
|||
|
IDSP_GB_VOLUMES,
|
|||
|
MAKEINTRESOURCE(IDBM_FILES) ),
|
|||
|
_gbOpenFiles( this,
|
|||
|
IDSP_GB_OPENFILES,
|
|||
|
MAKEINTRESOURCE(IDBM_OPENRES) ),
|
|||
|
_gbServerParms( this,
|
|||
|
IDSP_GB_SERVERPARMS,
|
|||
|
MAKEINTRESOURCE(IDBM_SERVERPARMS) )
|
|||
|
{
|
|||
|
|
|||
|
AUTO_CURSOR Cursor;
|
|||
|
|
|||
|
//
|
|||
|
// Let's make sure everything constructed OK.
|
|||
|
//
|
|||
|
|
|||
|
if( QueryError() != NERR_Success )
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if( !_fontHelv )
|
|||
|
{
|
|||
|
ReportError( _fontHelv.QueryError() );
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Display the dynamic server data.
|
|||
|
//
|
|||
|
|
|||
|
DWORD err = Refresh();
|
|||
|
|
|||
|
if ( err != NO_ERROR )
|
|||
|
{
|
|||
|
ReportError( err );
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Initialize our magic button bar.
|
|||
|
//
|
|||
|
|
|||
|
err = SetupButtonBar();
|
|||
|
|
|||
|
if( err != NERR_Success )
|
|||
|
{
|
|||
|
ReportError( err );
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Set the dialog caption.
|
|||
|
//
|
|||
|
|
|||
|
err = ::SetCaption( this, IDS_CAPTION_PROPERTIES, _pszServerName );
|
|||
|
|
|||
|
if( err != NERR_Success )
|
|||
|
{
|
|||
|
ReportError( err );
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
} // SERVER_PROPERTIES :: SERVER_PROPERTIES
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
|
|||
|
NAME: SERVER_PROPERTIES :: ~SERVER_PROPERTIES
|
|||
|
|
|||
|
SYNOPSIS: SERVER_PROPERTIES class destructor.
|
|||
|
|
|||
|
ENTRY: None.
|
|||
|
|
|||
|
EXIT: The object is destroyed.
|
|||
|
|
|||
|
RETURNS: No return value.
|
|||
|
|
|||
|
NOTES:
|
|||
|
|
|||
|
HISTORY:
|
|||
|
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
|
|||
|
|
|||
|
********************************************************************/
|
|||
|
SERVER_PROPERTIES :: ~SERVER_PROPERTIES()
|
|||
|
{
|
|||
|
|
|||
|
//
|
|||
|
// This space intentionally left blank
|
|||
|
//
|
|||
|
|
|||
|
} // SERVER_PROPERTIES :: ~SERVER_PROPERTIES
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
|
|||
|
NAME: SERVER_PROPERTIES :: OnCommand
|
|||
|
|
|||
|
SYNOPSIS: This method is called whenever a WM_COMMAND message
|
|||
|
is sent to the dialog procedure. In this case, we're
|
|||
|
only interested in commands sent as a result of the
|
|||
|
user clicking one of the graphical buttons.
|
|||
|
|
|||
|
ENTRY: cid - The control ID from the
|
|||
|
generating control.
|
|||
|
|
|||
|
lParam - Varies.
|
|||
|
|
|||
|
EXIT: The command has been handled.
|
|||
|
|
|||
|
RETURNS: BOOL - TRUE if we handled the command.
|
|||
|
FALSE if we did not handle
|
|||
|
the command.
|
|||
|
|
|||
|
NOTES:
|
|||
|
|
|||
|
HISTORY:
|
|||
|
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
|
|||
|
|
|||
|
********************************************************************/
|
|||
|
BOOL SERVER_PROPERTIES :: OnCommand( const CONTROL_EVENT & event )
|
|||
|
{
|
|||
|
AUTO_CURSOR Cursor;
|
|||
|
|
|||
|
switch ( event.QueryCid() )
|
|||
|
{
|
|||
|
case IDSP_GB_USERS:
|
|||
|
|
|||
|
//
|
|||
|
// The Users dialog.
|
|||
|
//
|
|||
|
|
|||
|
SUBPROPERTY( SESSIONS_DIALOG );
|
|||
|
break;
|
|||
|
|
|||
|
case IDSP_GB_VOLUMES:
|
|||
|
|
|||
|
//
|
|||
|
// The Files dialog.
|
|||
|
//
|
|||
|
|
|||
|
SUBPROPERTY( VOLUMES_DIALOG );
|
|||
|
break;
|
|||
|
|
|||
|
case IDSP_GB_OPENFILES:
|
|||
|
|
|||
|
//
|
|||
|
// The In Use dialog.
|
|||
|
//
|
|||
|
|
|||
|
SUBPROPERTY( OPENS_DIALOG );
|
|||
|
break;
|
|||
|
|
|||
|
case IDSP_GB_SERVERPARMS:
|
|||
|
|
|||
|
//
|
|||
|
// The Server Parameters dialog
|
|||
|
//
|
|||
|
|
|||
|
SUBPROPERTY( SERVER_PARAMETERS_DIALOG );
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
|
|||
|
//
|
|||
|
// If we made it this far, then we're not interested
|
|||
|
// in the command.
|
|||
|
//
|
|||
|
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
} // SERVER_PROPERTIES :: OnCommand
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
|
|||
|
NAME: SERVER_PROPERTIES :: QueryHelpContext
|
|||
|
|
|||
|
SYNOPSIS: This function returns the appropriate help context
|
|||
|
value (HC_*) for this particular dialog.
|
|||
|
|
|||
|
ENTRY: None.
|
|||
|
|
|||
|
EXIT: None.
|
|||
|
|
|||
|
RETURNS: ULONG - The help context for this
|
|||
|
dialog.
|
|||
|
|
|||
|
NOTES:
|
|||
|
|
|||
|
HISTORY:
|
|||
|
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
|
|||
|
|
|||
|
********************************************************************/
|
|||
|
ULONG SERVER_PROPERTIES :: QueryHelpContext( void )
|
|||
|
{
|
|||
|
return HC_SERVER_PROPERTIES;
|
|||
|
|
|||
|
} // SERVER_PROPERITES :: QueryHelpContext
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
|
|||
|
NAME: SERVER_PROPERTIES :: Refresh
|
|||
|
|
|||
|
SYNOPSIS: This method will display any server data which may
|
|||
|
need to be refreshed during the lifetime of the
|
|||
|
properties dialog. This includes the number of
|
|||
|
active sessions, open files, etc.
|
|||
|
|
|||
|
ENTRY: None.
|
|||
|
|
|||
|
EXIT: The dynamic server data has been displayed.
|
|||
|
|
|||
|
RETURNS: No return value.
|
|||
|
|
|||
|
NOTES:
|
|||
|
|
|||
|
HISTORY:
|
|||
|
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
|
|||
|
|
|||
|
********************************************************************/
|
|||
|
DWORD SERVER_PROPERTIES :: Refresh( VOID )
|
|||
|
{
|
|||
|
//
|
|||
|
// This may take a while...
|
|||
|
//
|
|||
|
|
|||
|
AUTO_CURSOR Cursor;
|
|||
|
|
|||
|
//
|
|||
|
// This string will contain our "??" string.
|
|||
|
//
|
|||
|
|
|||
|
const TCHAR * pszNotAvail = SZ("??");
|
|||
|
|
|||
|
//
|
|||
|
// Retrieve the statitistics server info.
|
|||
|
//
|
|||
|
|
|||
|
PAFP_STATISTICS_INFO pAfpStats;
|
|||
|
|
|||
|
DWORD err = ::AfpAdminStatisticsGet( _hServer, (LPBYTE*)&pAfpStats );
|
|||
|
|
|||
|
|
|||
|
if( err == NO_ERROR )
|
|||
|
{
|
|||
|
_sltCurrentActiveSessions.Enable( TRUE );
|
|||
|
_sltCurrentActiveSessions.SetValue( pAfpStats->stat_CurrentSessions);
|
|||
|
|
|||
|
_sltCurrentOpenFiles.Enable( TRUE );
|
|||
|
_sltCurrentOpenFiles.SetValue( pAfpStats->stat_CurrentFilesOpen );
|
|||
|
|
|||
|
_sltCurrentFileLocks.Enable( TRUE );
|
|||
|
_sltCurrentFileLocks.SetValue( pAfpStats->stat_CurrentFileLocks );
|
|||
|
|
|||
|
::AfpAdminBufferFree( pAfpStats );
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_sltCurrentActiveSessions.SetText( pszNotAvail );
|
|||
|
_sltCurrentActiveSessions.Enable( FALSE );
|
|||
|
|
|||
|
_sltCurrentOpenFiles.SetText( pszNotAvail );
|
|||
|
_sltCurrentOpenFiles.Enable( FALSE );
|
|||
|
|
|||
|
_sltCurrentFileLocks.SetText( pszNotAvail );
|
|||
|
_sltCurrentFileLocks.Enable( FALSE );
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
return err;
|
|||
|
|
|||
|
} // SERVER_PROPERTIES :: Refresh
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
|
|||
|
NAME: SERVER_PROPERTIES :: SetupButtonBar
|
|||
|
|
|||
|
SYNOPSIS: The method initializes the magic scrolling button bar.
|
|||
|
|
|||
|
ENTRY: None.
|
|||
|
|
|||
|
EXIT: The button bar has been initialized.
|
|||
|
|
|||
|
RETURNS: APIERR - Any errors encountered.
|
|||
|
|
|||
|
NOTES:
|
|||
|
|
|||
|
HISTORY:
|
|||
|
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
|
|||
|
|
|||
|
********************************************************************/
|
|||
|
APIERR SERVER_PROPERTIES :: SetupButtonBar( VOID )
|
|||
|
{
|
|||
|
//
|
|||
|
// Setup the graphical buttons.
|
|||
|
//
|
|||
|
|
|||
|
InitializeButton( &_gbUsers, IDS_BUTTON_USERS, NULL );
|
|||
|
InitializeButton( &_gbVolumes, IDS_BUTTON_VOLUMES, NULL );
|
|||
|
InitializeButton( &_gbOpenFiles, IDS_BUTTON_OPENFILES, NULL );
|
|||
|
InitializeButton( &_gbServerParms,IDS_BUTTON_SERVERPARMS,NULL );
|
|||
|
|
|||
|
//
|
|||
|
// Success!
|
|||
|
//
|
|||
|
|
|||
|
return NO_ERROR;
|
|||
|
|
|||
|
} // SERVER_PROPERTIES :: SetupButtonBar
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
|
|||
|
NAME: SERVER_PROPERTIES :: InitializeButton
|
|||
|
|
|||
|
SYNOPSIS: Initialize a single graphical button for use in
|
|||
|
the graphical button bar.
|
|||
|
|
|||
|
ENTRY: pgb - Pointer to a GRAPHICAL_BUTTON.
|
|||
|
|
|||
|
msg - The resource ID of the string
|
|||
|
to be used as button text.
|
|||
|
|
|||
|
bmid - The bitmap ID for the button
|
|||
|
status bitmap. This is the
|
|||
|
tiny bitmap displayed in the
|
|||
|
upper left corner of the button.
|
|||
|
|
|||
|
EXIT: The button has been initialized.
|
|||
|
|
|||
|
RETURNS: No return value.
|
|||
|
|
|||
|
NOTES:
|
|||
|
|
|||
|
HISTORY:
|
|||
|
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
|
|||
|
|
|||
|
********************************************************************/
|
|||
|
VOID SERVER_PROPERTIES :: InitializeButton( GRAPHICAL_BUTTON * pgb,
|
|||
|
MSGID msg,
|
|||
|
BMID bmid )
|
|||
|
{
|
|||
|
//
|
|||
|
// This NLS_STR is used to retrieve strings
|
|||
|
// from the resource string table.
|
|||
|
//
|
|||
|
|
|||
|
STACK_NLS_STR( nlsButtonText, MAX_RES_STR_LEN );
|
|||
|
|
|||
|
nlsButtonText.Load( msg );
|
|||
|
UIASSERT( nlsButtonText.QueryError() == NERR_Success );
|
|||
|
|
|||
|
pgb->SetFont( _fontHelv );
|
|||
|
pgb->SetStatus( bmid );
|
|||
|
pgb->SetText( nlsButtonText.QueryPch() );
|
|||
|
|
|||
|
} // SERVER_PROPERTIES :: InitializeButton
|
|||
|
|