110 lines
2.8 KiB
C++
110 lines
2.8 KiB
C++
#ifndef NULLSOFT_AUTH_LOGIN_DOWNLOAD_RESULT_HEADER
|
|
#define NULLSOFT_AUTH_LOGIN_DOWNLOAD_RESULT_HEADER
|
|
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <wtypes.h>
|
|
#include "../dlmgr/api_downloadmanager.h"
|
|
|
|
#define E_DWNLD_OK S_OK
|
|
#define E_DWNLD_BUSY E_PENDING
|
|
#define E_DWNLD_FAIL E_FAIL
|
|
#define E_DWNLD_ABORT E_ABORT
|
|
#define E_DWNLD_TIMEOUT HRESULT_FROM_WIN32(ERROR_TIMEOUT)
|
|
#define E_DWNLD_CANT_CONNECT HRESULT_FROM_WIN32(ERROR_NOT_CONNECTED)
|
|
#define E_DWNLD_WRITE_ERROR HRESULT_FROM_WIN32(ERROR_WRITE_FAULT)
|
|
|
|
class LoginStatus;
|
|
|
|
class LoginDownloadResult : public ifc_downloadManagerCallback
|
|
{
|
|
public:
|
|
typedef void (CALLBACK *Callback)(LoginDownloadResult *result, void *data);
|
|
|
|
typedef enum
|
|
{
|
|
stateMask = 0x00000FF00,
|
|
stateReady = 0x00000000,
|
|
stateInitializing = 0x00000100,
|
|
stateConnecting = 0x00000200,
|
|
stateReceiving = 0x00000300,
|
|
stateCompleted = 0x00000400,
|
|
stateAborting = 0x00000500,
|
|
} States;
|
|
|
|
typedef enum
|
|
{
|
|
typeMask = 0x0000000FF,
|
|
typeUnknown = 0x00000000,
|
|
typeImage = 0x00000001,
|
|
typeProviderList = 0x00000002,
|
|
} Types;
|
|
|
|
typedef enum
|
|
{
|
|
flagsMask = 0xFFFF0000,
|
|
flagUserAbort = 0x00010000,
|
|
} Flags;
|
|
|
|
protected:
|
|
LoginDownloadResult(api_downloadManager *pManager, UINT uType, Callback fnCallback, void *pData, LoginStatus *pStatus);
|
|
~LoginDownloadResult();
|
|
|
|
public:
|
|
static HRESULT CreateInstance(api_downloadManager *pManager, UINT uType, Callback fnCallback, void *pData, LoginStatus *pStatus, LoginDownloadResult **instance);
|
|
|
|
public:
|
|
/* Dispatchable */
|
|
size_t AddRef();
|
|
size_t Release();
|
|
int QueryInterface(GUID interface_guid, void **object);
|
|
|
|
HRESULT GetWaitHandle(HANDLE *handle);
|
|
HRESULT GetData(void **data);
|
|
HRESULT GetType(UINT *type);
|
|
HRESULT GetState(UINT *state);
|
|
HRESULT GetFile(LPCWSTR *ppszPath);
|
|
|
|
HRESULT CreateDownloadFileName(LPSTR pszBuffer, UINT cchBufferMax);
|
|
HRESULT GetUrl(LPSTR pszBuffer, UINT cchBufferMax);
|
|
HRESULT RequestAbort(BOOL fDrop);
|
|
|
|
protected:
|
|
/* ifc_downloadManagerCallback */
|
|
void Event_DownloadFinish(DownloadToken token);
|
|
void Event_DownloadTick(DownloadToken token);
|
|
void Event_DownloadError(DownloadToken token, int errorCode);
|
|
void Event_DownloadCancel(DownloadToken token);
|
|
void Event_DownloadConnect(DownloadToken token);
|
|
void Event_DownloadInit(DownloadToken token);
|
|
|
|
void DownloadCompleted(int errorCode);
|
|
void SetState(UINT uState);
|
|
void SetType(UINT uType);
|
|
void SetFlags(UINT uFlags, UINT uMask);
|
|
void SetStatus();
|
|
void RemoveStatus();
|
|
|
|
|
|
|
|
protected:
|
|
size_t ref;
|
|
UINT flags;
|
|
LPWSTR address;
|
|
INT result;
|
|
api_downloadManager *manager;
|
|
DownloadToken cookie;
|
|
HANDLE completed;
|
|
Callback callback;
|
|
void *data;
|
|
LoginStatus *status;
|
|
UINT statusCookie;
|
|
CRITICAL_SECTION lock;
|
|
|
|
protected:
|
|
RECVS_DISPATCH;
|
|
};
|
|
|
|
#endif //NULLSOFT_AUTH_LOGINDOWNLOADER_HEADER
|