//------------------------------------------------------------------------- // Desc: Class for displaying an F_FileHdl class structure in HTML on a web page. // Tabs: 3 // // Copyright (c) 2001-2003,2005-2006 Novell, Inc. All Rights Reserved. // // This program is free software; you can redistribute it and/or // modify it under the terms of version 2 of the GNU General Public // License as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, contact Novell, Inc. // // To contact Novell about this file by physical or electronic mail, // you may find current contact information at www.novell.com // // $Id: imonfhdl.cpp 12329 2006-01-20 17:49:30 -0700 (Fri, 20 Jan 2006) ahodgkinson $ //------------------------------------------------------------------------- #include "flaimsys.h" /**************************************************************************** Desc: Implements the display function of the F_FileHdlPage *****************************************************************************/ RCODE F_FileHdlPage::display( FLMUINT uiNumParams, const char ** ppszParams) { RCODE rc = FERR_OK; char szFrom[20]; char szFileId[20]; FLMINT uiFileId; char szList[10]; FLMUINT uiList; F_FileHdl * pFileHdl = NULL; FLMBOOL bRefresh; FLMUINT uiSize; FLMUINT uiOffset; FLMUINT uiListCount; FLMBYTE szTemp[150]; FLMBOOL bHadError = FALSE; FLMBOOL bHighlight = FALSE; FLMBYTE * pszTemp = NULL; if( RC_BAD( rc = f_alloc( 250, &pszTemp))) { printErrorPage( rc, TRUE, (char *)"Failed to allocate temporary buffer"); goto Exit; } //Let's first find out where we came from, then get the appropriate parameters. szFrom[0] = '\0'; szList[0] = '\0'; //Get the "From" parameter if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "From", sizeof( szFrom), szFrom))) { goto Exit; } //If the source of this req uest is from the FileHdlMgr, then we will begin our search from there. if (f_stricmp( szFrom, "FileHdlMgr") == 0) { //Get the file id (index) and the list type. The parameters must be set! if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "FileId", sizeof( szFileId), szFileId))) { goto Exit; } uiFileId = f_atoud( szFileId); if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "List", sizeof( szList), szList))) { goto Exit; } if (f_stricmp( szList, "Used") == 0) { uiList = FHM_USED_LIST; } else if (f_stricmp( szList, "Avail") == 0) { uiList = FHM_AVAIL_LIST; } else //Invalid List option { rc = RC_SET( FERR_FAILURE); goto Exit; } // Now get the file handle from the appropriate list, either the Used list or the Available list f_mutexLock( gv_FlmSysData.hFileHdlMutex); uiListCount = gv_FlmSysData.pFileHdlMgr->GetListMgr()->GetCount(uiList); if (uiListCount > 0) { pFileHdl = (F_FileHdl *)gv_FlmSysData.pFileHdlMgr->GetListMgr()->GetItem(uiList, uiFileId); pFileHdl->AddRef(); } else { pFileHdl = NULL; } f_mutexUnlock( gv_FlmSysData.hFileHdlMutex); } //FileHdlMgr else { // Generate an error for now. (nothing else implemented) rc = RC_SET( FERR_INVALID_PARM); goto Exit; } //Before we actually create the rest of the page, let's verify that the file handle //we are about to display is still valid. stdHdr(); fnPrintf( m_pHRequest, HTML_DOCTYPE); fnPrintf( m_pHRequest, "\n"); if (pFileHdl) { //Check to see if we are to refresh this page automatically. if ((bRefresh = DetectParameter( uiNumParams, ppszParams, "Refresh")) == TRUE) { //Send back the page with a refresh command in the header f_sprintf((char *)szTemp, "%s/FileHdl?Refresh&From=%s&List=%s&FileId=%s", m_pszURLString, szFrom, szList, szFileId); fnPrintf( m_pHRequest, "" "" "File Handle Structure\n", szTemp); } else { fnPrintf( m_pHRequest, "File Handle Structure\n"); } printStyle(); fnPrintf( m_pHRequest, "\n"); fnPrintf( m_pHRequest, "\n"); // If we are not to refresh this page, then don't include the refresh meta command if (!bRefresh) { f_sprintf( (char *)pszTemp, "Start Auto-refresh (5 sec.)", m_pszURLString, szFrom, szList, szFileId); } else { f_sprintf( (char *)pszTemp, "Stop Auto-refresh", m_pszURLString, szFrom, szList, szFileId); } // Prepare the refresh link. f_sprintf( (char *)szTemp, "Refresh", m_pszURLString, szFrom, szList, szFileId); //Insert a new table into the page to display the FileHdl fields printTableStart( "File Handle", 1, 100); printTableRowStart(); printColumnHeading( "", JUSTIFY_LEFT, FLM_IMON_COLOR_PUTTY_1, 1, 1, FALSE); fnPrintf( m_pHRequest, "%s, ", szTemp); fnPrintf( m_pHRequest, "%s\n", pszTemp); printColumnHeadingClose(); printTableRowEnd(); printTableEnd(); printTableStart( "File Handle - Methods", 2); // Write out the table headings. printTableRowStart(); printColumnHeading( "Method Name"); printColumnHeading( "Value"); printTableRowEnd(); //File Size printTableRowStart( bHighlight = ~bHighlight); fnPrintf( m_pHRequest, TD_s, "Size"); if (RC_BAD( rc = pFileHdl->Size(&uiSize))) { bHadError = TRUE; goto Exit; } fnPrintf( m_pHRequest, TD_ui, uiSize); printTableRowEnd(); //Current position - Tell printTableRowStart( bHighlight = ~bHighlight); fnPrintf( m_pHRequest, TD_s, "Tell (Current position)"); if (RC_BAD( rc = pFileHdl->Tell(&uiOffset))) { bHadError = TRUE; goto Exit; } fnPrintf( m_pHRequest, TD_ui, uiOffset); printTableRowEnd(); // Write out a table showing the private data write_data( (F_FileHdlImp *)pFileHdl); } else { fnPrintf( m_pHRequest, "\n"); fnPrintf( m_pHRequest, "Error - the File Header structure you are seeking is no longer valid. " "This page will automatically redirect you to the File Handle Manager page after five seconds\n"); } fnPrintf( m_pHRequest, "\n"); fnEmit(); Exit: if (pFileHdl) { f_mutexLock( gv_FlmSysData.hFileHdlMutex); pFileHdl->Release(); f_mutexUnlock( gv_FlmSysData.hFileHdlMutex); pFileHdl = NULL; } if (bHadError) { printTableRowEnd(); printTableEnd(); fnPrintf( m_pHRequest, "Error - An error has occured during processing." " File handle could not be retrieved.\n"); fnPrintf( m_pHRequest, "\n"); fnEmit(); bHadError = FALSE; } if (pszTemp) { f_free( &pszTemp); } return( rc); } /*************************************************************************** Desc: Function to display the private data on a WIN32 platform ***************************************************************************/ #ifdef FLM_WIN void F_FileHdlPage::write_data( F_FileHdlImp * pFileHdl) { F_Base * pBase; F_ListItem * pListItem; F_FileHdlImpBase * pFileHdlBase; char szAddress[20]; FLMBOOL bHighlight = FALSE; if (!pFileHdl) { return; } // Start the table printTableStart( "File Handle - Fields", 4); // Write out the table headings. printTableRowStart(); printColumnHeading( "Byte Offset (hex)"); printColumnHeading( "Field Name"); printColumnHeading( "Field Type"); printColumnHeading( "Value"); printTableRowEnd(); // m_FileHandle (HANDLE) printAddress( &pFileHdl->m_FileHandle, szAddress); printHTMLString( "m_FileHandle", "HANDLE", (void *)pFileHdl, (void *)&pFileHdl->m_FileHandle, (char *)szAddress, (bHighlight = ~bHighlight)); // m_uiBlockSize printHTMLUint( "m_uiBlockSize", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiBlockSize, pFileHdl->m_uiBlockSize, (bHighlight = ~bHighlight)); // m_uiBytesPerSector printHTMLUint( "m_uiBytesPerSector", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiBytesPerSector, pFileHdl->m_uiBytesPerSector, (bHighlight = ~bHighlight)); // m_uiNotOnSectorBoundMask printHTMLUint( "m_uiNotOnSectorBoundMask", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiNotOnSectorBoundMask, pFileHdl->m_uiNotOnSectorBoundMask, (bHighlight = ~bHighlight)); // m_uiGetSectorBoundMask printHTMLUint( "m_uiGetSectorBoundMask", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiGetSectorBoundMask, pFileHdl->m_uiGetSectorBoundMask, (bHighlight = ~bHighlight)); // m_bDoDirectIO printHTMLString( "m_bDoDirectIO", "FLMBOOL", (void *)pFileHdl, (void *)&pFileHdl->m_bDoDirectIO, (char *)(pFileHdl->m_bDoDirectIO ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_uiExtendSize printHTMLUint( "m_uiExtendSize", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiExtendSize, pFileHdl->m_uiExtendSize, (bHighlight = ~bHighlight)); // m_uiMaxAutoExtendSize printHTMLUint( "m_uiMaxAutoExtendSize", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiMaxAutoExtendSize, pFileHdl->m_uiMaxAutoExtendSize, (bHighlight = ~bHighlight)); // m_pucAlignedBuff printAddress( pFileHdl->m_pucAlignedBuff, szAddress); printHTMLString( "m_pucAlignedBuff", "FLMBOOL", (void *)pFileHdl, (void *)&pFileHdl->m_pucAlignedBuff, (char *)szAddress, (bHighlight = ~bHighlight)); // m_uiAlignedBuffSize printHTMLUint( "m_uiAlignedBuffSize", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiAlignedBuffSize, pFileHdl->m_uiAlignedBuffSize, (bHighlight = ~bHighlight)); // m_uiCurrentPos printHTMLUint( "m_uiCurrentPos", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiCurrentPos, pFileHdl->m_uiCurrentPos, (bHighlight = ~bHighlight)); // m_bCanDoAsync printHTMLString( "m_bCanDoAsync", "FLMBOOL", (void *)pFileHdl, (void *)&pFileHdl->m_bCanDoAsync, (char *)(pFileHdl->m_bCanDoAsync ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_Overlapped (OVERLAPPED) printAddress( &pFileHdl->m_Overlapped, szAddress); printHTMLString( "m_Overlapped", "OVERLAPPED", (void *)pFileHdl, (void *)&pFileHdl->m_Overlapped, (char *)szAddress, (bHighlight = ~bHighlight)); // Now we show private members of the base class F_FileHdlBase pFileHdlBase = (F_FileHdlImpBase *)pFileHdl; // m_LNode printAddress( &pFileHdlBase->m_LNode[0], szAddress); printHTMLString( "F_FileHdlBase.m_LNode", "LNODE", (void *)pFileHdlBase, (void *)&pFileHdlBase->m_LNode, (char *)szAddress, (bHighlight = ~bHighlight)); // m_bFileOpened printHTMLString( "F_FileHdlBase.m_bFileOpened", "FLMBOOL", (void *)pFileHdlBase, (void *)&pFileHdlBase->m_bFileOpened, (char *)(pFileHdlBase->m_bFileOpened ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_uiAvailTime printHTMLUint( "F_FileHdlBase.m_uiAvailTime", "FLMUINT", (void *)pFileHdlBase, (void *)&pFileHdlBase->m_uiAvailTime, pFileHdlBase->m_uiAvailTime, (bHighlight = ~bHighlight)); // m_uiFileId printHTMLUint( "F_FileHdlBase.m_uiFileId", "FLMUINT", (void *)pFileHdlBase, (void *)&pFileHdlBase->m_uiFileId, pFileHdlBase->m_uiFileId, (bHighlight = ~bHighlight)); // m_bDeleteOnClose printHTMLString( "F_FileHdlBase.m_bDeleteOnClose", "FLMBOOL", (void *)pFileHdlBase, (void *)&pFileHdlBase->m_bDeleteOnClose, (char *)(pFileHdlBase->m_bDeleteOnClose ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_bOpenedReadOnly printHTMLString( "F_FileHdlBase.m_bOpenedReadOnly", "FLMBOOL", (void *)pFileHdlBase, (void *)&pFileHdlBase->m_bOpenedReadOnly, (char *)(pFileHdlBase->m_bOpenedReadOnly ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_bOpenedExclusive printHTMLString( "F_FileHdlBase.m_bOpenedExclusive", "FLMBOOL", (void *)pFileHdlBase, (void *)&pFileHdlBase->m_bOpenedExclusive, (char *)(pFileHdlBase->m_bOpenedExclusive ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_pszIoPath printHTMLString( "F_FileHdlBase.m_pszIoPath", "FLMBYTE *", (void *)pFileHdlBase, (void *)&pFileHdlBase->m_pszIoPath, (char *)pFileHdlBase->m_pszIoPath, (bHighlight = ~bHighlight)); // Now show the private members of the F_ListItem class pListItem = (F_ListItem *)pFileHdlBase; // m_pListMgr printAddress( pListItem->m_pListMgr, szAddress); printHTMLString( "F_ListItem.m_pListMgr", "F_ListMgr *", (void *)pListItem, (void *)&pListItem->m_pListMgr, (char *)szAddress, (bHighlight = ~bHighlight)); // m_uiLNodeCnt printHTMLUint( "F_ListItem.m_uiLNodeCnt", "FLMUINT", (void *)pListItem, (void *)&pListItem->m_uiLNodeCnt, pListItem->m_uiLNodeCnt, (bHighlight = ~bHighlight)); // m_pLNodes printAddress( pListItem->m_pLNodes, szAddress); printHTMLString( "F_ListItem.m_pLNodes", "LNODE *", (void *)pListItem, (void *)&pListItem->m_pLNodes, (char *)szAddress, (bHighlight = ~bHighlight)); // m_bInList printHTMLString( "F_ListItem.m_bInList", "FLMBOOL", (void *)pListItem, (void *)&pListItem->m_bInList, (char *)(pListItem->m_bInList ? "Yes" : "No"), (bHighlight = ~bHighlight)); // Now for the final base class - F_Base pBase = (F_Base *)pListItem; // m_ui32RefCnt printHTMLUint( "F_Base.m_ui32RefCnt", "FLMUINT", (void *)pBase, (void *)&pBase->m_ui32RefCnt, pBase->m_ui32RefCnt, (bHighlight = ~bHighlight)); printTableEnd(); } #endif #ifdef FLM_UNIX /*************************************************************************** Desc: Function to display the private data on a UNIX platform ***************************************************************************/ void F_FileHdlPage::write_data( F_FileHdlImp * pFileHdl) { FLMBOOL bHighlight = FALSE; if (!pFileHdl) { return; } // Start the table printTableStart( "File Handle Structure - Fields", 4); // Write out the table headings. printTableRowStart(); printColumnHeading( "Byte Offset (hex)"); printColumnHeading( "Field Name"); printColumnHeading( "Field Type"); printColumnHeading( "Value"); printTableRowEnd(); // m_fd (int) printHTMLInt( "m_fd", "int", (void *)pFileHdl, (void *)&pFileHdl->m_fd, pFileHdl->m_fd, (bHighlight = ~bHighlight)); // m_uiCurrentPos printHTMLUint( "m_uiCurrentPos", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiCurrentPos, pFileHdl->m_uiCurrentPos, (bHighlight = ~bHighlight)); // m_bDoDirectIO printHTMLString( "m_bDoDirectIO", "FLMBOOL", (void *)pFileHdl, (void *)&pFileHdl->m_bDoDirectIO, (char *)(pFileHdl->m_bDoDirectIO ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_uiMaxAutoExtendSize printHTMLUint( "m_uiMaxAutoExtendSize", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiMaxAutoExtendSize, pFileHdl->m_uiMaxAutoExtendSize, (bHighlight = ~bHighlight)); // m_bCanDoAsync printHTMLString( "m_bCanDoAsync", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_bCanDoAsync, (char *)(pFileHdl->m_bCanDoAsync ? "Yes" : "No"), (bHighlight = ~bHighlight)); printTableEnd(); } #endif /*************************************************************************** Desc: Function to display the private data on a Netware platform ***************************************************************************/ #ifdef FLM_NLM void F_FileHdlPage::write_data( F_FileHdlImp * pFileHdl) { char szAddress[20]; FLMBOOL bHighlight = FALSE; if (!pFileHdl) { return; } // Start the table printTableStart( "File Handle Structure - Fields", 4); // Write out the table headings. printTableRowStart(); printColumnHeading( "Byte Offset (hex)"); printColumnHeading( "Field Name"); printColumnHeading( "Field Type"); printColumnHeading( "Value"); printTableRowEnd(); // m_lFileHandle (LONG) printHTMLUlong( "m_lFileHandle", "LONG", (void *)pFileHdl, (void *)&pFileHdl->m_lFileHandle, pFileHdl->m_lFileHandle, (bHighlight = ~bHighlight)); // m_lOpenAttr printHTMLUlong( "m_lOpenAttr", "LONG", (void *)pFileHdl, (void *)&pFileHdl->m_lOpenAttr, pFileHdl->m_lOpenAttr, (bHighlight = ~bHighlight)); // m_lVolumeID printHTMLUlong( "m_lVolumeID", "LONG", (void *)pFileHdl, (void *)&pFileHdl->m_lVolumeID, pFileHdl->m_lVolumeID, (bHighlight = ~bHighlight)); // m_lLNamePathCount printHTMLUlong( "m_lLNamePathCount", "LONG", (void *)pFileHdl, (void *)&pFileHdl->m_lLNamePathCount, pFileHdl->m_lLNamePathCount, (bHighlight = ~bHighlight)); // m_bDoSuballocation printHTMLString( "m_bDoSuballocation", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_bDoSuballocation, (char *)(pFileHdl->m_bDoSuballocation ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_uiExtendSize printHTMLUint( "m_uiExtendSize", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiExtendSize, pFileHdl->m_uiExtendSize, (bHighlight = ~bHighlight)); // m_uiMaxAutoExtendSize printHTMLUint( "m_uiMaxAutoExtendSize", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiMaxAutoExtendSize, pFileHdl->m_uiMaxAutoExtendSize, (bHighlight = ~bHighlight)); // m_bDoDirectIO printHTMLString( "m_bDoDirectIO", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_bDoDirectIO, (char *)(pFileHdl->m_bDoDirectIO ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_lSectorsPerBlock printHTMLUlong( "m_lSectorsPerBlock", "LONG", (void *)pFileHdl, (void *)&pFileHdl->m_lSectorsPerBlock, pFileHdl->m_lSectorsPerBlock, (bHighlight = ~bHighlight)); // m_lMaxBlocks printHTMLUlong( "m_lMaxBlocks", "LONG", (void *)pFileHdl, (void *)&pFileHdl->m_lMaxBlocks, pFileHdl->m_lMaxBlocks); // m_uiCurrentPos printHTMLUint( "m_uiCurrentPos", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_uiCurrentPos, pFileHdl->m_uiCurrentPos, (bHighlight = ~bHighlight)); // m_bNSS printHTMLString( "m_bNSS", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_bNSS, (char *)(pFileHdl->m_bNSS ? "Yes" : "No"), (bHighlight = ~bHighlight)); // m_NssKey (Key_t) printAddress( &pFileHdl->m_NssKey, szAddress); printHTMLString( "m_NssKey", "Key_t", (void *)pFileHdl, (void *)&pFileHdl->m_NssKey, (char *)szAddress, (bHighlight = ~bHighlight)); // m_bNSSFileOpen printHTMLString( "m_bNSSFileOpen", "FLMUINT", (void *)pFileHdl, (void *)&pFileHdl->m_bNSSFileOpen, (char *)(pFileHdl->m_bNSSFileOpen ? "Yes" : "No"), (bHighlight = ~bHighlight)); printTableEnd(); } #endif // FLM_NLM