bool CServerWnd::UpdateServerMetFromURL(CString strURL) { if (strURL.IsEmpty() || (strURL.Find(_T("://")) == -1)) { // not a valid URL LogError(LOG_STATUSBAR, GetResString(IDS_INVALIDURL) ); return false; } // add entered URL to LRU list even if it's not yet known whether we can download from this URL (it's just more convenient this way) if (m_pacServerMetURL && m_pacServerMetURL->IsBound()) m_pacServerMetURL->AddItem(strURL, 0); CString strTempFilename; strTempFilename.Format(_T("%stemp-%d-server.met"), thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), ::GetTickCount()); // try to download server.met Log(GetResString(IDS_DOWNLOADING_SERVERMET_FROM), strURL); CHttpDownloadDlg dlgDownload; dlgDownload.m_strTitle = GetResString(IDS_DOWNLOADING_SERVERMET); dlgDownload.m_sURLToDownload = strURL; dlgDownload.m_sFileToDownloadInto = strTempFilename; if (dlgDownload.DoModal() != IDOK) { LogError(LOG_STATUSBAR, GetResString(IDS_ERR_FAILEDDOWNLOADMET), strURL); return false; } // add content of server.met to serverlist serverlistctrl.Hide(); serverlistctrl.AddServerMetToList(strTempFilename); serverlistctrl.Visable(); (void)_tremove(strTempFilename); return true; }
void CALLBACK CHttpDownloadDlg::_OnStatusCallBack(HINTERNET hInternet, DWORD dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength) { CHttpDownloadDlg* pDlg = (CHttpDownloadDlg*) dwContext; ASSERT(pDlg); ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CHttpDownloadDlg))); pDlg->OnStatusCallBack(hInternet, dwInternetStatus, lpvStatusInformation, dwStatusInformationLength); }
UINT CHttpDownloadDlg::_DownloadThread(LPVOID pParam) { //Convert from the SDK world to the C++ world CHttpDownloadDlg* pDlg = (CHttpDownloadDlg*) pParam; ASSERT(pDlg); ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CHttpDownloadDlg))); pDlg->DownloadThread(); return 0; }
void CALLBACK CHttpDownloadDlg::_OnStatusCallBack(HINTERNET hInternet, DWORD dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength) { //Convert from the SDK C world to the C++ world // Elandal: Assumes sizeof(void*) == sizeof(unsigned long) CHttpDownloadDlg* pDlg = (CHttpDownloadDlg*) dwContext; ASSERT(pDlg); ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CHttpDownloadDlg))); pDlg->OnStatusCallBack(hInternet, dwInternetStatus, lpvStatusInformation, dwStatusInformationLength); }
UINT AFX_CDECL CHttpDownloadDlg::_DownloadThread(LPVOID pParam) { DbgSetThreadName("HttpDownload"); InitThreadLocale(); //Convert from the SDK world to the C++ world CHttpDownloadDlg* pDlg = (CHttpDownloadDlg*) pParam; ASSERT(pDlg); ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CHttpDownloadDlg))); pDlg->DownloadThread(); return 0; }
void CPPgGeneral::OnLangChange() { //MODIFIED by VC-fengwen on 2007/10/29 <begin> : 到verycd下语言包 //#define MIRRORS_URL _T("http://langmirror%i.emule-project.org/lang/%i%i%i%i/") #define MIRRORS_URL _T("http://www.emule.org.cn/language/%06d/%s") //MODIFIED by VC-fengwen on 2007/10/29 <end> : 到verycd下语言包 WORD byNewLang = (WORD)m_language.GetItemData(m_language.GetCurSel()); if (thePrefs.GetLanguageID() != byNewLang){ if (!thePrefs.IsLanguageSupported(byNewLang, false)){ if (AfxMessageBox(GetResString(IDS_ASKDOWNLOADLANGCAP) + _T("\r\n\r\n") + GetResString(IDS_ASKDOWNLOADLANG), MB_ICONQUESTION | MB_YESNO) == IDYES){ // download file // create url, use random mirror for load balancing //MODIFIED by VC-fengwen on 2007/10/29 <begin> : 到verycd下语言包 //UINT nRand = (rand()/(RAND_MAX/3))+1; //CString strUrl; //strUrl.Format(MIRRORS_URL, nRand, CGlobalVariable::m_nVersionMjr, CGlobalVariable::m_nVersionMin, CGlobalVariable::m_nVersionUpd, CGlobalVariable::m_nVersionBld); //strUrl += thePrefs.GetLangDLLNameByID(byNewLang); CString strUrl; strUrl.Format(MIRRORS_URL, CGlobalVariable::m_nVCVersionBld, thePrefs.GetLangDLLNameByID(byNewLang)); //MODIFIED by VC-fengwen on 2007/10/29 <end> : 到verycd下语言包 // safeto CString strFilename = thePrefs.GetMuleDirectory(EMULE_ADDLANGDIR, true); strFilename.Append(thePrefs.GetLangDLLNameByID(byNewLang)); // start CHttpDownloadDlg dlgDownload; dlgDownload.m_strTitle = GetResString(IDS_DOWNLOAD_LANGFILE); dlgDownload.m_sURLToDownload = strUrl; dlgDownload.m_sFileToDownloadInto = strFilename; if (dlgDownload.DoModal() == IDOK && thePrefs.IsLanguageSupported(byNewLang, true)) { // everything ok, new language downloaded and working OnSettingsChange(); return; } CString strErr; strErr.Format(GetResString(IDS_ERR_FAILEDDOWNLOADLANG), strUrl); LogError(LOG_STATUSBAR, _T("%s"), strErr); AfxMessageBox(strErr, MB_ICONERROR | MB_OK); } // undo change selection for(int i = 0; i < m_language.GetCount(); i++) if(m_language.GetItemData(i) == thePrefs.GetLanguageID()) m_language.SetCurSel(i); } else OnSettingsChange(); } }
void CServerList::AutoUpdate() { if (thePrefs.addresses_list.IsEmpty()){ // Comment UI //AfxMessageBox(GetResString(IDS_ERR_EMPTYADRESSESDAT), MB_ICONASTERISK); return; } bool bDownloaded = false; CString servermetdownload; CString servermetbackup; CString servermet; CString strURLToDownload; servermetdownload.Format(_T("%sserver_met.download"), thePrefs.GetMuleDirectory(EMULE_CONFIGDIR)); servermetbackup.Format(_T("%sserver_met.old"), thePrefs.GetMuleDirectory(EMULE_CONFIGDIR)); servermet.Format(_T("%s") SERVER_MET_FILENAME, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR)); (void)_tremove(servermetbackup); (void)_tremove(servermetdownload); (void)_trename(servermet, servermetbackup); POSITION Pos = thePrefs.addresses_list.GetHeadPosition(); while (!bDownloaded && Pos != NULL) { // TODO: Comment UI, 移动到emuledlg中去做.. CHttpDownloadDlg dlgDownload; dlgDownload.m_strTitle = GetResString(IDS_HTTP_CAPTION); strURLToDownload = thePrefs.addresses_list.GetNext(Pos); dlgDownload.m_sURLToDownload = strURLToDownload; dlgDownload.m_sFileToDownloadInto = servermetdownload; if (dlgDownload.DoModal() == IDOK) bDownloaded = true; else LogError(LOG_STATUSBAR, GetResString(IDS_ERR_FAILEDDOWNLOADMET), strURLToDownload); } if (bDownloaded) { (void)_trename(servermet, servermetdownload); (void)_trename(servermetbackup, servermet); } else { (void)_tremove(servermet); (void)_trename(servermetbackup, servermet); } }
void CPPgGeneral::OnLangChange() { #define MIRRORS_URL _T("http://langmirror%i.emule-project.org/lang/%i%i%i%i/") WORD byNewLang = (WORD)m_language.GetItemData(m_language.GetCurSel()); if (thePrefs.GetLanguageID() != byNewLang){ if (!thePrefs.IsLanguageSupported(byNewLang, false)){ if (AfxMessageBox(GetResString(IDS_ASKDOWNLOADLANGCAP) + _T("\r\n\r\n") + GetResString(IDS_ASKDOWNLOADLANG), MB_ICONQUESTION | MB_YESNO) == IDYES){ // download file // create url, use random mirror for load balancing uint16 nRand = (rand()/(RAND_MAX/3))+1; CString strUrl; strUrl.Format(MIRRORS_URL,nRand, VERSION_MJR, VERSION_MIN, VERSION_UPDATE, VERSION_BUILD);//[lama] ModVersion strUrl += thePrefs.GetLangDLLNameByID(byNewLang); // safeto CString strFilename = thePrefs.GetLangDir(); if (!PathFileExists(strFilename)) CreateDirectory(strFilename,0); strFilename.Append(thePrefs.GetLangDLLNameByID(byNewLang)); // start CHttpDownloadDlg dlgDownload; dlgDownload.m_strTitle = _T("Downloading language file"); dlgDownload.m_sURLToDownload = strUrl; dlgDownload.m_sFileToDownloadInto = strFilename; if (dlgDownload.DoModal() == IDOK && thePrefs.IsLanguageSupported(byNewLang, true)) { // everything ok, new language downloaded and working OnSettingsChange(); return; } CString strErr; strErr.Format(GetResString(IDS_ERR_FAILEDDOWNLOADLANG), strUrl); LogError(LOG_STATUSBAR, _T("%s"), strErr); AfxMessageBox(strErr, MB_ICONERROR | MB_OK); } // undo change selection for(int i = 0; i < m_language.GetCount(); i++) if(m_language.GetItemData(i) == thePrefs.GetLanguageID()) m_language.SetCurSel(i); } else OnSettingsChange(); } }
UINT AFX_CDECL CHttpDownloadDlg::_DownloadThread(LPVOID pParam) { DbgSetThreadName("HttpDownload"); InitThreadLocale(); //Convert from the SDK world to the C++ world CHttpDownloadDlg* pDlg = (CHttpDownloadDlg*) pParam; ASSERT(pDlg); ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CHttpDownloadDlg))); // BEGIN SLUGFILLER: SafeHash CReadWriteLock lock(&theApp.m_threadlock); if (!lock.ReadLock(1000)) { // netfinity: Make sure we doesn't get stuck pDlg->HandleThreadError(GetResString(IDS_HTTPDOWNLOAD_GENERIC_ERROR)); return 0; } // END SLUGFILLER: SafeHash pDlg->DownloadThread(); return 0; }
void CKademliaWnd::UpdateNodesDatFromURL(CString strURL){ CString strTempFilename; strTempFilename.Format(_T("%stemp-%d-nodes.dat"), thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), ::GetTickCount()); // try to download nodes.dat Log(GetResString(IDS_DOWNLOADING_NODESDAT_FROM), strURL); CHttpDownloadDlg dlgDownload; dlgDownload.m_strTitle = GetResString(IDS_DOWNLOADING_NODESDAT); dlgDownload.m_sURLToDownload = strURL; dlgDownload.m_sFileToDownloadInto = strTempFilename; if (dlgDownload.DoModal() != IDOK) { LogError(LOG_STATUSBAR, GetResString(IDS_ERR_FAILEDDOWNLOADNODES), strURL); return; } if (!Kademlia::CKademlia::IsRunning()){ Kademlia::CKademlia::Start(); theApp.emuledlg->ShowConnectionState(); } Kademlia::CKademlia::GetRoutingZone()->ReadFile(strTempFilename); (void)_tremove(strTempFilename); }
void CPPgSecurity::OnLoadIPFFromURL() { CString url; GetDlgItemText(IDC_UPDATEURL,url); if (!url.IsEmpty()) { // add entered URL to LRU list even if it's not yet known whether we can download from this URL (it's just more convenient this way) if (m_pacIPFilterURL && m_pacIPFilterURL->IsBound()) m_pacIPFilterURL->AddItem(url, 0); TCHAR szTempFilePath[MAX_PATH]; _tmakepath(szTempFilePath, NULL, thePrefs.GetConfigDir(), DFLT_IPFILTER_FILENAME, _T("tmp")); CHttpDownloadDlg dlgDownload; dlgDownload.m_strTitle = _T("Downloading IP filter file"); dlgDownload.m_sURLToDownload = url; dlgDownload.m_sFileToDownloadInto = szTempFilePath; if (dlgDownload.DoModal() != IDOK) { _tremove(szTempFilePath); LogWarning(LOG_STATUSBAR, _T("IP Filter download failed")); return; } bool bIsZipFile = false; bool bUnzipped = false; CZIPFile zip; if (zip.Open(szTempFilePath)) { bIsZipFile = true; CZIPFile::File* zfile = zip.GetFile(_T("guarding.p2p")); if (zfile) { TCHAR szTempUnzipFilePath[MAX_PATH]; _tmakepath(szTempUnzipFilePath, NULL, thePrefs.GetConfigDir(), DFLT_IPFILTER_FILENAME, _T(".unzip.tmp")); if (zfile->Extract(szTempUnzipFilePath)) { zip.Close(); zfile = NULL; if (_tremove(theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE("*** Error: Failed to remove default IP filter file \"%s\" - %s\n", theApp.ipfilter->GetDefaultFilePath(), strerror(errno)); if (_trename(szTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE("*** Error: Failed to rename uncompressed IP filter file \"%s\" to default IP filter file \"%s\" - %s\n", szTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath(), strerror(errno)); if (_tremove(szTempFilePath) != 0) TRACE("*** Error: Failed to remove temporary IP filter file \"%s\" - %s\n", szTempFilePath, strerror(errno)); bUnzipped = true; } else LogError(LOG_STATUSBAR, _T("Failed to extract IP filter file from downloaded IP filter ZIP file \"%s\"."), szTempFilePath); } else LogError(LOG_STATUSBAR, _T("Downloaded IP filter file \"%s\" is a ZIP file with unexpected content."), szTempFilePath); zip.Close(); } if (!bIsZipFile && !bUnzipped) { _tremove(theApp.ipfilter->GetDefaultFilePath()); _trename(szTempFilePath, theApp.ipfilter->GetDefaultFilePath()); } } OnReloadIPFilter(); }
void CPPgSecurity::OnLoadIPFFromURL() { bool bHaveNewFilterFile = false; CString url; GetDlgItemText(IDC_UPDATEURL,url); if (!url.IsEmpty()) { // add entered URL to LRU list even if it's not yet known whether we can download from this URL (it's just more convenient this way) if (m_pacIPFilterURL && m_pacIPFilterURL->IsBound()) m_pacIPFilterURL->AddItem(url, 0); CString strTempFilePath; _tmakepathlimit(strTempFilePath.GetBuffer(MAX_PATH), NULL, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), DFLT_IPFILTER_FILENAME, _T("tmp")); strTempFilePath.ReleaseBuffer(); CHttpDownloadDlg dlgDownload; dlgDownload.m_strTitle = GetResString(IDS_DWL_IPFILTERFILE); dlgDownload.m_sURLToDownload = url; dlgDownload.m_sFileToDownloadInto = strTempFilePath; if (dlgDownload.DoModal() != IDOK) { (void)_tremove(strTempFilePath); CString strError = GetResString(IDS_DWLIPFILTERFAILED); if (!dlgDownload.GetError().IsEmpty()) strError += _T("\r\n\r\n") + dlgDownload.GetError(); AfxMessageBox(strError, MB_ICONERROR); return; } CString strMimeType; GetMimeType(strTempFilePath, strMimeType); bool bIsArchiveFile = false; bool bUncompressed = false; CZIPFile zip; if (zip.Open(strTempFilePath)) { bIsArchiveFile = true; CZIPFile::File* zfile = zip.GetFile(_T("guarding.p2p")); if (zfile == NULL) zfile = zip.GetFile(_T("ipfilter.dat")); if (zfile) { CString strTempUnzipFilePath; _tmakepathlimit(strTempUnzipFilePath.GetBuffer(_MAX_PATH), NULL, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), DFLT_IPFILTER_FILENAME, _T(".unzip.tmp")); strTempUnzipFilePath.ReleaseBuffer(); if (zfile->Extract(strTempUnzipFilePath)) { zip.Close(); zfile = NULL; if (_tremove(theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to remove default IP filter file \"%s\" - %s\n"), theApp.ipfilter->GetDefaultFilePath(), _tcserror(errno)); if (_trename(strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to rename uncompressed IP filter file \"%s\" to default IP filter file \"%s\" - %s\n"), strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath(), _tcserror(errno)); if (_tremove(strTempFilePath) != 0) TRACE(_T("*** Error: Failed to remove temporary IP filter file \"%s\" - %s\n"), strTempFilePath, _tcserror(errno)); bUncompressed = true; bHaveNewFilterFile = true; } else { CString strError; strError.Format(GetResString(IDS_ERR_IPFILTERZIPEXTR), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } } else { CString strError; strError.Format(GetResString(IDS_ERR_IPFILTERCONTENTERR), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } zip.Close(); } else if (strMimeType.CompareNoCase(_T("application/x-rar-compressed")) == 0) { bIsArchiveFile = true; CRARFile rar; if (rar.Open(strTempFilePath)) { CString strFile; if (rar.GetNextFile(strFile) && (strFile.CompareNoCase(_T("ipfilter.dat")) == 0 || strFile.CompareNoCase(_T("guarding.p2p")) == 0)) { CString strTempUnzipFilePath; _tmakepathlimit(strTempUnzipFilePath.GetBuffer(MAX_PATH), NULL, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), DFLT_IPFILTER_FILENAME, _T(".unzip.tmp")); strTempUnzipFilePath.ReleaseBuffer(); if (rar.Extract(strTempUnzipFilePath)) { rar.Close(); if (_tremove(theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to remove default IP filter file \"%s\" - %s\n"), theApp.ipfilter->GetDefaultFilePath(), _tcserror(errno)); if (_trename(strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to rename uncompressed IP filter file \"%s\" to default IP filter file \"%s\" - %s\n"), strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath(), _tcserror(errno)); if (_tremove(strTempFilePath) != 0) TRACE(_T("*** Error: Failed to remove temporary IP filter file \"%s\" - %s\n"), strTempFilePath, _tcserror(errno)); bUncompressed = true; bHaveNewFilterFile = true; } else { CString strError; strError.Format(_T("Failed to extract IP filter file from RAR file \"%s\"."), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } } else { CString strError; strError.Format(_T("Failed to find IP filter file \"guarding.p2p\" or \"ipfilter.dat\" in RAR file \"%s\"."), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } rar.Close(); } else { CString strError; strError.Format(_T("Failed to open file \"%s\".\r\n\r\nInvalid file format?\r\n\r\nDownload latest version of UNRAR.DLL from http://www.rarlab.com and copy UNRAR.DLL into eMule installation folder."), url); AfxMessageBox(strError, MB_ICONERROR); } } else { CGZIPFile gz; if (gz.Open(strTempFilePath)) { bIsArchiveFile = true; CString strTempUnzipFilePath; _tmakepathlimit(strTempUnzipFilePath.GetBuffer(_MAX_PATH), NULL, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), DFLT_IPFILTER_FILENAME, _T(".unzip.tmp")); strTempUnzipFilePath.ReleaseBuffer(); // add filename and extension of uncompressed file to temporary file CString strUncompressedFileName = gz.GetUncompressedFileName(); if (!strUncompressedFileName.IsEmpty()) { strTempUnzipFilePath += _T('.'); strTempUnzipFilePath += strUncompressedFileName; } if (gz.Extract(strTempUnzipFilePath)) { gz.Close(); if (_tremove(theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to remove default IP filter file \"%s\" - %s\n"), theApp.ipfilter->GetDefaultFilePath(), _tcserror(errno)); if (_trename(strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to rename uncompressed IP filter file \"%s\" to default IP filter file \"%s\" - %s\n"), strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath(), _tcserror(errno)); if (_tremove(strTempFilePath) != 0) TRACE(_T("*** Error: Failed to remove temporary IP filter file \"%s\" - %s\n"), strTempFilePath, _tcserror(errno)); bUncompressed = true; bHaveNewFilterFile = true; } else { CString strError; strError.Format(GetResString(IDS_ERR_IPFILTERZIPEXTR), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } } gz.Close(); } if (!bIsArchiveFile && !bUncompressed) { // Check first lines of downloaded file for potential HTML content (e.g. 404 error pages) bool bValidIPFilterFile = true; FILE* fp = _tfsopen(strTempFilePath, _T("rb"), _SH_DENYWR); if (fp) { char szBuff[16384]; int iRead = fread(szBuff, 1, _countof(szBuff)-1, fp); if (iRead <= 0) bValidIPFilterFile = false; else { szBuff[iRead-1] = '\0'; const char* pc = szBuff; while (*pc == ' ' || *pc == '\t' || *pc == '\r' || *pc == '\n') pc++; if (strnicmp(pc, "<html", 5) == 0 || strnicmp(pc, "<xml", 4) == 0 || strnicmp(pc, "<!doc", 5) == 0) { bValidIPFilterFile = false; } } fclose(fp); } if (bValidIPFilterFile) { (void)_tremove(theApp.ipfilter->GetDefaultFilePath()); VERIFY( _trename(strTempFilePath, theApp.ipfilter->GetDefaultFilePath()) == 0 ); bHaveNewFilterFile = true; } else { AfxMessageBox(GetResString(IDS_DWLIPFILTERFAILED), MB_ICONERROR); } } } if (url.IsEmpty() || bHaveNewFilterFile) OnReloadIPFilter(); // In case we received an invalid IP-filter file (e.g. an 404 HTML page with HTTP status "OK"), // warn the user that there are no IP-filters available any longer. if (bHaveNewFilterFile && theApp.ipfilter->GetIPFilter().GetCount() == 0) { CString strLoaded; strLoaded.Format(GetResString(IDS_IPFILTERLOADED), theApp.ipfilter->GetIPFilter().GetCount()); CString strError; strError.Format(_T("%s\r\n\r\n%s"), GetResString(IDS_DWLIPFILTERFAILED), strLoaded); AfxMessageBox(strError, MB_ICONERROR); } }
/* void CIPFilter::UpdateIPFilterURL() */ void CIPFilter::UpdateIPFilterURL(uint32 uNewVersion) // <== Advanced Updates [MorphXT/Stulle] - Stulle { bool bHaveNewFilterFile = false; CString url = thePrefs.GetAutoUpdateIPFilter_URL(); SYSTEMTIME SysTime; if (!url.IsEmpty()) { CString strTempFilePath; _tmakepathlimit(strTempFilePath.GetBuffer(MAX_PATH), NULL, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), DFLT_IPFILTER_FILENAME, _T("tmp")); strTempFilePath.ReleaseBuffer(); CHttpDownloadDlg dlgDownload; dlgDownload.m_strTitle = GetResString(IDS_DWL_IPFILTERFILE); dlgDownload.m_sURLToDownload = url; dlgDownload.m_sFileToDownloadInto = strTempFilePath; if (PathFileExists(GetDefaultFilePath())) memcpy(&SysTime, &thePrefs.m_IPfilterVersion, sizeof(SYSTEMTIME)); else memset(&SysTime, 0, sizeof(SYSTEMTIME)); // ==> Advanced Updates [MorphXT/Stulle] - Stulle if(thePrefs.IsIPFilterViaDynDNS()) dlgDownload.m_pLastModifiedTime = NULL; else // <== Advanced Updates [MorphXT/Stulle] - Stulle dlgDownload.m_pLastModifiedTime = &SysTime; //Xman remark: m_pLastModifiedTime is a pointer which points to the SysTime-struct if (dlgDownload.DoModal() != IDOK) { (void)_tremove(strTempFilePath); CString strError = GetResString(IDS_DWLIPFILTERFAILED); if (!dlgDownload.GetError().IsEmpty()) strError += _T("\r\n\r\n") + dlgDownload.GetError(); AfxMessageBox(strError, MB_ICONERROR); return; } // ==> Advanced Updates [MorphXT/Stulle] - Stulle /* if (dlgDownload.m_pLastModifiedTime == NULL) */ if (thePrefs.IsIPFilterViaDynDNS() == false && dlgDownload.m_pLastModifiedTime == NULL) // <== Advanced Updates [MorphXT/Stulle] - Stulle return; CString strMimeType; GetMimeType(strTempFilePath, strMimeType); bool bIsArchiveFile = false; bool bUncompressed = false; CZIPFile zip; if (zip.Open(strTempFilePath)) { bIsArchiveFile = true; CZIPFile::File* zfile = zip.GetFile(_T("guarding.p2p")); if (zfile == NULL) zfile = zip.GetFile(_T("ipfilter.dat")); if (zfile) { CString strTempUnzipFilePath; _tmakepathlimit(strTempUnzipFilePath.GetBuffer(_MAX_PATH), NULL, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), DFLT_IPFILTER_FILENAME, _T(".unzip.tmp")); strTempUnzipFilePath.ReleaseBuffer(); if (zfile->Extract(strTempUnzipFilePath)) { zip.Close(); zfile = NULL; if (_tremove(theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to remove default IP filter file \"%s\" - %hs\n"), theApp.ipfilter->GetDefaultFilePath(), strerror(errno)); if (_trename(strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to rename uncompressed IP filter file \"%s\" to default IP filter file \"%s\" - %hs\n"), strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath(), strerror(errno)); if (_tremove(strTempFilePath) != 0) TRACE(_T("*** Error: Failed to remove temporary IP filter file \"%s\" - %hs\n"), strTempFilePath, strerror(errno)); bUncompressed = true; bHaveNewFilterFile = true; } else { CString strError; strError.Format(GetResString(IDS_ERR_IPFILTERZIPEXTR), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } } else { CString strError; strError.Format(GetResString(IDS_ERR_IPFILTERCONTENTERR), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } zip.Close(); } else if (strMimeType.CompareNoCase(_T("application/x-rar-compressed")) == 0) { bIsArchiveFile = true; CRARFile rar; if (rar.Open(strTempFilePath)) { CString strFile; if (rar.GetNextFile(strFile) && (strFile.CompareNoCase(_T("ipfilter.dat")) == 0 || strFile.CompareNoCase(_T("guarding.p2p")) == 0)) { CString strTempUnzipFilePath; _tmakepathlimit(strTempUnzipFilePath.GetBuffer(MAX_PATH), NULL, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), DFLT_IPFILTER_FILENAME, _T(".unzip.tmp")); strTempUnzipFilePath.ReleaseBuffer(); if (rar.Extract(strTempUnzipFilePath)) { rar.Close(); if (_tremove(theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to remove default IP filter file \"%s\" - %hs\n"), theApp.ipfilter->GetDefaultFilePath(), strerror(errno)); if (_trename(strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to rename uncompressed IP filter file \"%s\" to default IP filter file \"%s\" - %hs\n"), strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath(), strerror(errno)); if (_tremove(strTempFilePath) != 0) TRACE(_T("*** Error: Failed to remove temporary IP filter file \"%s\" - %hs\n"), strTempFilePath, strerror(errno)); bUncompressed = true; bHaveNewFilterFile = true; } else { CString strError; strError.Format(_T("Failed to extract IP filter file from RAR file \"%s\"."), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } } else { CString strError; strError.Format(_T("Failed to find IP filter file \"guarding.p2p\" or \"ipfilter.dat\" in RAR file \"%s\"."), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } rar.Close(); } else { CString strError; strError.Format(_T("Failed to open file \"%s\".\r\n\r\nInvalid file format?\r\n\r\nDownload latest version of UNRAR.DLL from http://www.rarlab.com and copy UNRAR.DLL into eMule installation folder."), url); AfxMessageBox(strError, MB_ICONERROR); } } else { CGZIPFile gz; if (gz.Open(strTempFilePath)) { bIsArchiveFile = true; CString strTempUnzipFilePath; _tmakepathlimit(strTempUnzipFilePath.GetBuffer(_MAX_PATH), NULL, thePrefs.GetMuleDirectory(EMULE_CONFIGDIR), DFLT_IPFILTER_FILENAME, _T(".unzip.tmp")); strTempUnzipFilePath.ReleaseBuffer(); // add filename and extension of uncompressed file to temporary file CString strUncompressedFileName = gz.GetUncompressedFileName(); if (!strUncompressedFileName.IsEmpty()) { strTempUnzipFilePath += _T('.'); strTempUnzipFilePath += strUncompressedFileName; } if (gz.Extract(strTempUnzipFilePath)) { gz.Close(); if (_tremove(theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to remove default IP filter file \"%s\" - %hs\n"), theApp.ipfilter->GetDefaultFilePath(), strerror(errno)); if (_trename(strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath()) != 0) TRACE(_T("*** Error: Failed to rename uncompressed IP filter file \"%s\" to default IP filter file \"%s\" - %hs\n"), strTempUnzipFilePath, theApp.ipfilter->GetDefaultFilePath(), strerror(errno)); if (_tremove(strTempFilePath) != 0) TRACE(_T("*** Error: Failed to remove temporary IP filter file \"%s\" - %hs\n"), strTempFilePath, strerror(errno)); bUncompressed = true; bHaveNewFilterFile = true; } else { CString strError; strError.Format(GetResString(IDS_ERR_IPFILTERZIPEXTR), strTempFilePath); AfxMessageBox(strError, MB_ICONERROR); } } gz.Close(); } if (!bIsArchiveFile && !bUncompressed) { // Check first lines of downloaded file for potential HTML content (e.g. 404 error pages) bool bValidIPFilterFile = true; FILE* fp = _tfsopen(strTempFilePath, _T("rb"), _SH_DENYWR); if (fp) { char szBuff[16384]; int iRead = fread(szBuff, 1, _countof(szBuff)-1, fp); if (iRead <= 0) bValidIPFilterFile = false; else { szBuff[iRead-1] = '\0'; const char* pc = szBuff; while (*pc == ' ' || *pc == '\t' || *pc == '\r' || *pc == '\n') pc++; if (strnicmp(pc, "<html", 5) == 0 || strnicmp(pc, "<xml", 4) == 0 || strnicmp(pc, "<!doc", 5) == 0) { bValidIPFilterFile = false; } } fclose(fp); } if (bValidIPFilterFile) { (void)_tremove(theApp.ipfilter->GetDefaultFilePath()); VERIFY( _trename(strTempFilePath, theApp.ipfilter->GetDefaultFilePath()) == 0 ); bHaveNewFilterFile = true; } else { AfxMessageBox(GetResString(IDS_DWLIPFILTERFAILED), MB_ICONERROR); } } } else { AfxMessageBox(_T("Failed to auto-update IPFilter. No URL given"), MB_ICONERROR); return; } // ==> Advanced Updates [MorphXT/Stulle] - Stulle /* struct tm tmTemp; thePrefs.m_last_ipfilter_check = safe_mktime(CTime::GetCurrentTime().GetLocalTm(&tmTemp)); */ // <== Advanced Updates [MorphXT/Stulle] - Stulle if (bHaveNewFilterFile) { LoadFromDefaultFile(); if (thePrefs.GetFilterServerByIP()) theApp.emuledlg->serverwnd->serverlistctrl.RemoveAllFilteredServers(); } // In case we received an invalid IP-filter file (e.g. an 404 HTML page with HTTP status "OK"), // warn the user that there are no IP-filters available any longer. if (bHaveNewFilterFile && theApp.ipfilter->GetIPFilter().GetCount() == 0) { CString strLoaded; strLoaded.Format(GetResString(IDS_IPFILTERLOADED), theApp.ipfilter->GetIPFilter().GetCount()); CString strError; strError.Format(_T("%s\r\n\r\n%s"), GetResString(IDS_DWLIPFILTERFAILED), strLoaded); AfxMessageBox(strError, MB_ICONERROR); return; } //everything fine. update the stored version if (bHaveNewFilterFile) // ==> Advanced Updates [MorphXT/Stulle] - Stulle /* memcpy(&thePrefs.m_IPfilterVersion, &SysTime, sizeof SysTime); */ { thePrefs.m_uIPFilterVersionNum = uNewVersion; if(thePrefs.IsIPFilterViaDynDNS()) { memset(&SysTime, 0, sizeof(SYSTEMTIME)); if(theApp.emuledlg->preferenceswnd && theApp.emuledlg->preferenceswnd->m_wndScar && theApp.emuledlg->preferenceswnd->m_wndScar.m_IpFilterTime) { CString strBuffer = NULL; strBuffer.Format(_T("v%u"), thePrefs.GetIPFilterVersionNum()); theApp.emuledlg->preferenceswnd->m_wndScar.m_IpFilterTime.SetWindowText(strBuffer); } } else memcpy(&thePrefs.m_IPfilterVersion, &SysTime, sizeof SysTime); } else { thePrefs.m_uIPFilterVersionNum = 0; memset(&SysTime, 0, sizeof(SYSTEMTIME)); if(thePrefs.IsIPFilterViaDynDNS()) { if(theApp.emuledlg->preferenceswnd && theApp.emuledlg->preferenceswnd->m_wndScar && theApp.emuledlg->preferenceswnd->m_wndScar.m_IpFilterTime) theApp.emuledlg->preferenceswnd->m_wndScar.m_IpFilterTime.SetWindowText(GetResString(IDS_DL_NONE)); } } if(thePrefs.IsIPFilterViaDynDNS() == false && theApp.emuledlg->preferenceswnd && theApp.emuledlg->preferenceswnd->m_wndScar && theApp.emuledlg->preferenceswnd->m_wndScar.m_IpFilterTime) { TCHAR sTime[30]; sTime[0] = _T('\0'); SysTimeToStr(thePrefs.GetIPfilterVersion(), sTime); theApp.emuledlg->preferenceswnd->m_wndScar.m_IpFilterTime.SetWindowText(sTime); } // <== Advanced Updates [MorphXT/Stulle] - Stulle }