00001
00002
00003
00004
00005
00006 #include "fsInternetURLFileDownloader.h"
00007 #include "fsURL.h"
00008 #include "common.h"
00009
00010 fsInternetURLFileDownloader::fsInternetURLFileDownloader()
00011 {
00012 m_pBuffer = NULL;
00013 m_pfnEvents = NULL;
00014 }
00015
00016 fsInternetURLFileDownloader::~fsInternetURLFileDownloader()
00017 {
00018 Free_FileBuffer ();
00019 }
00020
00021 fsInternetResult fsInternetURLFileDownloader::Download(LPCSTR pszUrl)
00022 {
00023 fsURL url;
00024 fsInternetResult ir;
00025
00026 ir = url.Crack (pszUrl);
00027 if (ir != IR_SUCCESS)
00028 return ir;
00029
00030 Event (UFDE_CONNECTING);
00031
00032 Get_File ()->set_EnableAutoRedirect (TRUE);
00033
00034 ir = Get_File ()->Open (url.GetInternetScheme (), url.GetHostName (), url.GetUserName (),
00035 url.GetPassword (), url.GetPort (), url.GetPath (), 0);
00036 if (ir != IR_SUCCESS)
00037 return ir;
00038
00039 m_bAbort = FALSE;
00040
00041 Event (UFDE_DOWNLOADING);
00042
00043 Free_FileBuffer ();
00044 ir = fsDownloadFile (Get_File (), &m_pBuffer, &m_uFileSize, &m_bAbort);
00045
00046 if (ir == IR_SUCCESS)
00047 Event (UFDE_DONE);
00048
00049 return ir;
00050 }
00051
00052 fsInternetResult fsInternetURLFileDownloader::Initialize(fsInternetSession *pSession)
00053 {
00054 return Get_File ()->Initialize (pSession);
00055 }
00056
00057 void fsInternetURLFileDownloader::Abort()
00058 {
00059 m_bAbort = TRUE;
00060 Get_File ()->CloseHandle ();
00061 }
00062
00063 fsInternetURLFile* fsInternetURLFileDownloader::Get_File()
00064 {
00065 return &m_file;
00066 }
00067
00068 LPBYTE fsInternetURLFileDownloader::Get_FileBuffer()
00069 {
00070 return m_pBuffer;
00071 }
00072
00073 void fsInternetURLFileDownloader::Free_FileBuffer()
00074 {
00075 SAFE_DELETE_ARRAY (m_pBuffer);
00076 }
00077
00078 void fsInternetURLFileDownloader::SetEventFunc(fntInternetURLFileDownloaderEvents pfn, LPVOID lpParam)
00079 {
00080 m_pfnEvents = pfn;
00081 m_lpEvParam = lpParam;
00082 }
00083
00084 void fsInternetURLFileDownloader::Event(fsInternetURLFileDownloaderEvent ev)
00085 {
00086 if (m_pfnEvents)
00087 m_pfnEvents (ev, m_lpEvParam);
00088 }
00089
00090 UINT fsInternetURLFileDownloader::Get_FileSize()
00091 {
00092 return m_uFileSize;
00093 }