You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.6 KiB
133 lines
3.6 KiB
/*-----------------------------------------------------------------------------
|
|
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;
|
|
}
|
|
|