//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1997. // // File: cdllogvw.c // // Contents: // // Classes: // // Functions: // // History: 25 Mar 97 t-alans (Alan Shi) Created // //---------------------------------------------------------------------------- #include #include #include #include #include "cdlids.h" #include "wininet.h" #define URL_SEARCH_PATTERN "?CodeDownloadErrorLog" #define DELIMITER_CHAR '!' #define MAX_CACHE_ENTRY_INFO_SIZE 2048 LRESULT CALLBACK DlgProc( HWND, UINT, WPARAM, LPARAM ); void ViewLogEntry( HWND hwnd ); void RefreshLogView( HWND hwnd ); void DeleteLogEntry( HWND hwnd ); HINSTANCE hInst; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) { hInst = hInstance; DialogBox( hInstance, MAKEINTRESOURCE(IDD_CDLLOGVIEW), NULL, DlgProc ); return( 0 ); } LRESULT CALLBACK DlgProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) { switch( iMsg ) { case WM_INITDIALOG: RefreshLogView( hwnd ); return TRUE; case WM_COMMAND: switch( LOWORD( wParam ) ) { case IDCANCEL: EndDialog( hwnd, 0 ); break; case IDC_CB_VIEWLOG: ViewLogEntry( hwnd ); break; case IDC_CB_REFRESH: RefreshLogView( hwnd ); break; case IDC_CB_DELETE: DeleteLogEntry( hwnd ); break; case IDC_LB_LOGMESSAGES: switch( HIWORD( wParam ) ) { case LBN_DBLCLK: ViewLogEntry( hwnd ); break; } } return( TRUE ); } return( FALSE ); } void DeleteLogEntry( HWND hwnd ) { static char szUrlBuffer[INTERNET_MAX_URL_LENGTH]; char szUrl[INTERNET_MAX_URL_LENGTH]; LPINTERNET_CACHE_ENTRY_INFO pCacheEntryInfo = NULL; DWORD dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; static char pBuffer[MAX_CACHE_ENTRY_INFO_SIZE]; int iIndex = 0; int iLength = 0; iIndex = SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_GETCURSEL, 0, 0 ); iLength = SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_GETTEXTLEN, iIndex, 0 ); SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_GETTEXT, iIndex, (LPARAM)szUrl ); pCacheEntryInfo = (LPINTERNET_CACHE_ENTRY_INFO)pBuffer; dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; wnsprintf( szUrlBuffer, sizeof(szUrlBuffer)-1, "%s%c%s", URL_SEARCH_PATTERN, DELIMITER_CHAR, szUrl ); if( DeleteUrlCacheEntry( szUrlBuffer ) ) { RefreshLogView( hwnd ); } else { MessageBox( hwnd, "Error: Unable to delete cache file!", "Log View Error", MB_OK | MB_ICONERROR ); } } void ViewLogEntry( HWND hwnd ) { int iIndex = 0; int iLength = 0; static char pBuffer[MAX_CACHE_ENTRY_INFO_SIZE]; DWORD dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; LPINTERNET_CACHE_ENTRY_INFO pCacheEntryInfo = NULL; char szUrl[INTERNET_MAX_URL_LENGTH]; static char szUrlBuffer[INTERNET_MAX_URL_LENGTH]; iIndex = SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_GETCURSEL, 0, 0 ); iLength = SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_GETTEXTLEN, iIndex, 0 ); SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_GETTEXT, iIndex, (LPARAM)szUrl ); pCacheEntryInfo = (LPINTERNET_CACHE_ENTRY_INFO)pBuffer; dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; wnsprintf( szUrlBuffer, sizeof(szUrlBuffer)-1, "%s%c%s", URL_SEARCH_PATTERN, DELIMITER_CHAR, szUrl ); if( GetUrlCacheEntryInfo( szUrlBuffer, pCacheEntryInfo, &dwBufferSize ) ) { if( pCacheEntryInfo->lpszLocalFileName != NULL ) { if( ShellExecute( NULL, "open", pCacheEntryInfo->lpszLocalFileName, NULL, NULL, SW_SHOWNORMAL ) <= (HINSTANCE)32 ) { // ShellExecute returns <= 32 if error occured MessageBox( hwnd, "Error: Unable to open cache file!", "Log View Error", MB_OK | MB_ICONERROR ); } } else { MessageBox( hwnd, "Error: No file name available!", "Log View Error", MB_OK | MB_ICONERROR ); } } } void RefreshLogView( HWND hwnd ) { HANDLE hUrlCacheEnum; DWORD dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; LPINTERNET_CACHE_ENTRY_INFO pCacheEntryInfo = NULL; static char pBuffer[MAX_CACHE_ENTRY_INFO_SIZE]; char *szPtr = NULL; SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_RESETCONTENT, 0, 0); pCacheEntryInfo = (LPINTERNET_CACHE_ENTRY_INFO)pBuffer; hUrlCacheEnum = FindFirstUrlCacheEntry( URL_SEARCH_PATTERN, pCacheEntryInfo, &dwBufferSize ); if( hUrlCacheEnum != NULL ) { if( pCacheEntryInfo->lpszSourceUrlName != NULL ) { if( StrStrI( pCacheEntryInfo->lpszSourceUrlName, URL_SEARCH_PATTERN ) ) { SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_ADDSTRING, 0, (LPARAM)pCacheEntryInfo->lpszSourceUrlName ); } } dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; while( FindNextUrlCacheEntry( hUrlCacheEnum, pCacheEntryInfo, &dwBufferSize ) ) { if( pCacheEntryInfo->lpszSourceUrlName != NULL ) { if( StrStrI( pCacheEntryInfo->lpszSourceUrlName, URL_SEARCH_PATTERN ) ) { szPtr = pCacheEntryInfo->lpszSourceUrlName; while( *szPtr != '\0' && *szPtr != DELIMITER_CHAR ) { szPtr++; } szPtr++; if( szPtr != NULL ) { SendDlgItemMessage( hwnd, IDC_LB_LOGMESSAGES, LB_ADDSTRING, 0, (LPARAM)szPtr); } } } dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; } } } int _stdcall ModuleEntry(void) { int i; STARTUPINFO si; LPTSTR pszCmdLine = GetCommandLine(); si.dwFlags = 0; GetStartupInfoA(&si); i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine, (si.dwFlags & STARTF_USESHOWWINDOW) ? si.wShowWindow : SW_SHOWDEFAULT); ExitProcess(i); return i; // We never come here }