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