/*-----------------------------------------------------------------------------
	dlapi.cpp

	Wrapper for softlinking to download DLL

	Copyright (C) 1996 Microsoft Corporation
	All rights reserved.

	Authors:
		ChrisK		ChrisKauffman

	History:
		7/22/96		ChrisK	Cleaned and formatted

-----------------------------------------------------------------------------*/

#include "pch.hpp"
#include "debug.h"
#include "icwdl.h"
#include "dlapi.h"

// ############################################################################
CDownLoadAPI::CDownLoadAPI()
{
	m_hDLL = NULL;
	m_pfnDownLoadInit = NULL;
	m_pfnDownLoadCancel = NULL;
	m_pfnDownLoadExecute = NULL;
	m_pfnDownLoadClose = NULL;
	m_pfnDownLoadSetStatus = NULL;
	m_pfnDownLoadProcess = NULL;
}

// ############################################################################
CDownLoadAPI::~CDownLoadAPI()
{
	if (m_hDLL) FreeLibrary(m_hDLL);
	m_hDLL = NULL;
	m_pfnDownLoadInit = NULL;
	m_pfnDownLoadCancel = NULL;
	m_pfnDownLoadExecute = NULL;
	m_pfnDownLoadClose = NULL;
	m_pfnDownLoadSetStatus = NULL;
	m_pfnDownLoadProcess = NULL;
}

// ############################################################################
HRESULT CDownLoadAPI::LoadAPI(LPSTR szApiName, FARPROC* pfp)
{
	Assert(szApiName && pfp);
	if (!m_hDLL)
		m_hDLL = LoadLibrary(DOWNLOAD_LIBRARY);

	if (m_hDLL && !(*pfp))
	{
		*pfp = GetProcAddress(m_hDLL, szApiName);
		if (*pfp)
			return ERROR_SUCCESS;
		else
			return GetLastError();
	} else {
		return GetLastError();
	}
}

// ############################################################################
HRESULT CDownLoadAPI::DownLoadInit(PTSTR pszUrl, DWORD_PTR * lpCDialingDlg, DWORD_PTR *lpdwDownload, HWND hwndParent)
{
	HRESULT hr = ERROR_DLL_NOT_FOUND;
	LoadAPI(DOWNLOADINIT,(FARPROC*)&m_pfnDownLoadInit);
	if (m_pfnDownLoadInit)
		hr =  (m_pfnDownLoadInit)(pszUrl, lpCDialingDlg, lpdwDownload, hwndParent);
	return hr;
}

// ############################################################################
HRESULT CDownLoadAPI::DownLoadCancel(DWORD_PTR dwDownload)
{
	HRESULT hr = ERROR_DLL_NOT_FOUND;
	LoadAPI(DOWNLOADCANCEL,(FARPROC*)&m_pfnDownLoadCancel);
	if (m_pfnDownLoadCancel)
		hr =  (m_pfnDownLoadCancel)(dwDownload);
	return hr;
}

// ############################################################################
HRESULT CDownLoadAPI::DownLoadExecute(DWORD_PTR dwDownload)
{
	HRESULT hr = ERROR_DLL_NOT_FOUND;
	LoadAPI(DOWNLOADEXECUTE,(FARPROC*)&m_pfnDownLoadExecute);
	if (m_pfnDownLoadExecute)
		hr =  (m_pfnDownLoadExecute)(dwDownload);
	return hr;
}

// ############################################################################
HRESULT CDownLoadAPI::DownLoadProcess(DWORD_PTR dwDownload)
{
	HRESULT hr = ERROR_DLL_NOT_FOUND;
	LoadAPI(DOWNLOADPROCESS,(FARPROC*)&m_pfnDownLoadProcess);
	if (m_pfnDownLoadProcess)
		hr =  (m_pfnDownLoadProcess)(dwDownload);
	return hr;
}

// ############################################################################
HRESULT CDownLoadAPI::DownLoadClose(DWORD_PTR dwDownload)
{
	HRESULT hr = ERROR_DLL_NOT_FOUND;
	LoadAPI(DOWNLOADCLOSE,(FARPROC*)&m_pfnDownLoadClose);
	if (m_pfnDownLoadClose)
		hr =  (m_pfnDownLoadClose)(dwDownload);
	return hr;
}

// ############################################################################
HRESULT CDownLoadAPI::DownLoadSetStatus(DWORD_PTR dwDownload, INTERNET_STATUS_CALLBACK fnCallback)
{
	HRESULT hr = ERROR_DLL_NOT_FOUND;
	LoadAPI(DOWNLOADSETSTATUS,(FARPROC*)&m_pfnDownLoadSetStatus);
	if (m_pfnDownLoadSetStatus)
		// jmazner 10/2/96 Normandy # 8493
		// ICWDL.DLL's DownLoadSetStatus only has two parameters!!!
		//hr =  (m_pfnDownLoadSetStatus)(dwDownload, fnCallback, dwContext);
		  hr =  (m_pfnDownLoadSetStatus)(dwDownload, fnCallback);
	return hr;
}