00001
00002
00003
00004
00005
00006 #if !defined(AFX_FSINTERNETFILE2_H__2F47FA5E_F9B6_4C4C_B002_66C62E904353__INCLUDED_)
00007 #define AFX_FSINTERNETFILE2_H__2F47FA5E_F9B6_4C4C_B002_66C62E904353__INCLUDED_
00008
00009 #if _MSC_VER > 1000
00010 #pragma once
00011 #endif
00012
00013 #include <limits.h>
00014 #include "fsinet.h"
00015 #include <array.h>
00016 #include "fsInternetFile.h"
00017
00018 class fsInternetFile2 : public fsSpeaking
00019 {
00020 public:
00021 UINT64 GetFileSize();
00022 LPCSTR get_SuggestedFileName();
00023 fsResumeSupportType IsResumeSupported();
00024 BOOL GetLastModifiedDate(FILETIME *pTime);
00025 LPCSTR get_ContentType();
00026
00027 void set_PostData (LPCSTR psz);
00028 void set_Proxy (LPCSTR pszProxy, LPCSTR pszUser, LPCSTR pszPwd);
00029 void set_Auth (LPCSTR pszUser, LPCSTR pszPwd);
00030 void set_Cookie (LPCSTR psz);
00031 void set_Referer (LPCSTR psz);
00032 void set_UseHttp11 (BOOL bUse);
00033 void set_UserAgent (LPCSTR psz);
00034 void set_ResumeFrom (UINT64 uStart);
00035 void StopDownloading();
00036 fsInternetResult Read(LPBYTE pBuffer, DWORD dwToRead, DWORD *pdwRead);
00037 fsInternetResult StartDownloading ();
00038
00039 void set_URL (LPCSTR pszURL);
00040 fsInternetResult Initialize();
00041 fsInternetFile2();
00042 virtual ~fsInternetFile2();
00043
00044 protected:
00045 fsResumeSupportType m_enRST;
00046 UINT64 m_uStartPos;
00047 BOOL m_bDoPause;
00048 UINT64 m_uFileSize;
00049 fsString m_strSuggestedFileName;
00050 fsString m_strHttpHeader;
00051 static size_t _WriteHeader(void *ptr, size_t size, size_t nmemb, void *stream);
00052 long m_fileTime;
00053 void ExtractFileInfoFromResponse();
00054
00055 size_t OnWriteData (LPBYTE ptr, size_t size);
00056
00057
00058 struct fsNeedToRead {
00059 vms::array <BYTE> abData;
00060 UINT nDataLeft;
00061 } m_ReadReq;
00062
00063 HANDLE m_hevReadDataReq, m_hevReadDataDone;
00064 static fsInternetResult CURLcodeToIR (int code);
00065 fsInternetResult m_irLastError;
00066
00067 static DWORD WINAPI _threadDownload (LPVOID lp);
00068
00069 static size_t _WriteData (void *ptr, size_t size, size_t nmemb, void *stream);
00070
00071 void* m_curl;
00072
00073 bool m_bDownloading;
00074
00075 bool m_bAnswrFromServRcvd;
00076
00077 bool m_bNeedStop;
00078 fsString m_strContentType;
00079 };
00080
00081 #endif