Windows2003-3790/inetcore/connectionwizard/icwhelp/progress.cpp
2020-09-30 16:53:55 +02:00

134 lines
3.6 KiB
C++

/*-----------------------------------------------------------------------------
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;
}