WindowsXP-SP1/enduser/windows.com/lib/download/dlutil.h
2020-09-30 16:53:49 +02:00

186 lines
5.3 KiB
C++

/******************************************************************************
Copyright (c) 2001 Microsoft Corporation
Module Name:
dlutil.h
Abstract:
header for download library
******************************************************************************/
#ifndef DLUTIL_H
#define DLUTIL_H
#include <strsafe.h>
#include <wusafefn.h>
#include <mistsafe.h>
///////////////////////////////////////////////////////////////////////////////
// const defines & typedefs
#define UNLEN 256
// need to define this here cuz winhttp.h doesn't define it and we get dupe
// definitions if we try to include wininet.h just to get it.
#ifndef INTERNET_MAX_URL_LENGTH
#define INTERNET_MAX_URL_LENGTH 2200
#endif
const DWORD c_cbDownloadBuffer = 32 * 1024; // 32k
const DWORD c_cbDownloadBufferLite = 4 * 1024; // 4k
const DWORD c_dwRetryTimeLimitInmsWinHttp = 2 * 60 * 1000; // 120s (2m)
const DWORD c_dwRetryTimeLimitInmsWiuInet = 10 * 1000; // 10s
const DWORD c_cMaxRetries = 3;
const WCHAR c_wszUserAgent[] = L"Industry Update Control";
const char c_szUserAgent[] = "Industry Update Control";
const DWORD c_cchMaxURLSize = INTERNET_MAX_URL_LENGTH;
#ifdef UNICODE
#define c_tszUserAgent c_wszUserAgent
#else
#define c_tszUserAgent c_szUserAgent
#endif
typedef BOOL (__stdcall *pfn_ReadDataFromSite)(HINTERNET, LPVOID, DWORD, LPDWORD);
///////////////////////////////////////////////////////////////////////////////
// macro defines
#define sizeofSTRW(wsz) (sizeof(wsz) / sizeof(WCHAR))
#define sizeofSTRA(sz) (sizeof(sz))
#define sizeofSTRT(sz) (sizeof(sz) / sizeof(TCHAR))
///////////////////////////////////////////////////////////////////////////////
// necessary classes
class CAutoCritSec
{
private:
#if defined(DEBUG) || defined(DBG)
DWORD m_dwOwningThread;
DWORD m_cLocks;
#endif
CRITICAL_SECTION m_cs;
BOOL m_fInit;
public:
CAutoCritSec(void)
{
m_fInit = WUInitializeCriticalSectionAndSpinCount(&m_cs, 0x8000FA0);
#if defined(DEBUG) || defined(DBG)
m_cLocks = 0;
m_dwOwningThread = 0;
#endif
}
~CAutoCritSec(void)
{
#if defined(DEBUG) || defined(DBG)
if (m_cLocks > 0 || m_dwOwningThread != 0)
{
// can't do logging here cuz this could be run during DllMain
}
#endif
if (m_fInit)
DeleteCriticalSection(&m_cs);
}
BOOL Lock(void)
{
LOG_Block("CAutoCritSec::Lock()");
if (m_fInit)
{
EnterCriticalSection(&m_cs);
#if defined(DEBUG) || defined(DBG)
m_cLocks++;
m_dwOwningThread = GetCurrentThreadId();
#endif
}
else
{
LOG_Internet(_T("CAutoCritSec not initialized during Lock."));
}
return m_fInit;
}
BOOL Unlock(void)
{
LOG_Block("CAutoCritSec::Unlock()");
if (m_fInit)
{
#if defined(DEBUG) || defined(DBG)
if (m_cLocks == 0)
LOG_Internet(_T("CAutoCritSec: trying to unlock when lock count is 0"));
else
m_cLocks--;
if (m_dwOwningThread != GetCurrentThreadId())
{
LOG_Internet(_T("CAutoCritSec: lock not owned by current thread: Owning thread: %d. Current thread: %d"),
m_dwOwningThread, GetCurrentThreadId());
}
if (m_cLocks == 0)
m_dwOwningThread = 0;
#endif
LeaveCriticalSection(&m_cs);
}
else
{
LOG_Internet(_T("CAutoCritSec not initialized during Unlock."));
}
return m_fInit;
}
};
///////////////////////////////////////////////////////////////////////////////
// prototypes
BOOL IsServerFileDifferentW(FILETIME &ftServerTime, DWORD dwServerFileSize,
LPCWSTR wszLocalFile);
BOOL IsServerFileDifferentA(FILETIME &ftServerTime, DWORD dwServerFileSize,
LPCSTR szLocalFile);
#ifdef UNICODE
#define IsServerFileDifferent IsServerFileDifferentW
#else
#define IsServerFileDifferent IsServerFileDifferentA
#endif // !UNICODE
HRESULT PerformDownloadToFile(pfn_ReadDataFromSite pfnRead,
HINTERNET hRequest,
HANDLE hFile, DWORD cbFile,
DWORD cbBuffer,
HANDLE *rghEvents, DWORD cEvents,
PFNDownloadCallback fpnCallback, LPVOID pCallbackData,
DWORD *pcbDownloaded);
HRESULT StartWinInetDownload(HMODULE hmodWinInet,
LPCTSTR pszServerUrl,
LPCTSTR pszLocalPath,
DWORD *pdwDownloadedBytes,
HANDLE *hQuitEvents,
UINT nQuitEventCount,
PFNDownloadCallback fpnCallback,
LPVOID pCallbackData,
DWORD dwFlags,
DWORD cbDownloadBuffer);
HRESULT IsFileHtml(LPCTSTR pszFileName);
#endif