1
0

downloadResult.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #ifndef NULLSOFT_AUTH_LOGIN_DOWNLOAD_RESULT_HEADER
  2. #define NULLSOFT_AUTH_LOGIN_DOWNLOAD_RESULT_HEADER
  3. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  4. #pragma once
  5. #endif
  6. #include <wtypes.h>
  7. #include "../dlmgr/api_downloadmanager.h"
  8. #define E_DWNLD_OK S_OK
  9. #define E_DWNLD_BUSY E_PENDING
  10. #define E_DWNLD_FAIL E_FAIL
  11. #define E_DWNLD_ABORT E_ABORT
  12. #define E_DWNLD_TIMEOUT HRESULT_FROM_WIN32(ERROR_TIMEOUT)
  13. #define E_DWNLD_CANT_CONNECT HRESULT_FROM_WIN32(ERROR_NOT_CONNECTED)
  14. #define E_DWNLD_WRITE_ERROR HRESULT_FROM_WIN32(ERROR_WRITE_FAULT)
  15. class LoginStatus;
  16. class LoginDownloadResult : public ifc_downloadManagerCallback
  17. {
  18. public:
  19. typedef void (CALLBACK *Callback)(LoginDownloadResult *result, void *data);
  20. typedef enum
  21. {
  22. stateMask = 0x00000FF00,
  23. stateReady = 0x00000000,
  24. stateInitializing = 0x00000100,
  25. stateConnecting = 0x00000200,
  26. stateReceiving = 0x00000300,
  27. stateCompleted = 0x00000400,
  28. stateAborting = 0x00000500,
  29. } States;
  30. typedef enum
  31. {
  32. typeMask = 0x0000000FF,
  33. typeUnknown = 0x00000000,
  34. typeImage = 0x00000001,
  35. typeProviderList = 0x00000002,
  36. } Types;
  37. typedef enum
  38. {
  39. flagsMask = 0xFFFF0000,
  40. flagUserAbort = 0x00010000,
  41. } Flags;
  42. protected:
  43. LoginDownloadResult(api_downloadManager *pManager, UINT uType, Callback fnCallback, void *pData, LoginStatus *pStatus);
  44. ~LoginDownloadResult();
  45. public:
  46. static HRESULT CreateInstance(api_downloadManager *pManager, UINT uType, Callback fnCallback, void *pData, LoginStatus *pStatus, LoginDownloadResult **instance);
  47. public:
  48. /* Dispatchable */
  49. size_t AddRef();
  50. size_t Release();
  51. int QueryInterface(GUID interface_guid, void **object);
  52. HRESULT GetWaitHandle(HANDLE *handle);
  53. HRESULT GetData(void **data);
  54. HRESULT GetType(UINT *type);
  55. HRESULT GetState(UINT *state);
  56. HRESULT GetFile(LPCWSTR *ppszPath);
  57. HRESULT CreateDownloadFileName(LPSTR pszBuffer, UINT cchBufferMax);
  58. HRESULT GetUrl(LPSTR pszBuffer, UINT cchBufferMax);
  59. HRESULT RequestAbort(BOOL fDrop);
  60. protected:
  61. /* ifc_downloadManagerCallback */
  62. void Event_DownloadFinish(DownloadToken token);
  63. void Event_DownloadTick(DownloadToken token);
  64. void Event_DownloadError(DownloadToken token, int errorCode);
  65. void Event_DownloadCancel(DownloadToken token);
  66. void Event_DownloadConnect(DownloadToken token);
  67. void Event_DownloadInit(DownloadToken token);
  68. void DownloadCompleted(int errorCode);
  69. void SetState(UINT uState);
  70. void SetType(UINT uType);
  71. void SetFlags(UINT uFlags, UINT uMask);
  72. void SetStatus();
  73. void RemoveStatus();
  74. protected:
  75. size_t ref;
  76. UINT flags;
  77. LPWSTR address;
  78. INT result;
  79. api_downloadManager *manager;
  80. DownloadToken cookie;
  81. HANDLE completed;
  82. Callback callback;
  83. void *data;
  84. LoginStatus *status;
  85. UINT statusCookie;
  86. CRITICAL_SECTION lock;
  87. protected:
  88. RECVS_DISPATCH;
  89. };
  90. #endif //NULLSOFT_AUTH_LOGINDOWNLOADER_HEADER