/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* smx.cxx This module contains all the entry points for the Server Manager extension. FILE HISTORY: NarenG 6-Oct-1992 Created. */ #define INCL_NET #define INCL_NETLIB #define INCL_NETSERVICE #define INCL_WINDOWS #define INCL_WINDOWS_GDI #define INCL_NETERRORS #define INCL_DOSERRORS #include #if defined(DEBUG) static const CHAR szFileName[] = __FILE__; #define _FILENAME_DEFINED_ONCE szFileName #endif #include #include #define INCL_BLT_WINDOW #define INCL_BLT_DIALOG #define INCL_BLT_CONTROL #define INCL_BLT_CLIENT #define INCL_BLT_MSGPOPUP #define INCL_BLT_EVENT #define INCL_BLT_MISC #define INCL_BLT_TIMER #define INCL_BLT_CC #include #include extern "C" { #include #include #include } #include #include #include #include extern "C" { // // Globals. // extern HINSTANCE _hInstance;// Exported by the afpmgr.cxx module. static HWND _hWnd; // Handle to the owner window. static DWORD _dwVersion; // Will contain the SMX version being used. static DWORD _dwDelta; // Used to manipulate menu items. static HMENU _hMenu; // Created at load time. } // extern "C" /******************************************************************* NAME: SMELoadMenu SYNOPSIS: This entrypoint is to notify the DLL that it is getting loaded by the Server Manager. ENTRY: hWnd - The "owning" window. psmsload - Points to an SMS_LOADMENU structure containing load parameters. RETURNS: DWORD - Actually an APIERR, should be 0 if successful. HISTORY: NarenG 5-Nov-1992 Created. ********************************************************************/ DWORD PASCAL SMELoadMenuW( HWND hWnd, PSMS_LOADMENU psmsload ) { if( psmsload == NULL ) { return ERROR_INVALID_PARAMETER; } // // Save the handle to the owner window // _hWnd = hWnd; // // Set the version field to the lower of the our version and the // Server manager version // _dwVersion = SME_VERSION; if( psmsload->dwVersion > _dwVersion ) { psmsload->dwVersion = _dwVersion; } else if( psmsload->dwVersion < _dwVersion ) { _dwVersion = psmsload->dwVersion; } // // Delta to be added to the menu ID before trying to manipulate // any menu item // _dwDelta = psmsload->dwMenuDelta; // // Only enumerate AFP type servers // psmsload->dwServerType = SV_TYPE_AFP; RESOURCE_STR nlsMenuName( IDS_AFPMGR_MENU_NAME ); APIERR err; if ( ( err = nlsMenuName.QueryError() ) != NERR_Success ) { return err; } if ( err = nlsMenuName.MapCopyTo( psmsload->szMenuName, sizeof(psmsload->szMenuName))) { return err; } _hMenu = ::LoadMenu(::_hInstance,MAKEINTRESOURCE(ID_SRVMGR_MENU)); if ( _hMenu == NULL ) { return ::GetLastError(); } psmsload->hMenu = _hMenu; RESOURCE_STR nlsHelpFileName( IDS_AFPMGR_HELPFILENAME ); if ( ( err = nlsHelpFileName.QueryError() ) != NERR_Success ) { return err; } if ( err = nlsHelpFileName.MapCopyTo( psmsload->szHelpFileName, sizeof(psmsload->szHelpFileName))) { return err; } return NO_ERROR; } // SMELoadMenu /******************************************************************* NAME: SMEGetExtendedErrorString SYNOPSIS: If SMELoad returns ERROR_EXTENDED_ERROR, then this entrypoint will be called to retrieve the error text associated with the failure condition. RETURNS: LPTSTR - The extended error text. HISTORY: NarenG 5-Nov-1992 Created. ********************************************************************/ LPTSTR PASCAL SMEGetExtendedErrorStringW( VOID ) { return (TCHAR*)TEXT(""); } // SMEGetExtendedErrorString /******************************************************************* NAME: SMEUnloadMenu SYNOPSIS: Notifies the extension DLL that it is getting unloaded. HISTORY: NarenG 5-Nov-1992 Created. ********************************************************************/ VOID PASCAL SMEUnloadMenu( VOID ) { // // This space intentionally left blank. // } // SMEUnload /******************************************************************* NAME: SMEInitializeMenu SYNOPSIS: Notifies the DLL that the main menu is getting activated. Do all menu manipulations here. HISTORY: NarenG 5-Nov-1992 Created. ********************************************************************/ VOID PASCAL SMEInitializeMenu( VOID ) { // // If there was no server selected. Disable all the menu items // SMS_GETSELCOUNT smsSelCount; if( ( !SendMessage( _hWnd, SM_GETSELCOUNT, 0, (LPARAM)&smsSelCount ) ) || ( smsSelCount.dwItems == 0 ) ) { EnableMenuItem( _hMenu, (UINT)(IDM_SEND_MESSAGE+_dwDelta), (UINT)MF_GRAYED); EnableMenuItem( _hMenu, (UINT)(IDM_PROPERTIES+_dwDelta), (UINT)MF_GRAYED); EnableMenuItem( _hMenu, (UINT)(IDM_VOLUME_MGT+_dwDelta), (UINT)MF_GRAYED); } else { EnableMenuItem( _hMenu, (UINT)(IDM_SEND_MESSAGE+_dwDelta), (UINT)MF_ENABLED); EnableMenuItem( _hMenu, (UINT)(IDM_PROPERTIES+_dwDelta), (UINT)MF_ENABLED); EnableMenuItem( _hMenu, (UINT)(IDM_VOLUME_MGT+_dwDelta), (UINT)MF_ENABLED); } return; } // SMEInitializeMenu /******************************************************************* NAME: SMERefresh SYNOPSIS: Notifies the extension DLL that the user has requested a refresh. The extension should use this opportunity to update any cached data. HISTORY: NarenG 5-Nov-1992 Created. ********************************************************************/ VOID PASCAL SMERefresh( HWND hWnd ) { // // This space intentionally left blank. // } // SMERefresh /******************************************************************* NAME: SMEValidate SYNOPSIS: Called to validate a server that the server manager does not recognize. We ignore these servers. HISTORY: NarenG 5-Nov-1992 Created. ********************************************************************/ BOOL PASCAL SMEValidateW( PSMS_VALIDATE psmsValidate ) { return FALSE; } // SMEValidate /******************************************************************* NAME: SMEMenuAction SYNOPSIS: Notifies the DLL that one of its menu items has been selected. ENTRY: dwEventId - The menu ID being activated (should be 1-99). HISTORY: NarenG 5-Nov-1992 Created. ********************************************************************/ VOID PASCAL SMEMenuAction( HWND hWnd, DWORD dwEventId ) { DWORD err; AFP_SERVER_HANDLE hServer = NULL; AUTO_CURSOR Cursor; // // Get the current server selection // SMS_GETSERVERSEL2 smsSel; if( !SendMessage( _hWnd, SM_GETSERVERSEL2, 0, (LPARAM)&smsSel ) ) { // // Tell the user the bad news // ::MsgPopup( _hWnd, IDS_COULD_NOT_GET_CURRENT_SEL, MPSEV_WARNING, MP_OK ); return; } // // Check if the server focus of the current selection is running AFP // BOOL fIsAfpRunning; if ( ( err = IsAfpServiceRunning( smsSel.szServerName, &fIsAfpRunning ) ) != NERR_Success ) { if ( err == IDS_MACFILE_NOT_INSTALLED ) { ::MsgPopup( _hWnd, err, MPSEV_ERROR, MP_OKCANCEL, smsSel.szServerName, MP_OK ); } else { ::MsgPopup( _hWnd, err ); } return; } if ( !fIsAfpRunning ) { // // Ask the user if he/she wants to start it. // if ( MsgPopup( hWnd, IDS_START_AFPSERVER_NOW, MPSEV_WARNING, MP_YESNO, MP_YES ) == IDNO ) { // // User does not want to start the afpserver so simply return. // return; } // // Start the AFP Service // err = StartAfpService( hWnd, smsSel.szServerName ); if ( err != NERR_Success ) { ::MsgPopup( _hWnd, err ); return; } } // // Set up an RPC conenction with the server // if( (err = ::AfpAdminConnect( smsSel.szServerName, &hServer )) != NO_ERROR) { ::MsgPopup( _hWnd, err ); return; } // // What does the user want to do with the server ? // switch( dwEventId ) { case IDM_SEND_MESSAGE: { // // Invoke the send message Dialog. // SEND_MSG_SERVER_DIALOG * pSendMsgDlg = new SEND_MSG_SERVER_DIALOG( _hWnd, hServer, smsSel.szServerName ); err = ( pSendMsgDlg == NULL ) ? ERROR_NOT_ENOUGH_MEMORY : pSendMsgDlg->Process(); delete pSendMsgDlg; break; } case IDM_PROPERTIES: { // // Invoke the Main Property Dialog. // SERVER_PROPERTIES * pPropDlg = new SERVER_PROPERTIES( _hWnd, hServer, smsSel.szServerName ); err = ( pPropDlg == NULL ) ? ERROR_NOT_ENOUGH_MEMORY : pPropDlg->Process(); delete pPropDlg; break; } case IDM_VOLUME_MGT: { // // Invoke the volume management dialog // VOLUME_MANAGEMENT_DIALOG * pVolMgtDlg = new VOLUME_MANAGEMENT_DIALOG( _hWnd, hServer, smsSel.szServerName ); err = ( pVolMgtDlg == NULL ) ? ERROR_NOT_ENOUGH_MEMORY : pVolMgtDlg->Process(); delete pVolMgtDlg; break; } default : { return; } } if( err != NERR_Success ) { ::MsgPopup( _hWnd, AFPERR_TO_STRINGID(err) ); } if ( hServer != NULL ) { ::AfpAdminDisconnect( hServer ); } } // SMEMenuAction