|
|
/*-----------------------------------------------------------------------------
progress.cpp
Download thread and progress update. Part of CRefDial
History: 1/11/98 DONALDM Moved to new ICW project and string and nuked 16 bit stuff -----------------------------------------------------------------------------*/
#include "stdafx.h"
#include "icwhelp.h"
#include "refdial.h"
#include "icwdl.h"
#define MAX_EXIT_RETRIES 10
extern BOOL MinimizeRNAWindowEx();
void WINAPI MyProgressCallBack ( HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength ) { CRefDial *pRefDial = (CRefDial *)dwContext; int prc;
if (!dwContext) return;
switch(dwInternetStatus) { case CALLBACK_TYPE_PROGRESS: prc = *(int*)lpvStatusInformation;\ // Set the status string ID
pRefDial->m_DownloadStatusID = IDS_RECEIVING_RESPONSE;
// Post a message to fire an event
PostMessage(pRefDial->m_hWnd, WM_DOWNLOAD_PROGRESS, prc, 0); break; case CALLBACK_TYPE_URL: if (lpvStatusInformation) lstrcpy(pRefDial->m_szRefServerURL, (LPTSTR)lpvStatusInformation); break; default: TraceMsg(TF_GENERAL, TEXT("CONNECT:Unknown Internet Status (%d).\n"),dwInternetStatus); pRefDial->m_DownloadStatusID = 0; break; } }
DWORD WINAPI DownloadThreadInit(LPVOID lpv) { HRESULT hr = ERROR_NOT_ENOUGH_MEMORY; CRefDial *pRefDial = (CRefDial*)lpv; HINSTANCE hDLDLL = NULL; // Download .DLL
HINSTANCE hADDll = NULL; FARPROC fp;
MinimizeRNAWindowEx();
hDLDLL = LoadLibrary(DOWNLOAD_LIBRARY); if (!hDLDLL) { hr = ERROR_DOWNLOAD_NOT_FOUND; AssertMsg(0,TEXT("icwdl missing")); goto ThreadInitExit; }
// Set up for download
//
fp = GetProcAddress(hDLDLL,DOWNLOADINIT); AssertMsg(fp != NULL,TEXT("DownLoadInit API missing")); hr = ((PFNDOWNLOADINIT)fp)(pRefDial->m_szUrl, (DWORD_PTR FAR *)pRefDial, &pRefDial->m_dwDownLoad, pRefDial->m_hWnd); if (hr != ERROR_SUCCESS) goto ThreadInitExit; // Set up call back for progress dialog
//
fp = GetProcAddress(hDLDLL,DOWNLOADSETSTATUS); Assert(fp); hr = ((PFNDOWNLOADSETSTATUS)fp)(pRefDial->m_dwDownLoad,(INTERNET_STATUS_CALLBACK)MyProgressCallBack);
// Download stuff MIME multipart
//
fp = GetProcAddress(hDLDLL,DOWNLOADEXECUTE); Assert(fp); hr = ((PFNDOWNLOADEXECUTE)fp)(pRefDial->m_dwDownLoad); if (hr) { goto ThreadInitExit; }
fp = GetProcAddress(hDLDLL,DOWNLOADPROCESS); Assert(fp); hr = ((PFNDOWNLOADPROCESS)fp)(pRefDial->m_dwDownLoad); if (hr) { goto ThreadInitExit; }
hr = ERROR_SUCCESS;
ThreadInitExit:
// Clean up
//
if (pRefDial->m_dwDownLoad) { fp = GetProcAddress(hDLDLL,DOWNLOADCLOSE); Assert(fp); ((PFNDOWNLOADCLOSE)fp)(pRefDial->m_dwDownLoad); pRefDial->m_dwDownLoad = 0; }
// Call the OnDownLoadCompelete method
PostMessage(pRefDial->m_hWnd, WM_DOWNLOAD_DONE, 0, 0);
// Free the libs used to do the download
if (hDLDLL) FreeLibrary(hDLDLL); if (hADDll) FreeLibrary(hADDll);
return hr; }
|