00001
00002
00003
00004
00005
00006 #if !defined(AFX_FSDOWNLOADMGR_H__DE09A9F2_AF9D_41C0_A7D5_DEBF2CFDBA03__INCLUDED_)
00007 #define AFX_FSDOWNLOADMGR_H__DE09A9F2_AF9D_41C0_A7D5_DEBF2CFDBA03__INCLUDED_
00008
00009 #include "fsInternetDownloader.h"
00010 #include "DownloadProperties.h"
00011 #include "fsTicksMgr.h"
00012 #include "vmsCriticalSection.h"
00013
00014 #if _MSC_VER > 1000
00015 #pragma once
00016 #endif
00017
00018 typedef DWORD fsDownloadState;
00019 #define DS_STOPPED 1
00020 #define DS_DOWNLOADING 2
00021 #define DS_NEEDSTART 4
00022 #define DS_NEEDSTOP 8
00023 #define DS_DONE 16
00024 #define DS_NEEDADDSECTION 32
00025 #define DS_NEEDRESTARTFROM 64
00026 #define DS_QUERINGSIZE 128
00027 #define DS_NEEDADDSECTION2 256
00028 #define DS_RESERVINGSPACE 512
00029
00030 enum fsDownloadMgr_ExtError
00031 {
00032 DMEE_FILEWASDELETED,
00033 DMEE_STOPPEDORDONE,
00034
00035 DMEE_FATALERROR,
00036 DMEE_FILEUPDATED,
00037 DMEE_USERSTOP,
00038 DMEE_STARTING,
00039 };
00040
00041 enum fsDownloadMgr_EventDescType
00042 {
00043 EDT_INQUIRY,
00044 EDT_RESPONSE_S,
00045 EDT_RESPONSE_E,
00046 EDT_DONE,
00047 EDT_WARNING,
00048 EDT_INQUIRY2,
00049 EDT_RESPONSE_S2,
00050 };
00051
00052 typedef DWORD (*fntDownloadMgrEventFunc)(class fsDownloadMgr *pMgr, fsDownloaderEvent, UINT, LPVOID);
00053
00054 typedef void (*fntEventDescFunc)(fsDownloadMgr *pMgr, fsDownloadMgr_EventDescType enType, LPCSTR pszDesc, LPVOID lp);
00055
00056 #define DFF_NEED_INIT_FILE 1
00057 #define DFF_USE_PORTABLE_DRIVE 2
00058
00059 class fsDownloadMgr
00060 {
00061 public:
00062 BOOL HasActivity();
00063 fsDownloadState get_State();
00064 int get_ReservingDiskSpaceProgress();
00065 void DoRapidshareSupport();
00066
00067 void Reset();
00068
00069 fsString get_URL();
00070
00071 BOOL MoveToFolder (LPCSTR pszFolder);
00072 BOOL MoveFile (LPCSTR pszNewFileName);
00073
00074 static void set_GlobalOffline(BOOL bOffline);
00075 static BOOL is_GlobalOffline();
00076
00077 void set_Download (struct fsDownload* dld);
00078
00079 void RemoveHiddenAttribute();
00080
00081 void MeasureMirrorsSpeed();
00082
00083 fsInternetResult SetToRestartState ();
00084
00085 fsInternetResult FindMirrors();
00086
00087 void Set_MirrRecalcSpeedTime(UINT u);
00088
00089 fsInternetResult StartDownloading();
00090 void StopDownloading();
00091
00092 void CreateOneMoreSection();
00093
00094 BOOL IsCantStart();
00095
00096 void StopQuering();
00097
00098 fsInternetResult QuerySize(BOOL bCheckPoss = TRUE);
00099
00100 void QuerySize2 ();
00101
00102 BOOL IsQueringSize();
00103
00104 void StopSection();
00105
00106 fsInternetResult RestartDownloading();
00107
00108 BOOL IsSectionCanBeAdded();
00109
00110 void CloseFile();
00111
00112 BOOL IsFileInit();
00113
00114 BOOL InitFile (BOOL bCreateOnDisk = FALSE, LPCSTR pszSetExt = NULL);
00115
00116 fsInternetResult GetLastError();
00117
00118 BOOL DeleteFile ();
00119
00120 void ApplyProperties();
00121
00122 BOOL IsRunning();
00123
00124 BOOL IsDone();
00125
00126 BOOL SaveState (LPVOID lpBuffer, LPDWORD pdwSize);
00127
00128 BOOL LoadState (LPVOID lpBuffer, LPDWORD pdwSize, WORD wVer);
00129
00130 void CloneSettings (fsDownloadMgr* src);
00131
00132 void SetEventDescFunc (fntEventDescFunc pfn, LPVOID lpParam);
00133 void SetEventFunc (fntDownloadMgrEventFunc pfnEvents, LPVOID lpParam);
00134
00135 void SetOutputFileName (LPCSTR pszName);
00136
00137 fsInternetResult CreateByUrl (LPCSTR pszUrl, BOOL bAcceptHTMLPathes = FALSE);
00138 fsInternetDownloader* GetDownloader();
00139
00140 fsDownload_Properties* GetDP();
00141
00142 fsDownload_NetworkProperties* GetDNP();
00143
00144 fsDownloadMgr (struct fsDownload* dld = NULL);
00145 virtual ~fsDownloadMgr();
00146
00147 protected:
00148 static DWORD WINAPI _threadReserveDiskSpace (LPVOID lp);
00149 BOOL m_bDontCreateNewSections;
00150 DWORD m_dwDownloadFileFlags;
00151 bool m_bRSsupportDone;
00152
00153 void ProcessFilePathMacroses (CString &str);
00154
00155 void InitFile_ProcessMacroses();
00156 #ifndef FDM_DLDR__RAWCODEONLY
00157 class vmsMaliciousDownloadChecker *m_mdc;
00158
00159 BOOL CheckIfMalicious ();
00160 #endif
00161
00162 static vmsCriticalSection m_csRenameFile;
00163
00164 void SetFileTime (HANDLE hFile);
00165
00166 BOOL m_bRename_CheckIfRenamed;
00167
00168 BOOL m_bNeedStartAgain;
00169
00170 void AppendCommentToFileName (BOOL bMoveFile = TRUE);
00171
00172 void CheckDstFileExists();
00173
00174 BOOL OnNeedFile_FinalInit();
00175 static DWORD WINAPI _threadCalcMirrSpeed (LPVOID lp);
00176
00177 void CheckMirrSpeedRecalcRequired();
00178
00179 fsTicksMgr m_tikLastMirrMeasureTime;
00180
00181 UINT m_uMirrRecalcSpeedTime;
00182
00183 void AddSection(BOOL bCheckAdm = TRUE);
00184 BOOL m_bCantStart;
00185 static DWORD WINAPI _threadQSize (LPVOID lp);
00186 BOOL m_bFatalError;
00187 LONG m_iThread;
00188 CString m_strExtError;
00189
00190 void OnDone();
00191
00192 void DescribeAPIError(DWORD* pdwLastError = NULL);
00193
00194 DWORD ProcessSCR (fsSizeChangeReaction scr, BOOL bFirstCall = TRUE);
00195
00196 DWORD OnSCR();
00197
00198 void ApplyAdditionalExt();
00199
00200 BOOL ReserveDiskSpace();
00201
00202 BOOL BuildFileName(LPCSTR pszSetExt = NULL);
00203
00204 void Event (LPCSTR pszEvent, fsDownloadMgr_EventDescType enType = EDT_INQUIRY);
00205
00206 DWORD Event (fsDownloaderEvent ev, UINT uInfo);
00207
00208 BOOL OpenFile(BOOL bFailIfDeleted = TRUE, BOOL bDisableEvents = FALSE);
00209
00210 void RenameFile(BOOL bFormat1 = TRUE);
00211
00212 BOOL OnNeedFile();
00213 BOOL m_uNeedStartFrom;
00214
00215 void OnSectionStopped();
00216
00217 BOOL SleepInterval ();
00218 fntEventDescFunc m_pfnEventDesc;
00219 LPVOID m_lpEventDescParam;
00220 fsTicksMgr m_ticksStart;
00221 HANDLE m_hOutFile;
00222
00223 void StopDownload();
00224 fsInternetResult m_lastError;
00225
00226 fsInternetResult StartDownload();
00227
00228 static DWORD _DownloaderEvents (fsDownloaderEvent enEvent, UINT uInfo, LPVOID lp);
00229 fsDownloadState m_state;
00230 BOOL m_bThreadRunning;
00231
00232 static DWORD WINAPI _threadDownloadMgr (LPVOID lp);
00233
00234 fsInternetResult CreateInternetSession();
00235 fsDownload_Properties m_dp;
00236 fsInternetDownloader m_dldr;
00237 fntDownloadMgrEventFunc m_pfnEvents;
00238 LPVOID m_lpParamEvents;
00239 private:
00240
00241 BOOL ApplyAER (fsAlreadyExistReaction enAER);
00242 fsDownload* m_dld;
00243 };
00244
00245 #endif