From b11d2f51b337cf8d11908f1d372a932e65dcb9fe Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Thu, 3 Oct 2019 12:35:33 +0800 Subject: [PATCH] amule: bump to latest HEAD --- package/lean/amule/Makefile | 6 +- .../lean/amule/patches/001-amule-dlp.patch | 1548 ----------------- .../003_enable_upnp_cross_compile.patch | 23 - .../patches/004_file_name_conversion.patch | 78 - .../patches/005_best_keyword_kad_search.diff | 174 -- 5 files changed, 3 insertions(+), 1826 deletions(-) delete mode 100644 package/lean/amule/patches/001-amule-dlp.patch delete mode 100644 package/lean/amule/patches/003_enable_upnp_cross_compile.patch delete mode 100644 package/lean/amule/patches/004_file_name_conversion.patch delete mode 100755 package/lean/amule/patches/005_best_keyword_kad_search.diff diff --git a/package/lean/amule/Makefile b/package/lean/amule/Makefile index 50ccca8a30..2d66d714f3 100644 --- a/package/lean/amule/Makefile +++ b/package/lean/amule/Makefile @@ -8,9 +8,9 @@ include $(TOPDIR)/rules.mk PKG_NAME:=aMule -PKG_VERSION:=2.3.2 -PKG_RELEASE:=2 -PKG_REV=4b87b20 +PKG_VERSION:=20190827 +PKG_RELEASE:=1 +PKG_REV=2a1b092 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-r$(PKG_REV).tar.bz2 diff --git a/package/lean/amule/patches/001-amule-dlp.patch b/package/lean/amule/patches/001-amule-dlp.patch deleted file mode 100644 index 5a37a27a64..0000000000 --- a/package/lean/amule/patches/001-amule-dlp.patch +++ /dev/null @@ -1,1548 +0,0 @@ -diff -Naur a/configure.ac b/configure.ac ---- a/configure.ac 2016-10-06 19:01:54.000000000 +0800 -+++ b/configure.ac 2016-10-14 12:33:51.660347919 +0800 -@@ -89,6 +89,14 @@ - KDE_CONFIG_OPTIONS - QT_CONFIG_OPTIONS - -+#Dynamic Leecher Protection - Bill Lee -+AC_ARG_ENABLE( -+ [dlp], -+ [AS_HELP_STRING( -+ [--disable-dlp], -+ [Do not compile DLP.])], -+ [ENABLE_DLP=$enableval], [ENABLE_DLP=yes]) -+ - # Default is yes, because they're most likely compatible. - # However, this is only used when cross-compiling. - AC_ARG_WITH( -@@ -457,6 +465,8 @@ - AM_CONDITIONAL(GENERATE_FLEX_HEADER, test x$HAVE_FLEX_EXTENDED = xyes) - AM_CONDITIONAL(INSTALL_SKINS, test MULE_IS_ENABLED_ANY([monolithic, amule-gui])) - AM_CONDITIONAL(PLASMAMULE, test MULE_IS_ENABLED([plasmamule])) -+#Dynamic Leech Protection - Bill Lee -+AM_CONDITIONAL(ENABLE_DLP, test x$ENABLE_DLP = xyes) - - AM_CONDITIONAL([COMPILE_LIB_COMMON], [test MULE_IS_ENABLED_ANY([monolithic, amule-daemon, amulecmd, webserver, amule-gui, fileview])]) - AM_CONDITIONAL([COMPILE_LIB_EC], [test MULE_IS_ENABLED_ANY([monolithic, amule-daemon, amulecmd, webserver, amule-gui])]) -diff -Naur a/po/zh_CN.po b/po/zh_CN.po ---- a/po/zh_CN.po 2016-10-06 19:01:54.000000000 +0800 -+++ b/po/zh_CN.po 2016-10-14 12:33:51.662347964 +0800 -@@ -5,6 +5,7 @@ - # xiaoqiao <29551030@qq.com>, 2007, 2008. - # JimHu , 2009. - # Xiaoqiao , 2010. -+# Bill Lee , 2010, 2011. - # Yi Qi ,2011. - # - msgid "" -@@ -467,6 +468,12 @@ - msgid "http://kademlia.scs.cs.nyu.edu\n" - msgstr "http://kademlia.scs.cs.nyu.edu\n" - -+msgid "\nDynamic Leech Protection\n" -+msgstr "\n动态吸血保护\n" -+ -+msgid " Homepage: http://amule-dlp.googlecode.com \n" -+msgstr " 主页:http://amule-dlp.googlecode.com \n" -+ - #: src/amuleDlg.cpp:512 src/KadDlg.cpp:193 src/PartFile.cpp:918 - #: src/PartFile.cpp:926 src/PrefsUnifiedDlg.cpp:629 - #: src/PrefsUnifiedDlg.cpp:734 src/PrefsUnifiedDlg.cpp:847 -@@ -3856,6 +3863,9 @@ - msgid "Click on this button to update the nodes list from URL ..." - msgstr "按此更新节点列表自网址..." - -+msgid "DLP Info" -+msgstr "动态反吸血信息" -+ - #: src/muuli_wdr.cpp:2649 - msgid "Nodes (0)" - msgstr "节点(0)" -@@ -7682,6 +7692,48 @@ - #~ "\n" - #~ "此外,浏览器设定已经被重设为系统默认值。如有必要,请重新配置浏览器选项。\n" - -+msgid "Dynamic Leecher Protection Options" -+msgstr "动态反吸血保护选项" -+ -+msgid "Reload antiLeech" -+msgstr "重新装载 antiLeech" -+ -+msgid "Check bad modstring" -+msgstr "根据 Mod 名字检测吸血驴" -+ -+msgid "Check bad username" -+msgstr "根据用户名字检测吸血驴" -+ -+msgid "Check bad userhash" -+msgstr "检测错误的用户哈希值" -+ -+msgid "Check bad hello tag" -+msgstr "根据握手标签(HelloTag)检测吸血驴" -+ -+msgid "Check bad info tag" -+msgstr "根据 InfoTag 检测吸血驴" -+ -+msgid "Check ghost mod" -+msgstr "检测幽灵客户端(Ghost Mod)" -+ -+#~ msgid "Ban VeryCD easyMule2" -+#~ msgstr "屏蔽 VeryCD easyMule2" -+ -+msgid "Ban eMule VeryCD mod(Please consider carefully whether to use)" -+msgstr "屏蔽 VeryCD eMule(请慎重考虑是否使用)" -+ -+#~ msgid "Ban VeryCD miniMule" -+#~ msgstr "屏蔽 VeryCD miniMule" -+ -+msgid "Trying to load antiLeech..." -+msgstr "尝试加载 antiLeech..." -+ -+msgid "No antiLeech available!" -+msgstr "未找到 antiLeech!" -+ -+msgid "Succeed loading antiLeech! Version: %d" -+msgstr "成功加载 antiLeech! 版本: %d" -+ - #~ msgid "Fetching status..." - #~ msgstr "正在获取状态..." - -diff -Naur a/src/BaseClient.cpp b/src/BaseClient.cpp ---- a/src/BaseClient.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/BaseClient.cpp 2016-10-14 12:35:45.793953665 +0800 -@@ -1,4 +1,3 @@ --// - // This file is part of the aMule Project. - // - // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) -@@ -23,6 +22,11 @@ - // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - // - -+//Dynamic Leech Protect - Bill Lee -+#ifdef AMULE_DLP -+#include "DLP.h" -+#endif -+ - #include - #include - #include -@@ -83,10 +87,8 @@ - #include "kademlia/kademlia/UDPFirewallTester.h" - #include "kademlia/routing/RoutingZone.h" - -- - //#define __PACKET_DEBUG__ - -- - // some client testing variables - static wxString crash_name = wxT("[Invalid User Name]"); - static wxString empty_name = wxT("[Empty User Name]"); -@@ -290,6 +292,10 @@ - m_cMessagesReceived = 0; - m_cMessagesSent = 0; - -+ #ifdef AMULE_DLP -+ dlp_nonofficialopcodes = false; //Dynamic Leecher Protect -+ #endif -+ - } - - -@@ -635,6 +641,15 @@ - m_fSharedDirectories = 1; - dwEmuleTags |= 4; - break; -+ //Bill Lee start -+ //Dynamic Leecher Protection -+ #ifdef AMULE_DLP -+ default: //if tag isn't those above, it may be used by leecher. -+ theDLP->CheckHelloTag(this, temptag.GetNameID()); -+ dlp_nonofficialopcodes = true; //to detect Ghost Mod -+ break; -+ //Bill Lee end -+ #endif - } - } - -@@ -717,6 +732,11 @@ - Kademlia::CKademlia::Bootstrap(wxUINT32_SWAP_ALWAYS(GetIP()), GetKadPort()); - } - -+ //Dynamic Leecher Protection - Bill Lee -+ #ifdef AMULE_DLP -+ theDLP->DLPCheck(this); -+ #endif -+ - return bIsMule; - } - -@@ -966,6 +986,14 @@ - % GetClientFullInfo() - ); - -+ //Bill Lee start -+ //Dynamic Leecher Protection -+ #ifdef AMULE_DLP -+ theDLP->CheckInfoTag(this, temptag.GetNameID()); -+ dlp_nonofficialopcodes = true; -+ #endif -+ //Bill Lee end -+ - break; - } - } -@@ -1003,6 +1031,11 @@ - m_byInfopacketsReceived |= IP_EMULEPROTPACK; - } - -+ //Dynamic Leecher Protection - Added by Bill Lee -+ #ifdef AMULE_DLP -+ theDLP->DLPCheck(this); -+ #endif -+ - return (protocol_version == 0xFF); // This was a OS_Info? - } - -@@ -2302,7 +2335,7 @@ - } - - --#ifdef __DEBUG__ -+#if defined (__DEBUG__) || defined (AMULE_DLP) - wxString CUpDownClient::GetClientFullInfo() - { - if (m_clientVerString.IsEmpty()) { -diff -Naur a/src/CString_wx.h b/src/CString_wx.h ---- a/src/CString_wx.h 1970-01-01 08:00:00.000000000 +0800 -+++ b/src/CString_wx.h 2016-10-14 12:33:51.664348010 +0800 -@@ -0,0 +1,59 @@ -+/** -+ * Author: Bill Lee -+ * License: GNU GPL -+ */ -+//--------------------- -+#ifndef CSTRING_WX_H -+#define CSTRING_WX_H -+ -+//#include -+#include -+ -+class CString : public wxString{ -+ public: -+ CString(){} -+ CString(wxChar c, size_t n=1): wxString(c, n){} -+ CString(const wxChar* str): wxString(str){} -+ CString(const wxString& str): wxString(str){} -+ CString(const CString& str): wxString(str){} -+ //--------------------- -+ CString& operator=(const wxChar* str){ -+ wxString::operator=(str); -+ return *this; -+ } -+ //operator*() from wxString; -+ size_t GetLength()const{ return Length(); } -+ wxChar GetAt(size_t nIndex)const{ return GetChar(nIndex); } -+ //IsEmpty() from wxString; -+ CString& TrimLeft(wxChar c){ -+ size_t pos = find_first_not_of(c); -+ if(pos == 0) -+ return *this; -+ erase(0, pos); -+ return *this; -+ } -+ CString& TrimRight(wxChar c){ -+ size_t pos = find_last_not_of(c) + 1; -+ if(pos == Length()) -+ return *this; -+ erase(pos, Length() - pos); -+ return *this; -+ } -+ CString Trim(){ -+ CString ret(*this); -+ ret.wxString::Trim(false); /* wxString::Trim(bool fromright = true) */ -+ ret.wxString::Trim(true); -+ return ret; -+ } -+ //Find(wxChar) and Find(wxChar*) from wxString; -+ int Find(const CString& str)const{ return wxString::Find(str.c_str()); } -+ int ReverseFind(const wxChar c)const{ return wxString::Find(c, true); } -+ int ReverseFind(const wxChar* str)const{ return rfind(str); } -+ int ReverseFind(const CString& str)const{ return rfind(str); } -+ CString Right(size_t len)const{ return wxString::Right(len); } -+ CString Left(size_t len)const{ return wxString::Left(len); } -+ CString Mid(size_t first, size_t count = wxSTRING_MAXLEN)const{ -+ return wxString::Mid(first, count); -+ } -+}; -+#endif -diff -Naur a/src/DLP.cpp b/src/DLP.cpp ---- a/src/DLP.cpp 1970-01-01 08:00:00.000000000 +0800 -+++ b/src/DLP.cpp 2016-10-14 12:33:51.664348010 +0800 -@@ -0,0 +1,190 @@ -+// Copyright (C) 2011 Bill Lee -+// -+// This program is free software; you can redistribute it and/or modify -+// it under the terms of the GNU General Public License as published by -+// the Free Software Foundation; either version 2 of the License, or -+// (at your option) any later version. -+// -+// This program is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+// -+// You should have received a copy of the GNU General Public License -+// along with this program; if not, write to the Free Software -+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+// -+#include "Logger.h" -+ -+#include "DLP.h" -+#include "antiLeech.h" -+#include /* Needed for wxDynamicLibrary */ -+ -+#include "DLPPref.h" -+#include "Preferences.h" // Needed for CPreferences -+#include "amule.h" // Needed for theApp -+ -+#include /* Needed for wxStandardPaths */ -+ -+#define PRE_CHECK(tag) if( (!c->IsBanned()) && antiLeech && (thePrefs::GetDLPCheckMask() & tagn) ) -+ -+void DLP::CheckHelloTag(CUpDownClient* c, UINT tagn){ -+ PRE_CHECK(PF_HELLOTAG){ -+ const wxChar* dlp_result = antiLeech->DLPCheckHelloTag(tagn); -+ if(dlp_result != NULL) { -+ wxString ret; -+ ret.Printf(_("[HelloTag %s] %s"), dlp_result, c->GetClientFullInfo().c_str()); -+ //ret.Printf(_("[HelloTag %s] %s"), dlp_result, c->GetClientShortInfo().c_str()); -+ c->Ban(); -+ theApp->AddDLPMessageLine(ret); -+ } -+ } -+} -+ -+void DLP::CheckInfoTag(CUpDownClient* c, UINT tagn){ -+ PRE_CHECK(PF_INFOTAG){ -+ const wxChar* dlp_result = antiLeech->DLPCheckInfoTag(tagn); -+ if(dlp_result != NULL) { -+ wxString ret; -+ ret.Printf(_("[InfoTag %s] %s"), dlp_result, c->GetClientFullInfo().c_str()); -+ //ret.Printf(_("[InfoTag %s] %s"), dlp_result, c->GetClientShortInfo().c_str()); -+ c->Ban(); -+ theApp->AddDLPMessageLine(ret); -+ } -+ } -+} -+ -+bool DLP::DLPCheck(CUpDownClient* c){ -+ const wxChar* tmp = NULL; -+ wxString ret; -+ -+ unsigned int prefs = thePrefs::GetDLPCheckMask(); -+ -+ CString modver(c->GetClientModString()); -+ CString clientver(c->GetClientVerString()); -+ CString uname(c->GetUserName()); -+ CString uhash(wxString(c->GetUserHash().EncodeSTL().c_str(), wxConvUTF8)); -+ -+ //CheckGhostMod -+ if(prefs & PF_GHOSTMOD) { -+ if(c->HasNonOfficialOpCodes() && (modver.IsEmpty())) { -+ ret = _("GhostMod"); -+ tmp = ret.c_str(); //char pointer -+ } -+ } -+ -+ // Check bad modstring -+ if ((prefs & PF_MODSTRING) && (tmp == NULL)) { -+ if((tmp = antiLeech->DLPCheckModstring_Soft(modver.c_str(), clientver.c_str())) == NULL) -+ tmp = antiLeech->DLPCheckModstring_Hard(modver.c_str(), clientver.c_str()); -+ } -+ /* -+ if ((prefs & PF_USERHASH) && (tmp == NULL)) { -+ // not finished -+ } -+ */ -+ // Check bad username -+ if ((prefs & PF_USERNAME) && (tmp == NULL)) { -+ if ((tmp = antiLeech->DLPCheckNameAndHashAndMod(uname, uhash, modver)) == NULL){ -+ if( (tmp = antiLeech->DLPCheckUsername_Hard(uname.c_str())) == NULL ) -+ tmp = antiLeech->DLPCheckUsername_Soft(uname.c_str()); -+ } -+ } -+ -+ -+ // Check VeryCD eMule -+ if ((prefs & PF_VERYCDEMULE) && (tmp == NULL)) { -+ if(modver.Find(wxT("VeryCD")) != wxNOT_FOUND){ -+ ret = _("VeryCD Mod"); -+ tmp = ret.c_str(); -+ } -+ } -+ -+ if (tmp != NULL) { -+ ret = tmp; -+ wxString wxInfo; -+ wxInfo.Printf(wxT("[%s] %s"), ret.c_str(), c->GetClientFullInfo().c_str()); -+ //wxInfo.Printf(wxT("[%s] %s"), ret.c_str(), c->GetClientShortInfo().c_str()); -+ c->Ban(); -+ theApp->AddDLPMessageLine(wxInfo); -+ return true; -+ } -+ -+ return false; -+ -+} -+ -+int DLP::ReloadAntiLeech(){ -+ //Unloading -+ AddLogLineN( _("Checking if there is a antiLeech working...")); -+ if(antiLeechLib.IsLoaded()){ -+ Destoryer fn = (Destoryer)(antiLeechLib.GetSymbol( wxT("destoryAntiLeechInstant"))); -+ wxASSERT(fn); -+ AddLogLineN( _("Unload previous antiLeech...")); -+ fn(antiLeech); -+ antiLeech = NULL; -+ antiLeechLib.Unload(); -+ } -+ else -+ AddLogLineN( _("No working antiLeech exists.")); -+ //Get lib's location -+ wxStandardPathsBase &spb(wxStandardPaths::Get()); -+#ifdef __WXMSW__ -+ wxString dataDir(spb.GetPluginsDir()); -+#elif defined(__WXMAC__) -+ wxString dataDir(spb.GetDataDir()); -+#else -+ wxString dataDir(spb.GetDataDir().BeforeLast(wxT('/')) + wxT("/amule")); -+#endif -+ wxString localName = wxDynamicLibrary::CanonicalizeName(wxT("antiLeech")); -+ wxString systemwideFile(JoinPaths(dataDir, localName)); -+ //wxString userFile(theApp->ConfigDir + localName); -+ wxString userFile(thePrefs::GetConfigDir() + localName); -+ wxString fallbackFile(wxT("antiLeech")); -+ //Try to load lib; -+ AddLogLineN( _("Trying to load antiLeech...")); -+ if( !LoadFrom(userFile) ){ -+ if( !LoadFrom(systemwideFile) ){ -+ if( !LoadFrom(fallbackFile) ){ -+ AddLogLineC( _("No antiLeech available!")); -+ return 1; //Not found -+ } -+ } -+ } -+ //Searching symbol "createAntiLeechInstant" -+ Creator fn = (Creator)(antiLeechLib.GetSymbol( wxT("createAntiLeechInstant") )); -+ if(!fn){ -+ antiLeechLib.Unload(); -+ AddLogLineC( _("antiLeech found, but it seems not to be a valid antiLeech!")); -+ return 2; //Found, but isn't antiLeech -+ } -+ //Try to create antiLeech -+ antiLeech = fn(); -+ if(antiLeech){ -+ wxString logline; -+ logline.Printf(_("Succeed loading antiLeech! Version: %d"), antiLeech->GetDLPVersion()); -+ AddLogLineC( logline); -+ return 0; -+ } -+ //else -+ antiLeechLib.Unload(); -+ AddLogLineC( _("FAIL! An error occur when setting up antiLeech.")); -+ return 3; //Fail to create antiLeech instant -+ -+} -+ -+DLP::~DLP(){ -+ if(antiLeechLib.IsLoaded()){ -+ Destoryer fn = (Destoryer)(antiLeechLib.GetSymbol( wxT("destoryAntiLeechInstant"))); -+ wxASSERT(fn); -+ AddLogLineN( _("Unload previous antiLeech...")); -+ fn(antiLeech); -+ //antiLeech = NULL; -+ //antiLeechLib.Unload(); -+ } -+} -+ -+bool DLP::LoadFrom(wxString& file){ -+ antiLeechLib.Load(file); -+ return antiLeechLib.IsLoaded(); -+} -diff -Naur a/src/DLP.h b/src/DLP.h ---- a/src/DLP.h 1970-01-01 08:00:00.000000000 +0800 -+++ b/src/DLP.h 2016-10-14 12:33:51.665348032 +0800 -@@ -0,0 +1,45 @@ -+// Copyright (C) 2011 Bill Lee -+// -+// This program is free software; you can redistribute it and/or modify -+// it under the terms of the GNU General Public License as published by -+// the Free Software Foundation; either version 2 of the License, or -+// (at your option) any later version. -+// -+// This program is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+// -+// You should have received a copy of the GNU General Public License -+// along with this program; if not, write to the Free Software -+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+// -+ -+class IantiLeech; //forward declaretion -+ -+#include "updownclient.h" // Needed for CUpDownClient -+#include "antiLeech_wx.h" -+ -+#include -+ -+class DLP -+{ -+public: -+ DLP() : antiLeech(NULL) { ReloadAntiLeech(); } -+ ~DLP(); -+ -+ void CheckHelloTag(CUpDownClient*, UINT tagnumber); -+ void CheckInfoTag(CUpDownClient*, UINT tagnumber); -+ bool DLPCheck(CUpDownClient*); -+ -+ int ReloadAntiLeech(); -+ -+private: -+ typedef IantiLeech* (*Creator)(); -+ typedef int (*Destoryer)(IantiLeech*); -+ -+ wxDynamicLibrary antiLeechLib; -+ IantiLeech* antiLeech; -+ -+ bool LoadFrom(wxString& file); -+}; -diff -Naur a/src/DLPPref.h b/src/DLPPref.h ---- a/src/DLPPref.h 1970-01-01 08:00:00.000000000 +0800 -+++ b/src/DLPPref.h 2016-10-14 12:33:51.665348032 +0800 -@@ -0,0 +1,15 @@ -+#ifndef ANTILEECH_AMULE_H -+#define ANTILEECH_AMULE_H -+ -+/* Define DLPCheck prefs arg */ -+#define PF_MODSTRING 0x1 -+#define PF_USERHASH 0x2 -+#define PF_USERNAME 0x4 -+#define PF_HELLOTAG 0x8 -+#define PF_INFOTAG 0x10 -+#define PF_VERYCDEMULE 0x20 -+//#define PF_EASYMULE 0x40 -+//#define PF_MINIMULE 0x80 -+#define PF_GHOSTMOD 0x100 -+ -+#endif -diff -Naur a/src/DownloadQueue.cpp b/src/DownloadQueue.cpp ---- a/src/DownloadQueue.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/DownloadQueue.cpp 2016-10-14 12:33:51.665348032 +0800 -@@ -623,6 +623,15 @@ - return; - } - -+ //Dynamic Leecher Protect - Bill Lee -+ #ifdef AMULE_DLP -+ if ( source->IsBanned() ){ -+ source->Safe_Delete(); -+ return; -+ } -+ #endif -+ //Bill Lee end -+ - // Filter sources which are known to be dead/useless - if ( theApp->clientlist->IsDeadSource( source ) || sender->IsDeadSource(source) ) { - source->Safe_Delete(); -diff -Naur a/src/ExternalConn.cpp b/src/ExternalConn.cpp ---- a/src/ExternalConn.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/ExternalConn.cpp 2016-10-14 12:33:51.666348055 +0800 -@@ -57,6 +57,9 @@ - #include "kademlia/kademlia/UDPFirewallTester.h" - #include "Statistics.h" - -+#ifdef AMULE_DLP -+#include "DLP.h" -+#endif - - //-------------------- File_Encoder -------------------- - -@@ -1384,6 +1387,15 @@ - } - } - break; -+ //Dynamic Leech Protect - Bill Lee -+ #ifdef AMULE_DLP -+ case EC_OP_ANTILEECH_RELOAD: -+ if( theDLP->ReloadAntiLeech() ) -+ response = new CECPacket(EC_OP_FAILED); -+ else -+ response = new CECPacket(EC_OP_NOOP); -+ break; -+ #endif - // - // Status requests - // -diff -Naur a/src/Logger.cpp b/src/Logger.cpp ---- a/src/Logger.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/Logger.cpp 2016-10-14 12:40:22.827322335 +0800 -@@ -297,6 +297,8 @@ - } - - CLogger theLogger; -+//Dynamic Leech Protect - persmule -+CLogger dlpLogger; - - BEGIN_EVENT_TABLE(CLogger, wxEvtHandler) - EVT_MULE_LOGGING(CLogger::OnLoggingEvent) -diff -Naur a/src/Logger.h b/src/Logger.h ---- a/src/Logger.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/Logger.h 2016-10-14 12:41:14.694519856 +0800 -@@ -310,6 +310,8 @@ - }; - - extern CLogger theLogger; -+//Dynamic Leech Protect - persmule -+extern CLogger dlpLogger; - - /** - * This class forwards log-lines from wxWidgets to CLogger. -@@ -456,5 +458,8 @@ - #define AddLogLineF(string) theLogger.AddLogLine(__TFILE__, __LINE__, false, logStandard, string, false, false) - #endif - -+//Dynamic Leech Protect - persmule -+#define DlpAddLogLine(string) dlpLogger.AddLogLine(__TFILE__, __LINE__, false, logStandard, string, false, false) -+ - #endif - // File_checked_for_headers -diff -Naur a/src/LoggerConsole.cpp b/src/LoggerConsole.cpp ---- a/src/LoggerConsole.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/LoggerConsole.cpp 2016-10-14 12:41:54.805446813 +0800 -@@ -85,6 +85,8 @@ - } - - CLogger theLogger; -+//Dynamic Leech Protect - persmule -+CLogger dlpLogger; - - BEGIN_EVENT_TABLE(CLogger, wxEvtHandler) - END_EVENT_TABLE() -diff -Naur a/src/Makefile.am b/src/Makefile.am ---- a/src/Makefile.am 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/Makefile.am 2016-10-14 12:33:51.666348055 +0800 -@@ -179,6 +179,13 @@ - kademlia/routing/RoutingZone.cpp - - -+#Dynamic Leecher Protection - Bill Lee -+if ENABLE_DLP -+core_sources += \ -+ DLP.cpp -+AM_CPPFLAGS += -DAMULE_DLP -+endif -+ - gui_sources = \ - amule-gui.cpp \ - amuleDlg.cpp \ -diff -Naur a/src/Preferences.cpp b/src/Preferences.cpp ---- a/src/Preferences.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/Preferences.cpp 2016-10-14 12:33:51.667348078 +0800 -@@ -51,6 +51,11 @@ - - #include "UserEvents.h" - -+#ifdef AMULE_DLP -+#include "DLPPref.h" -+#include "antiLeech.h" -+#endif -+ - #ifndef AMULE_DAEMON - #include - #include "muuli_wdr.h" -@@ -344,6 +349,19 @@ - wxWindow* m_widget; - }; - -+/* Dynamic Leecher Protection */ -+#ifdef AMULE_DLP -+bool CPreferences::s_DLPCheckModString; -+bool CPreferences::s_DLPCheckUsername; -+bool CPreferences::s_DLPCheckUserHash; -+bool CPreferences::s_DLPCheckHelloTag; -+bool CPreferences::s_DLPCheckInfoTag; -+//bool CPreferences::s_DLPCheckEasyMule; -+bool CPreferences::s_DLPCheckVeryCDMod; -+//bool CPreferences::s_DLPCheckminiMule; //Added by Bill Lee -+bool CPreferences::s_DLPCheckGhostMod; -+unsigned int CPreferences::s_DLPCheckMask; -+#endif - - /** Cfg class for wxStrings. */ - class Cfg_Str : public Cfg_Tmpl -@@ -953,6 +971,11 @@ - s_userhash[5] = 14; - s_userhash[14] = 111; - -+ // Dynamic Leecher Protection -+ #ifdef AMULE_DLP -+ CalcDLPCheckMask(); -+ #endif -+ - #ifndef CLIENT_GUI - LoadPreferences(); - ReloadSharedFolders(); -@@ -1062,6 +1085,20 @@ - NewCfgItem( IDC_NETWORKKAD, (new Cfg_Bool( wxT("/eMule/ConnectToKad"), s_ConnectToKad, true )) ); - NewCfgItem( IDC_NETWORKED2K, ( new Cfg_Bool( wxT("/eMule/ConnectToED2K"), s_ConnectToED2K, true ) )); - -+ /** -+ * Dynamic Leecher Protection -+ **/ -+ #ifdef AMULE_DLP -+ NewCfgItem(IDC_CHECKMODSTRING, (new Cfg_Bool( wxT("/DLP/CheckModString"), s_DLPCheckModString, true ))); -+ NewCfgItem(IDC_CHECKUSERNAME, (new Cfg_Bool( wxT("/DLP/CheckUsername"), s_DLPCheckUsername, true ))); -+ NewCfgItem(IDC_CHECKUSERHASH, (new Cfg_Bool( wxT("/DLP/CheckUserHash"), s_DLPCheckUserHash, true ))); -+ NewCfgItem(IDC_CHECKHELLOTAG, (new Cfg_Bool( wxT("/DLP/CheckHelloTag"), s_DLPCheckHelloTag, true ))); -+ NewCfgItem(IDC_CHECKINFOTAG, (new Cfg_Bool( wxT("/DLP/CheckInfoTag"), s_DLPCheckInfoTag, true ))); -+ //NewCfgItem(IDC_CHECKEASYMULE, (new Cfg_Bool( wxT("/DLP/CheckEasyMule"), s_DLPCheckEasyMule, true ))); //Modified by Bill Lee -+ NewCfgItem(IDC_CHECKVERYCDMOD, (new Cfg_Bool( wxT("/DLP/CheckVeryCDMod"), s_DLPCheckVeryCDMod, false ))); -+ //NewCfgItem(IDC_CHECKMINIMULE, (new Cfg_Bool( wxT("/DLP/CheckminiMule"), s_DLPCheckminiMule, true))); //Added by Bill Lee -+ NewCfgItem(IDC_CHECKGHOSTMOD, (new Cfg_Bool( wxT("/DLP/CheckGhostMod"), s_DLPCheckGhostMod, true ))); //Added by Bill Lee. -+ #endif - - /** - * Files -@@ -1471,6 +1508,11 @@ - } - - SavePreferences(); -+ -+ // Dynamic Leecher Protection -+ #ifdef AMULE_DLP -+ CalcDLPCheckMask(); -+ #endif - - #ifndef CLIENT_GUI - CTextFile sdirfile; -@@ -1483,6 +1525,21 @@ - #endif - } - -+#ifdef AMULE_DLP -+void CPreferences::CalcDLPCheckMask() -+{ -+ s_DLPCheckMask = 0; -+ if (s_DLPCheckModString) s_DLPCheckMask |= PF_MODSTRING; -+ if (s_DLPCheckUsername) s_DLPCheckMask |= PF_USERNAME; -+ if (s_DLPCheckUserHash) s_DLPCheckMask |= PF_USERHASH; -+ if (s_DLPCheckHelloTag) s_DLPCheckMask |= PF_HELLOTAG; -+ if (s_DLPCheckInfoTag) s_DLPCheckMask |= PF_INFOTAG; -+ if (s_DLPCheckGhostMod) s_DLPCheckMask |= PF_GHOSTMOD; -+ //if (s_DLPCheckEasyMule) s_DLPCheckMask |= PF_EASYMULE; -+ if (s_DLPCheckVeryCDMod) s_DLPCheckMask |= PF_VERYCDEMULE; -+ //if (s_DLPCheckminiMule) s_DLPCheckMask |= PF_MINIMULE; //Added by Bill Lee -+} -+#endif - - CPreferences::~CPreferences() - { -diff -Naur a/src/Preferences.h b/src/Preferences.h ---- a/src/Preferences.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/Preferences.h 2016-10-14 12:33:51.667348078 +0800 -@@ -579,6 +579,11 @@ - // Sleep - static bool GetPreventSleepWhileDownloading() { return s_preventSleepWhileDownloading; } - static void SetPreventSleepWhileDownloading(bool status) { s_preventSleepWhileDownloading = status; } -+ -+ // Dynamic Leecher Protection -+ #ifdef AMULE_DLP -+ static unsigned int GetDLPCheckMask() {return s_DLPCheckMask;} -+ #endif - protected: - static int32 GetRecommendedMaxConnections(); - -@@ -599,6 +604,11 @@ - private: - void LoadPreferences(); - void SavePreferences(); -+ -+ // Dynamic Leecher Protection -+ #ifdef AMULE_DLP -+ void CalcDLPCheckMask(); -+ #endif - - protected: - static wxString s_configDir; -@@ -813,6 +823,20 @@ - // Stats server - static wxString s_StatsServerName; - static wxString s_StatsServerURL; -+ -+ // Dynamic Leecher Protection -+ #ifdef AMULE_DLP -+ static bool s_DLPCheckModString; -+ static bool s_DLPCheckUsername; -+ static bool s_DLPCheckUserHash; -+ static bool s_DLPCheckHelloTag; -+ static bool s_DLPCheckInfoTag; -+ //static bool s_DLPCheckEasyMule; -+ static bool s_DLPCheckVeryCDMod; -+ //static bool s_DLPCheckminiMule; //Added by Bill Lee -+ static bool s_DLPCheckGhostMod; //Added by Bill Lee -+ static unsigned int s_DLPCheckMask; -+ #endif - }; - - -diff -Naur a/src/PrefsUnifiedDlg.cpp b/src/PrefsUnifiedDlg.cpp ---- a/src/PrefsUnifiedDlg.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/PrefsUnifiedDlg.cpp 2016-10-14 12:33:51.668348101 +0800 -@@ -53,6 +53,11 @@ - #include "UserEvents.h" - #include "PlatformSpecific.h" // Needed for PLATFORMSPECIFIC_CAN_PREVENT_SLEEP_MODE - -+//Dynamic Leech Protect - Bill Lee -+#ifdef AMULE_DLP -+#include "DLP.h" -+#endif -+ - BEGIN_EVENT_TABLE(PrefsUnifiedDlg,wxDialog) - // Events - #define USEREVENTS_EVENT(ID, NAME, VARS) \ -@@ -114,6 +119,11 @@ - EVT_CHOICE(IDC_COLORSELECTOR, PrefsUnifiedDlg::OnColorCategorySelected) - EVT_LIST_ITEM_SELECTED(ID_PREFSLISTCTRL,PrefsUnifiedDlg::OnPrefsPageChange) - -+ //Dynamic Leech Protect - Bill Lee -+ #ifdef AMULE_DLP -+ EVT_BUTTON(IDC_RELOADANTILEECH, PrefsUnifiedDlg::OnButtonReloadAntiLeech) -+ #endif -+ - EVT_INIT_DIALOG(PrefsUnifiedDlg::OnInitDialog) - - EVT_COMMAND_SCROLL(IDC_SLIDER, PrefsUnifiedDlg::OnScrollBarChange) -@@ -187,6 +197,9 @@ - { wxTRANSLATE("Online Signature"), PreferencesOnlineSigTab, 21 }, - { wxTRANSLATE("Advanced"), PreferencesaMuleTweaksTab, 12 }, - { wxTRANSLATE("Events"), PreferencesEventsTab, 5 } -+#ifdef AMULE_DLP -+ ,{ wxTRANSLATE("DLP"), PreferencesDLPTab, 5} -+#endif - #ifdef __DEBUG__ - ,{ wxTRANSLATE("Debugging"), PreferencesDebug, 25 } - #endif -@@ -1076,6 +1089,21 @@ - theApp->ipfilter->Update( CastChild( IDC_IPFILTERURL, wxTextCtrl )->GetValue() ); - } - -+//Bill Lee -+#ifdef AMULE_DLP -+void PrefsUnifiedDlg::OnButtonReloadAntiLeech(wxCommandEvent& WXUNUSED(event)){ -+ #ifndef CLIENT_GUI -+ if( theDLP->ReloadAntiLeech() ) -+ wxMessageBox(_("Cannot load antiLeech!"), _("Message"), wxOK | wxICON_EXCLAMATION, this); -+ else -+ wxMessageBox(_("Succeed loading antiLeech!"), _("Message"), wxOK | wxICON_INFORMATION, this); -+ #else -+ AddLogLineN(_("Reload antiLeech from remote GUI has not been implemented.")); -+ wxMessageBox(_("Sorry, it has not been implemented yet!")); -+ #endif -+} -+#endif -+ - - void PrefsUnifiedDlg::OnPrefsPageChange(wxListEvent& event) - { -diff -Naur a/src/PrefsUnifiedDlg.h b/src/PrefsUnifiedDlg.h ---- a/src/PrefsUnifiedDlg.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/PrefsUnifiedDlg.h 2016-10-14 12:33:51.668348101 +0800 -@@ -124,6 +124,9 @@ - void OnUserEventSelected(wxListEvent& event); - void OnLanguageChoice(wxCommandEvent &event); - void CreateEventPanels(const int idx, const wxString& vars, wxWindow* parent); -+ #ifdef AMULE_DLP -+ void OnButtonReloadAntiLeech(wxCommandEvent &event); /* Dynamic Leech Protect - Bill Lee */ -+ #endif - - void OnInitDialog( wxInitDialogEvent& evt ); - -diff -Naur a/src/ServerWnd.cpp b/src/ServerWnd.cpp ---- a/src/ServerWnd.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/ServerWnd.cpp 2016-10-14 12:33:51.668348101 +0800 -@@ -46,6 +46,7 @@ - EVT_BUTTON(ID_BTN_RESET, CServerWnd::OnBnClickedResetLog) - EVT_BUTTON(ID_BTN_RESET_SERVER, CServerWnd::OnBnClickedResetServerLog) - EVT_SPLITTER_SASH_POS_CHANGED(ID_SRV_SPLITTER,CServerWnd::OnSashPositionChanged) -+ EVT_BUTTON(ID_BTN_RESET_DLP, CServerWnd::OnBnClickedResetDLPLog) - END_EVENT_TABLE() - - -@@ -152,6 +153,11 @@ - theApp->GetServerLog(true); // Reset it - } - -+void CServerWnd::OnBnClickedResetDLPLog(wxCommandEvent& WXUNUSED(evt)) -+{ -+ wxTextCtrl* cv= CastByID( ID_DLPINFO, this, wxTextCtrl ); -+ cv->Clear(); -+} - - void CServerWnd::UpdateED2KInfo() - { -diff -Naur a/src/ServerWnd.h b/src/ServerWnd.h ---- a/src/ServerWnd.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/ServerWnd.h 2016-10-14 12:33:51.668348101 +0800 -@@ -50,6 +50,7 @@ - void OnBnClickedUpdateservermetfromurl(wxCommandEvent& evt); - void OnBnClickedResetLog(wxCommandEvent& evt); - void OnBnClickedResetServerLog(wxCommandEvent& evt); -+ void OnBnClickedResetDLPLog(wxCommandEvent& evt); - - DECLARE_EVENT_TABLE() - }; -diff -Naur a/src/TextClient.cpp b/src/TextClient.cpp ---- a/src/TextClient.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/TextClient.cpp 2016-10-14 12:33:51.669348124 +0800 -@@ -73,6 +73,7 @@ - CMD_ID_RELOAD_SHARED, - CMD_ID_RELOAD_IPFILTER_LOCAL, - CMD_ID_RELOAD_IPFILTER_NET, -+ CMD_ID_RELOAD_ANTILEECH, /* Only used internally - Dynamic Leech Protect - Bill Lee */ - CMD_ID_SET_IPFILTER_ON, - CMD_ID_SET_IPFILTER_OFF, - CMD_ID_SET_IPFILTER_CLIENTS_ON, -@@ -106,7 +107,6 @@ - CMD_ID_DOWNLOAD, - // IDs for deprecated commands - CMD_ID_SET_IPFILTER -- - }; - - // method to create a SearchFile -@@ -240,6 +240,12 @@ - case CMD_ID_DISCONNECT_KAD: - request_list.push_back(new CECPacket(EC_OP_KAD_STOP)); - break; -+ //Dynamic Leech Protect - Bill Lee -+ #ifdef AMULE_DLP -+ case CMD_ID_RELOAD_ANTILEECH: -+ request_list.push_back(new CECPacket(EC_OP_ANTILEECH_RELOAD)); -+ break; -+ #endif - - case CMD_ID_RELOAD_SHARED: - request_list.push_back(new CECPacket(EC_OP_SHAREDFILES_RELOAD)); -@@ -903,6 +909,9 @@ - tmp2->AddCommand(wxT("Net"), CMD_ID_RELOAD_IPFILTER_NET, wxTRANSLATE("Update IP filtering table from URL."), - wxTRANSLATE("If URL is omitted the URL from the preferences is used."), CMD_PARAM_OPTIONAL); - -+ #ifdef AMULE_DLP -+ tmp->AddCommand(wxT("AntiLeech"), CMD_ID_RELOAD_ANTILEECH, wxTRANSLATE("Reloads antiLeech."), wxEmptyString, CMD_PARAM_NEVER); //Bill Lee -+ #endif - tmp = m_commands.AddCommand(wxT("Connect"), CMD_ID_CONNECT, wxTRANSLATE("Connect to the network."), - wxTRANSLATE("This will connect to all networks that are enabled in Preferences.\nYou may also optionally specify a server address in IP:Port form, to connect to\nthat server only. The IP must be a dotted decimal IPv4 address,\nor a resolvable DNS name."), CMD_PARAM_OPTIONAL); - tmp->AddCommand(wxT("ED2K"), CMD_ID_CONNECT_ED2K, wxTRANSLATE("Connect to eD2k only."), wxEmptyString, CMD_PARAM_NEVER); -diff -Naur a/src/UploadQueue.cpp b/src/UploadQueue.cpp ---- a/src/UploadQueue.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/UploadQueue.cpp 2016-10-14 12:33:51.669348124 +0800 -@@ -390,6 +390,11 @@ - return; - } - -+ //Dynamic Leecher Protect - Bill Lee -+ #if defined AMULE_DLP && defined __DEBUG__ -+ AddLogLineN(client->GetClientFullInfo()); -+ #endif -+ - client->AddAskedCount(); - client->SetLastUpRequest(); - -diff -Naur a/src/amule-gui.cpp b/src/amule-gui.cpp ---- a/src/amule-gui.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/amule-gui.cpp 2016-10-14 12:33:51.669348124 +0800 -@@ -333,6 +333,21 @@ - return CamuleApp::GetLog(reset); - } - -+#ifdef AMULE_DLP -+void CamuleGuiApp::AddDLPMessageLine(const wxString &msg) -+{ -+ wxString message; -+ time_t rawtime; -+ struct tm *timeinfo; -+ char tbuf[101]; -+ time(&rawtime); -+ timeinfo = localtime(&rawtime); -+ strftime(tbuf, 100, "%Y-%m-%d %X: ", timeinfo); -+ -+ message = wxString(tbuf, wxConvUTF8) + msg; -+ amuledlg->AddDLPMessageLine(message); -+} -+#endif - - wxString CamuleGuiApp::GetServerLog(bool reset) - { -diff -Naur a/src/amule.cpp b/src/amule.cpp ---- a/src/amule.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/amule.cpp 2016-10-14 12:33:51.670348146 +0800 -@@ -23,7 +23,6 @@ - // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - // - -- - #include "amule.h" // Interface declarations. - - #include -@@ -90,6 +89,11 @@ - #include // Do_not_auto_remove - #endif - -+//Dynamic Leecher Protection - Bill Lee -+#ifdef AMULE_DLP -+#include "DLP.h" -+#endif -+ - #ifndef AMULE_DAEMON - #ifdef __WXMAC__ - #include // Do_not_auto_remove -@@ -520,6 +524,11 @@ - uploadqueue = new CUploadQueue(); - ipfilter = new CIPFilter(); - -+ //DLP initialization - Bill Lee -+ #ifdef AMULE_DLP -+ theDLP = new DLP(); -+ #endif -+ - // Creates all needed listening sockets - wxString msg; - if (!ReinitializeNetwork(&msg)) { -@@ -2062,3 +2071,8 @@ - DEFINE_LOCAL_EVENT_TYPE(wxEVT_CORE_UDP_DNS_DONE) - DEFINE_LOCAL_EVENT_TYPE(wxEVT_CORE_SERVER_DNS_DONE) - // File_checked_for_headers -+ -+//Dynamic Leech Protect - Bill Lee -+#ifdef AMULE_DLP -+DLP* theDLP; -+#endif -diff -Naur a/src/amule.h b/src/amule.h ---- a/src/amule.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/amule.h 2016-10-14 12:42:22.776093625 +0800 -@@ -135,6 +135,8 @@ - bool m_geometryEnabled; - wxString m_geometryString; - wxString m_logFile; -+ //Dynamic Leech Protect - persmule -+ wxString m_dlplogFile; - wxString m_appName; - wxString m_PidFile; - -@@ -410,6 +412,7 @@ - wxString GetLog(bool reset = false); - wxString GetServerLog(bool reset = false); - void AddServerMessageLine(wxString &msg); -+ void AddDLPMessageLine(const wxString &msg); - DECLARE_EVENT_TABLE() - }; - -@@ -573,6 +576,8 @@ - - virtual int ShowAlert(wxString msg, wxString title, int flags); - -+ void AddDLPMessageLine(const wxString &msg); -+ - DECLARE_EVENT_TABLE() - }; - -@@ -583,3 +588,8 @@ - - #endif // AMULE_H - // File_checked_for_headers -+ -+#ifdef AMULE_DLP -+class DLP; //forward declaretion -+extern DLP* theDLP; -+#endif -diff -Naur a/src/amuleAppCommon.cpp b/src/amuleAppCommon.cpp ---- a/src/amuleAppCommon.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/amuleAppCommon.cpp 2016-10-14 12:44:08.981552362 +0800 -@@ -65,6 +65,9 @@ - m_configFile = wxT("amule.conf"); - m_logFile = wxT("logfile"); - -+ //Dynamic Leech Protect - persmule -+ m_dlplogFile = wxT("antileech.log"); -+ - if (IsDaemon()) { - m_appName = wxT("aMuleD"); - } else { -@@ -443,6 +446,21 @@ - return false; - } - -+ // Open the dlp log file - Dynamic Leech Protect - persmule -+ if (!IsRemoteGui()){ -+ CPath dlplogfileName = CPath(thePrefs::GetConfigDir() + m_dlplogFile); -+ if (dlplogfileName.FileExists()) { -+ CPath::BackupFile(dlplogfileName, wxT(".bak")); -+ } -+ -+ if (!dlpLogger.OpenLogfile(dlplogfileName.GetRaw())) { -+ // use std err as last resolt to indicate problem -+ fputs("ERROR: unable to open dlp log file\n", stderr); -+ // failure to open log is serious problem -+ return false; -+ } -+ } -+ - // Load Preferences - CPreferences::BuildItemList(thePrefs::GetConfigDir()); - CPreferences::LoadAllItems( wxConfigBase::Get() ); -diff -Naur a/src/amuleDlg.cpp b/src/amuleDlg.cpp ---- a/src/amuleDlg.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/amuleDlg.cpp 2016-10-14 12:44:47.637582726 +0800 -@@ -315,7 +315,7 @@ - wxNotebook* logs_notebook = CastChild( ID_SRVLOG_NOTEBOOK, wxNotebook); - wxNotebook* networks_notebook = CastChild( ID_NETNOTEBOOK, wxNotebook); - -- wxASSERT(logs_notebook->GetPageCount() == 4); -+ wxASSERT(logs_notebook->GetPageCount() == 5); - wxASSERT(networks_notebook->GetPageCount() == 2); - - for (uint32 i = 0; i < logs_notebook->GetPageCount(); ++i) { -@@ -507,7 +507,12 @@ - _("Part of aMule is based on \n") << - _("Kademlia: Peer-to-peer routing based on the XOR metric.\n") << - _(" Copyright (c) 2002-2011 Petar Maymounkov ( petar@post.harvard.edu )\n") << -- _("http://kademlia.scs.cs.nyu.edu\n"); -+ _("http://kademlia.scs.cs.nyu.edu\n") << -+ _("\nDynamic Leech Protection\n") << -+ _(" Homepage: http://amule-dlp.googlecode.com \n") << -+ _(" Copyright (C) 2002-2007 Xtreme-Mod \n") << -+ _(" Copyright (C) 2009 greensea \n") << -+ _(" Copyright (C) 2009-2011 Bill Lee \n"); - - if (m_is_safe_state) { - wxMessageBox(msg, _("Message"), wxOK | wxICON_INFORMATION, this); -@@ -659,8 +664,24 @@ - } - cv->ShowPosition(cv->GetLastPosition()-1); - } -+ //Dynamic Leech Protect - persmule -+ DlpAddLogLine(msg); - } - -+#ifdef AMULE_DLP -+void CamuleDlg::AddDLPMessageLine(const wxString& msg) /* modified by Bill Lee */ -+{ -+ wxTextCtrl* cv = CastByID( ID_DLPINFO, m_serverwnd, wxTextCtrl ); -+ if(cv) { -+ if (msg.Length() > 500) { -+ cv->AppendText(msg.Left(500) + wxT("\n")); -+ } else { -+ cv->AppendText(msg + wxT("\n")); -+ } -+ cv->ShowPosition(cv->GetLastPosition()-1); -+ } -+} -+#endif - - void CamuleDlg::ShowConnectionState(bool skinChanged) - { -@@ -1456,7 +1477,9 @@ - if (thePrefs::GetNetworkKademlia()) { - logs_notebook->AddPage(m_logpages[3].page, m_logpages[3].name); - } -- -+ -+ logs_notebook->AddPage(m_logpages[4].page, m_logpages[4].name); -+ - // Set the main window. - // If we have both networks active, activate a notebook to select between them. - // If only one is active, show the window directly without a surrounding one tab notebook. -diff -Naur a/src/amuleDlg.h b/src/amuleDlg.h ---- a/src/amuleDlg.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/amuleDlg.h 2016-10-14 12:33:51.671348169 +0800 -@@ -114,6 +114,9 @@ - - void AddLogLine(const wxString& line); - void AddServerMessageLine(wxString& message); -+ #ifdef AMULE_DLP -+ void AddDLPMessageLine(const wxString& msg); /* Modified by Bill Lee */ -+ #endif - void ResetLog(int id); - - void ShowUserCount(const wxString& info = wxEmptyString); -@@ -231,7 +234,7 @@ - WX_DECLARE_STRING_HASH_MAP(wxZipEntry*, ZipCatalog); - ZipCatalog cat; - -- PageType m_logpages[4]; -+ PageType m_logpages[5]; - PageType m_networkpages[2]; - - bool LoadGUIPrefs(bool override_pos, bool override_size); -diff -Naur a/src/amuled.cpp b/src/amuled.cpp ---- a/src/amuled.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/amuled.cpp 2016-10-14 12:45:23.506600119 +0800 -@@ -749,4 +749,10 @@ - return 0; // That's neither yes nor no, ok, cancel - } - -+void CamuleDaemonApp::AddDLPMessageLine(const wxString &msg) -+{ -+ //Dynamic Leech Protect - persmule -+ DlpAddLogLine(msg); -+} -+ - // File_checked_for_headers -diff -Naur a/src/antiLeech.h b/src/antiLeech.h ---- a/src/antiLeech.h 1970-01-01 08:00:00.000000000 +0800 -+++ b/src/antiLeech.h 2016-10-14 12:33:51.672348192 +0800 -@@ -0,0 +1,48 @@ -+#ifndef ANTILEECH_H -+#define ANTILEECH_H -+ -+ -+#pragma once -+ -+#include "antiLeech_wx.h" -+#include "CString_wx.h" -+ -+class IantiLeech -+{ -+public: -+ virtual ~IantiLeech(){}; /* Bill Lee: Not be used currently */ -+ //BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD,LPVOID); -+ virtual DWORD GetDLPVersion() = 0; -+ //old versions to keep compatible -+ /* //drop old version support -+ virtual LPCTSTR DLPCheckModstring(LPCTSTR modversion, LPCTSTR clientversion); -+ virtual LPCTSTR DLPCheckUsername(LPCTSTR username); -+ virtual LPCTSTR DLPCheckNameAndHash(CString username, CString& userhash); -+ */ -+ //new versions -+ virtual LPCTSTR DLPCheckModstring_Hard(LPCTSTR modversion, LPCTSTR clientversion) = 0; -+ virtual LPCTSTR DLPCheckModstring_Soft(LPCTSTR modversion, LPCTSTR clientversion) = 0; -+ virtual LPCTSTR DLPCheckUsername_Hard(LPCTSTR username) = 0; -+ virtual LPCTSTR DLPCheckUsername_Soft(LPCTSTR username) = 0; -+ virtual LPCTSTR DLPCheckNameAndHashAndMod(const CString& username, const CString& userhash, const CString& modversion) = 0; -+ virtual LPCTSTR DLPCheckMessageSpam(LPCTSTR messagetext) = 0; -+ -+ -+ virtual LPCTSTR DLPCheckUserhash(const PBYTE userhash) = 0; -+ -+ -+ virtual LPCTSTR DLPCheckHelloTag(UINT tagnumber) = 0; -+ virtual LPCTSTR DLPCheckInfoTag(UINT tagnumber) = 0; -+ -+ //void TestFunc(); -+ -+//Bill Lee: no need in interface abstract class -+//private: -+// static bool IsTypicalHex (const CString& addon); -+}; -+ -+//Bill Lee: never call delete on IantiLeech, use destoryAntiLeechInstat instead. -+extern "C" IantiLeech* createAntiLeechInstant(); -+extern "C" int destoryAntiLeechInstant(IantiLeech*); -+ -+#endif -diff -Naur a/src/antiLeech_wx.h b/src/antiLeech_wx.h ---- a/src/antiLeech_wx.h 1970-01-01 08:00:00.000000000 +0800 -+++ b/src/antiLeech_wx.h 2016-10-14 12:33:51.672348192 +0800 -@@ -0,0 +1,49 @@ -+#ifndef ANTILEECH_WX_H -+#define ANTILEECH_WX_H -+ -+#include -+#include -+ -+#define LPCTSTR const wxChar* -+#define BOOL bool -+//#define _T(var) wxT(var) //defined in wxWidgets -+#define DWORD wxUint32 -+#define UINT wxUint16 -+#define WINAPI -+#define HINSTANCE -+#define LPVOID void* -+#define PBYTE unsigned char* -+#define TCHAR wxChar -+#define _TINT wxInt32 -+ -+#define StrCmpI _tcsicmp -+ -+#define _istdigit(var) iswdigit(var) -+#define _istcntrl(var) iswcntrl(var) -+#define _istpunct(var) iswpunct(var) -+#define _istspace(var) iswspace(var) -+#define _istxdigit(var) iswxdigit(var) -+inline float _tstof(const wchar_t* str){ -+ wchar_t** ptail = NULL; -+ return wcstof(str, ptail); -+} -+//This function is not used. by Orzogc Lee -+//But I think there is no need to removing, linker will remove it. -+/* -+inline void tolowers(wxChar* str){ -+ int i = 0; -+ do{ -+ str[i] = towlower(str[i]); -+ }while(str[++i]); -+} -+*/ -+#define _tcsstr(haystack, needle) wcsstr(haystack, needle) -+#define _tcslen(var) wcslen(var) -+#define StrStr(a, b) wcsstr(a, b) -+ -+LPCTSTR StrStrI(LPCTSTR haystack, LPCTSTR needle); -+//Bill Lee: I think inlining this function make no senses, because it is a very large operation. -+ -+#define _tcsicmp(a, b) wcscasecmp(a, b) -+ -+#endif -diff -Naur a/src/libs/ec/abstracts/ECCodes.abstract b/src/libs/ec/abstracts/ECCodes.abstract ---- a/src/libs/ec/abstracts/ECCodes.abstract 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/libs/ec/abstracts/ECCodes.abstract 2016-10-14 12:33:51.672348192 +0800 -@@ -148,6 +148,8 @@ - - EC_OP_FRIEND 0x57 - -+EC_OP_ANTILEECH_RELOAD 0x80 -+ - [/Section] - - [Section Content] -diff -Naur a/src/libs/ec/cpp/ECCodes.h b/src/libs/ec/cpp/ECCodes.h ---- a/src/libs/ec/cpp/ECCodes.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/libs/ec/cpp/ECCodes.h 2016-10-14 12:33:51.673348215 +0800 -@@ -121,7 +121,8 @@ - EC_OP_CLIENT_SWAP_TO_ANOTHER_FILE = 0x54, - EC_OP_SHARED_FILE_SET_COMMENT = 0x55, - EC_OP_SERVER_SET_STATIC_PRIO = 0x56, -- EC_OP_FRIEND = 0x57 -+ EC_OP_FRIEND = 0x57, -+ EC_OP_ANTILEECH_RELOAD = 0x80 - }; - - enum ECTagNames { -@@ -556,6 +557,7 @@ - case 0x55: return wxT("EC_OP_SHARED_FILE_SET_COMMENT"); - case 0x56: return wxT("EC_OP_SERVER_SET_STATIC_PRIO"); - case 0x57: return wxT("EC_OP_FRIEND"); -+ case 0x80 : return wxT("EC_OP_ANTILEECH_RELOAD"); - default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; - } - } -diff -Naur a/src/libs/ec/java/ECCodes.java b/src/libs/ec/java/ECCodes.java ---- a/src/libs/ec/java/ECCodes.java 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/libs/ec/java/ECCodes.java 2016-10-14 12:33:51.673348215 +0800 -@@ -112,6 +112,7 @@ - public final static byte EC_OP_SHARED_FILE_SET_COMMENT = 0x55; - public final static byte EC_OP_SERVER_SET_STATIC_PRIO = 0x56; - public final static byte EC_OP_FRIEND = 0x57; -+public final static byte EC_OP_ANTILEECH_RELOAD = 0x80 ; - - public final static short EC_TAG_STRING = 0x0000; - public final static short EC_TAG_PASSWD_HASH = 0x0001; -diff -Naur a/src/muuli_wdr.cpp b/src/muuli_wdr.cpp ---- a/src/muuli_wdr.cpp 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/muuli_wdr.cpp 2016-10-14 12:33:51.676348283 +0800 -@@ -1769,6 +1769,51 @@ - return item0; - } - -+#ifdef AMULE_DLP -+wxSizer *PreferencesDLPTab( wxWindow *parent, bool call_fit, bool set_sizer ) -+{ -+ wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL ); -+ -+ wxButton* btnReload = new wxButton( parent, IDC_RELOADANTILEECH, _("Reload antiLeech"), wxDefaultPosition, wxDefaultSize, 0 ); //Bill Lee -+ -+ wxStaticBox *item2 = new wxStaticBox( parent, -1, _("Dynamic Leecher Protection Options") ); -+ wxStaticBoxSizer *item1 = new wxStaticBoxSizer( item2, wxVERTICAL ); -+ -+ wxCheckBox *item4 = new wxCheckBox( parent, IDC_CHECKMODSTRING, _("Check bad modstring"), wxDefaultPosition, wxDefaultSize, 0 ); -+ item1->Add( item4, 0, wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ wxCheckBox *item5 = new wxCheckBox( parent, IDC_CHECKUSERNAME, _("Check bad username"), wxDefaultPosition, wxDefaultSize, 0 ); -+ item1->Add( item5, 0, wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ wxCheckBox *item6 = new wxCheckBox( parent, IDC_CHECKUSERHASH, _("Check bad userhash"), wxDefaultPosition, wxDefaultSize, 0 ); -+ item1->Add( item6, 0, wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ wxCheckBox *item7 = new wxCheckBox( parent, IDC_CHECKHELLOTAG, _("Check bad hello tag"), wxDefaultPosition, wxDefaultSize, 0 ); -+ item1->Add( item7, 0, wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ wxCheckBox *item8 = new wxCheckBox( parent, IDC_CHECKINFOTAG, _("Check bad info tag"), wxDefaultPosition, wxDefaultSize, 0 ); -+ item1->Add( item8, 0, wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ wxCheckBox *item9 = new wxCheckBox( parent, IDC_CHECKGHOSTMOD, _("Check ghost mod"), wxDefaultPosition, wxDefaultSize, 0); -+ item1->Add( item9, 0, wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ wxCheckBox *item10 = new wxCheckBox( parent, IDC_CHECKVERYCDMOD, _("Ban eMule VeryCD mod(Please consider carefully whether to use)"), wxDefaultPosition, wxDefaultSize, 0 ); //Modified by Bill Lee -+ item1->Add( item10, 0, wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ item0->Add( btnReload, 0, wxGROW|wxALL, 5); //Bill Lee -+ item0->Add( item1, 0, wxGROW|wxALL, 5 ); -+ -+ if (set_sizer) -+ { -+ parent->SetSizer( item0 ); -+ if (call_fit) -+ item0->SetSizeHints( parent ); -+ } -+ -+ return item0; -+} -+#endif -+ - wxSizer *PreferencesFilesTab( wxWindow *parent, bool call_fit, bool set_sizer ) - { - wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL ); -@@ -2587,6 +2632,42 @@ - return item0; - } - -+wxSizer *DLPInfoLog( wxWindow *parent, bool call_fit, bool set_sizer ) -+{ -+ wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL ); -+ -+ wxBoxSizer *item1 = new wxBoxSizer( wxHORIZONTAL ); -+ -+ wxStaticBitmap *item2 = new wxStaticBitmap( parent, -1, amuleDlgImages( 3 ), wxDefaultPosition, wxDefaultSize ); -+ item2->SetToolTip( _("Display DLP log") ); -+ item1->Add( item2, 0, wxALIGN_CENTER|wxALL, 5 ); -+ -+ wxStaticText *item3 = new wxStaticText( parent, -1, _("DLP Info"), wxDefaultPosition, wxDefaultSize, 0 ); -+ item1->Add( item3, 0, wxALIGN_CENTER|wxALL, 5 ); -+ -+ item0->Add( item1, 0, wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ wxBoxSizer *item4 = new wxBoxSizer( wxHORIZONTAL ); -+ -+ CMuleTextCtrl *item5 = new CMuleTextCtrl( parent, ID_DLPINFO, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY|wxVSCROLL ); -+ item4->Add( item5, 1, wxGROW|wxALIGN_CENTER_HORIZONTAL, 5 ); -+ -+ wxButton *item6 = new wxButton( parent, ID_BTN_RESET_DLP, _("Reset"), wxDefaultPosition, wxDefaultSize, 0 ); -+ item6->SetToolTip( _("Click this button to reset the log.") ); -+ item4->Add( item6, 0, wxGROW|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); -+ -+ item0->Add( item4, 1, wxGROW|wxALIGN_CENTER_VERTICAL, 5 ); -+ -+ if (set_sizer) -+ { -+ parent->SetSizer( item0 ); -+ if (call_fit) -+ item0->SetSizeHints( parent ); -+ } -+ -+ return item0; -+} -+ - wxSizer *serverListDlgDown( wxWindow *parent, bool call_fit, bool set_sizer ) - { - wxStaticBox *item1 = new wxStaticBox( parent, -1, wxT("") ); -@@ -2602,7 +2683,7 @@ - wxPanel *item4 = new wxPanel( item3, -1 ); - aMuleLog( item4, FALSE ); - item3->AddPage( item4, _("aMule Log") ); -- -+ - wxPanel *item5 = new wxPanel( item3, -1 ); - ServerInfoLog( item5, FALSE ); - item3->AddPage( item5, _("Server Info") ); -@@ -2614,6 +2695,10 @@ - wxPanel *item7 = new wxPanel( item3, -1 ); - Kad_Info( item7, FALSE ); - item3->AddPage( item7, _("Kad Info") ); -+ -+ wxPanel *item8 = new wxPanel( item3, -1); -+ DLPInfoLog( item8, FALSE); -+ item3->AddPage(item8, _("DLP Info")); - - item0->Add( item2, 1, wxGROW|wxALIGN_CENTER_VERTICAL, 5 ); - -diff -Naur a/src/muuli_wdr.h b/src/muuli_wdr.h ---- a/src/muuli_wdr.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/muuli_wdr.h 2016-10-14 12:33:51.676348283 +0800 -@@ -335,6 +335,10 @@ - #define ID_BTN_RESET_SERVER 10240 - wxSizer *ServerInfoLog( wxWindow *parent, bool call_fit = TRUE, bool set_sizer = TRUE ); - -+#define ID_DLPINFO 22001 -+#define ID_BTN_RESET_DLP 22002 -+wxSizer *DLPInfoLog( wxWindow *parent, bool call_fit = TRUE, bool set_sizer = TRUE ); -+ - #define ID_LOGVIEW 10241 - #define ID_BTN_RESET 10242 - wxSizer *aMuleLog( wxWindow *parent, bool call_fit = TRUE, bool set_sizer = TRUE ); -@@ -424,6 +428,21 @@ - #define ID_DEBUGCATS 10307 - wxSizer *PreferencesDebug( wxWindow *parent, bool call_fit = TRUE, bool set_sizer = TRUE ); - -+/* Dynamic Leecher Protection */ -+#define IDC_CHECKMODSTRING 11001 -+#define IDC_CHECKUSERNAME 11002 -+#define IDC_CHECKUSERHASH 11003 -+#define IDC_CHECKHELLOTAG 11004 -+#define IDC_CHECKINFOTAG 11005 -+#define IDC_CHECKEASYMULE 11006 -+#define IDC_CHECKVERYCDMOD 11007 -+#define IDC_CHECKMINIMULE 11008 -+#define IDC_CHECKGHOSTMOD 11009 -+#ifdef AMULE_DLP -+#define IDC_RELOADANTILEECH 11010 //Bill Lee -+wxSizer *PreferencesDLPTab( wxWindow *parent, bool call_fit = TRUE, bool set_sizer = TRUE ); -+#endif -+ - extern wxSizer *IDC_CURJOB; - #define IDC_CONV_PB_LABEL 10308 - #define IDC_CONV_PROZENT 10309 -diff -Naur a/src/updownclient.h b/src/updownclient.h ---- a/src/updownclient.h 2016-10-06 19:01:54.000000000 +0800 -+++ b/src/updownclient.h 2016-10-14 12:37:03.224728226 +0800 -@@ -408,7 +408,13 @@ - bool GetSentCancelTransfer() const { return m_fSentCancelTransfer; } - void SetSentCancelTransfer(bool bVal) { m_fSentCancelTransfer = bVal; } - -- DEBUG_ONLY( wxString GetClientFullInfo(); ) -+#if defined (__DEBUG__) || defined (AMULE_DLP) -+ /* -+ * This function is essential for dlp to produce ban log. -+ * So I decide to retain it when dlp is enabled. -+ */ -+ wxString GetClientFullInfo(); -+#endif - wxString GetClientShortInfo(); - - const wxString& GetClientOSInfo() const { return m_sClientOSInfo; } -@@ -581,7 +587,10 @@ - bool ShouldReceiveCryptUDPPackets() const; - - bool HasDisabledSharedFiles() const { return m_fNoViewSharedFiles; } -- -+ #ifdef AMULE_DLP -+ bool HasNonOfficialOpCodes() const { return dlp_nonofficialopcodes; } //Dynamic Leecher Protection - Bill Lee -+ #endif -+ - private: - - CClientCredits *credits; -@@ -842,6 +851,10 @@ - #ifdef __DEBUG__ - wxString connection_reason; - #endif -+ -+ #ifdef AMULE_DLP -+ bool dlp_nonofficialopcodes; //Dynamic Leecher Protect - Bill Lee -+ #endif - }; - - diff --git a/package/lean/amule/patches/003_enable_upnp_cross_compile.patch b/package/lean/amule/patches/003_enable_upnp_cross_compile.patch deleted file mode 100644 index 462e490c08..0000000000 --- a/package/lean/amule/patches/003_enable_upnp_cross_compile.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -Naur a/m4/libupnp.m4 b/m4/libupnp.m4 ---- a/m4/libupnp.m4 2016-10-06 19:01:54.000000000 +0800 -+++ b/m4/libupnp.m4 2016-10-11 07:36:39.198318574 +0800 -@@ -52,7 +52,6 @@ - [export PKG_CONFIG_PATH=$withval/lib/pkgconfig]) - - dnl Check for libupnp >= MIN_LIBUPNP_VERSION -- AS_IF([test $cross_compiling = no], [ - AC_MSG_CHECKING([for libupnp version >= MIN_LIBUPNP_VERSION]) - AS_IF([test -n "$PKG_CONFIG"], [ - AS_IF([$PKG_CONFIG libupnp --exists], [ -@@ -79,11 +78,6 @@ - ]) - AC_MSG_RESULT([$result$resultstr]) - libupnp_error="libupnp >= MIN_LIBUPNP_VERSION not found$resultstr" -- ], [ --dnl Currently cross-compilation with libupnp is not supported. -- result=no -- libupnp_error="cross compiling" -- ]) - - dnl Execute the right action. - AS_IF([test ${result:-no} = yes], [$2], [$3]) diff --git a/package/lean/amule/patches/004_file_name_conversion.patch b/package/lean/amule/patches/004_file_name_conversion.patch deleted file mode 100644 index 2c511d0ceb..0000000000 --- a/package/lean/amule/patches/004_file_name_conversion.patch +++ /dev/null @@ -1,78 +0,0 @@ -diff --git a/src/amule.h b/src/amule.h -index f25702f..240c02d 100644 ---- a/src/amule.h -+++ b/src/amule.h -@@ -553,6 +553,13 @@ class CamuleDaemonApp : public CamuleApp - int OnExit(); - - virtual int InitGui(bool geometry_enable, wxString &geometry_string); -+ // The GTK wxApps sets its file name conversion properly -+ // in wxApp::Initialize(), while wxAppConsole::Initialize() -+ // does not, leaving wxConvFile being set to wxConvLibc. File -+ // name conversion should be set otherwise amuled will abort to -+ // handle non-ASCII file names which monolithic amule can handle. -+ // This function are overrided to perform this. -+ virtual bool Initialize(int& argc_, wxChar **argv_); - - #ifdef AMULED_APPTRAITS - struct sigaction m_oldSignalChildAction; -diff --git a/src/amuled.cpp b/src/amuled.cpp -index 486da59..86e1ff8 100644 ---- a/src/amuled.cpp -+++ b/src/amuled.cpp -@@ -704,6 +704,41 @@ int CamuleDaemonApp::InitGui(bool ,wxString &) - return 0; - } - -+bool CamuleDaemonApp::Initialize(int& argc_, wxChar **argv_) -+{ -+ if ( !wxAppConsole::Initialize(argc_, argv_) ) { -+ return false; -+ } -+ -+#ifdef __UNIX__ -+ wxString encName; -+#if wxUSE_INTL -+ // if a non default locale is set, -+ // assume that the user wants his -+ // filenames in this locale too -+ encName = wxLocale::GetSystemEncodingName().Upper(); -+ -+ // But don't consider ASCII in this case. -+ if ( !encName.empty() ) { -+ if ( encName == wxT("US-ASCII") ) { -+ // This means US-ASCII when returned -+ // from GetEncodingFromName(). -+ encName.clear(); -+ } -+ } -+#endif // wxUSE_INTL -+ -+ // in this case, UTF-8 is used by default. -+ if ( encName.empty() ) { -+ encName = wxT("UTF-8"); -+ } -+ -+ static wxConvBrokenFileNames fileconv(encName); -+ wxConvFileName = &fileconv; -+#endif // __UNIX__ -+ -+ return true; -+} - - int CamuleDaemonApp::OnExit() - { -diff --git a/src/libs/common/Path.cpp b/src/libs/common/Path.cpp -index 28152a2..5efefd0 100644 ---- a/src/libs/common/Path.cpp -+++ b/src/libs/common/Path.cpp -@@ -229,7 +229,8 @@ CPath::CPath(const wxString& filename) - } - - wxCharBuffer fn = filename2char(filename); -- if (fn.data()) { -+ // add fn.length() for wx 3.x -+ if (fn.data()) { - // Filename is valid in the current locale. This means that - // it either originated from a (wx)system-call, or from a - // user with a properly setup system. diff --git a/package/lean/amule/patches/005_best_keyword_kad_search.diff b/package/lean/amule/patches/005_best_keyword_kad_search.diff deleted file mode 100755 index c450a9f8e9..0000000000 --- a/package/lean/amule/patches/005_best_keyword_kad_search.diff +++ /dev/null @@ -1,174 +0,0 @@ -diff --git a/src/SearchList.cpp b/src/SearchList.cpp -index 32b28e9..342a18f 100644 ---- a/src/SearchList.cpp -+++ b/src/SearchList.cpp -@@ -75,7 +75,7 @@ void ParsedSearchExpression(const CSearchExpr* pexpr) - int iOpNot = 0; - - for (unsigned int i = 0; i < pexpr->m_aExpr.GetCount(); i++) { -- wxString str(pexpr->m_aExpr[i]); -+ const wxString& str = pexpr->m_aExpr[i]; - if (str == SEARCHOPTOK_AND) { - iOpAnd++; - } else if (str == SEARCHOPTOK_OR) { -@@ -108,6 +108,25 @@ void ParsedSearchExpression(const CSearchExpr* pexpr) - - // optimize search expression, if no OR nor NOT specified - if (iOpAnd > 0 && iOpOr == 0 && iOpNot == 0) { -+ // figure out if we can use a better keyword than the one the user selected -+ // for example most user will search like this "The oxymoronaccelerator 2", which would ask the node which indexes "the" -+ // This causes higher traffic for such nodes and makes them a viable target to attackers, while the kad result should be -+ // the same or even better if we ask the node which indexes the rare keyword "oxymoronaccelerator", so we try to rearrange -+ // keywords and generally assume that the longer keywords are rarer -+ if (/*thePrefs::GetRearrangeKadSearchKeywords() &&*/ !s_strCurKadKeyword.IsEmpty()) { -+ for (unsigned int i = 0; i < pexpr->m_aExpr.GetCount(); i++) { -+ if (pexpr->m_aExpr[i] != SEARCHOPTOK_AND) { -+ if (pexpr->m_aExpr[i] != s_strCurKadKeyword -+ && pexpr->m_aExpr[i].find_first_of(Kademlia::CSearchManager::GetInvalidKeywordChars()) == wxString::npos -+ && pexpr->m_aExpr[i].Find('"') != 0 // no quoted expressions as keyword -+ && pexpr->m_aExpr[i].length() >= 3 -+ && s_strCurKadKeyword.length() < pexpr->m_aExpr[i].length()) -+ { -+ s_strCurKadKeyword = pexpr->m_aExpr[i]; -+ } -+ } -+ } -+ } - wxString strAndTerms; - for (unsigned int i = 0; i < pexpr->m_aExpr.GetCount(); i++) { - if (pexpr->m_aExpr[i] != SEARCHOPTOK_AND) { -@@ -285,7 +304,7 @@ void CSearchList::RemoveResults(long searchID) - } - - --wxString CSearchList::StartNewSearch(uint32* searchID, SearchType type, const CSearchParams& params) -+wxString CSearchList::StartNewSearch(uint32* searchID, SearchType type, CSearchParams& params) - { - // Check that we can actually perform the specified desired search. - if ((type == KadSearch) && !Kademlia::CKademlia::IsRunning()) { -@@ -306,6 +325,16 @@ wxString CSearchList::StartNewSearch(uint32* searchID, SearchType type, const CS - m_resultType.Clear(); - } - -+ if (type == KadSearch) { -+ Kademlia::WordList words; -+ Kademlia::CSearchManager::GetWords(params.searchString, &words); -+ if (!words.empty()) { -+ params.strKeyword = words.front(); -+ } else { -+ return _("No keyword for Kad search - aborting"); -+ } -+ } -+ - bool supports64bit = type == KadSearch ? true : theApp->serverconnect->GetCurrentServer() != NULL && (theApp->serverconnect->GetCurrentServer()->GetTCPFlags() & SRV_TCPFLG_LARGEFILES); - bool packetUsing64bit; - -@@ -332,8 +361,7 @@ wxString CSearchList::StartNewSearch(uint32* searchID, SearchType type, const CS - - // searchstring will get tokenized there - // The tab must be created with the Kad search ID, so searchID is updated. -- Kademlia::CSearch* search = Kademlia::CSearchManager::PrepareFindKeywords( -- params.searchString, data->GetLength(), data->GetRawBuffer(), *searchID); -+ Kademlia::CSearch* search = Kademlia::CSearchManager::PrepareFindKeywords(params.strKeyword, data->GetLength(), data->GetRawBuffer(), *searchID); - - *searchID = search->GetSearchID(); - m_currentSearch = *searchID; -@@ -632,7 +660,7 @@ void CSearchList::StopSearch(bool globalOnly) - } - - --CSearchList::CMemFilePtr CSearchList::CreateSearchData(const CSearchParams& params, SearchType WXUNUSED(type), bool supports64bit, bool& packetUsing64bit) -+CSearchList::CMemFilePtr CSearchList::CreateSearchData(CSearchParams& params, SearchType type, bool supports64bit, bool& packetUsing64bit) - { - // Count the number of used parameters - unsigned int parametercount = 0; -@@ -659,14 +687,16 @@ CSearchList::CMemFilePtr CSearchList::CreateSearchData(const CSearchParams& para - _astrParserErrors.Empty(); - _SearchExpr.m_aExpr.Empty(); - -+ s_strCurKadKeyword.Clear(); -+ if (type == KadSearch) { -+ wxASSERT( !params.strKeyword.IsEmpty() ); -+ s_strCurKadKeyword = params.strKeyword; -+ } -+ - LexInit(params.searchString); - int iParseResult = yyparse(); - LexFree(); - --#ifdef __DEBUG__ -- AddLogLineNS(CFormat(wxT("Search parsing result for \"%s\": %i")) -- % params.searchString % iParseResult); --#endif - if (_astrParserErrors.GetCount() > 0) { - for (unsigned int i=0; i < _astrParserErrors.GetCount(); ++i) { - AddLogLineNS(CFormat(wxT("Error %u: %s\n")) % i % _astrParserErrors[i]); -@@ -681,21 +711,13 @@ CSearchList::CMemFilePtr CSearchList::CreateSearchData(const CSearchParams& para - return CMemFilePtr(NULL); - } - -- #ifdef __DEBUG__ -- wxString mes(wxT("Search expression:")); -- for (unsigned int i = 0; i < _SearchExpr.m_aExpr.GetCount(); i++) { -- mes << wxT(" ") << _SearchExpr.m_aExpr[i]; -+ if (type == KadSearch && s_strCurKadKeyword != params.strKeyword) { -+ AddDebugLogLineN(logSearch, CFormat(wxT("Keyword was rearranged, using '%s' instead of '%s'")) % s_strCurKadKeyword % params.strKeyword); -+ params.strKeyword = s_strCurKadKeyword; - } -- AddLogLineNS(mes); -- AddLogLineNS(CFormat(wxT("Expression count: %i")) % _SearchExpr.m_aExpr.GetCount()); -- #endif - - parametercount += _SearchExpr.m_aExpr.GetCount(); - -- #ifdef __DEBUG__ -- AddLogLineNS(CFormat(wxT("Parameters: %i")) % parametercount); -- #endif -- - /* Leave the unicode comment there, please... */ - CSearchExprTarget target(data.get(), true /*I assume everyone is unicoded */ ? utf8strRaw : utf8strNone, supports64bit, packetUsing64bit); - -diff --git a/src/SearchList.h b/src/SearchList.h -index 35b0fc6..6db7508 100644 ---- a/src/SearchList.h -+++ b/src/SearchList.h -@@ -64,6 +64,8 @@ class CSearchList : public wxEvtHandler - - //! The actual string to search for. - wxString searchString; -+ //! The keyword selected for Kad search -+ wxString strKeyword; - //! The type of files to search for (may be empty), one of ED2KFTSTR_* - wxString typeText; - //! The filename extension. May be empty. -@@ -90,7 +92,7 @@ class CSearchList : public wxEvtHandler - * @param params The search parameters, see CSearchParams. - * @return An empty string on success, otherwise an error-message. - */ -- wxString StartNewSearch(uint32* searchID, SearchType type, const CSearchParams& params); -+ wxString StartNewSearch(uint32* searchID, SearchType type, CSearchParams& params); - - /** Stops the current search (global or Kad), if any is in progress. */ - void StopSearch(bool globalOnly = false); -@@ -189,7 +191,7 @@ class CSearchList : public wxEvtHandler - typedef std::auto_ptr CMemFilePtr; - - /** Create a basic search-packet for the given search-type. */ -- CMemFilePtr CreateSearchData(const CSearchParams& params, SearchType type, bool supports64bit, bool& packetUsing64bit); -+ CMemFilePtr CreateSearchData(CSearchParams& params, SearchType type, bool supports64bit, bool& packetUsing64bit); - - - //! Timer used for global search intervals. -diff --git a/src/kademlia/kademlia/SearchManager.cpp b/src/kademlia/kademlia/SearchManager.cpp -index e7f25d4..f9ee924 100644 ---- a/src/kademlia/kademlia/SearchManager.cpp -+++ b/src/kademlia/kademlia/SearchManager.cpp -@@ -127,7 +127,7 @@ CSearch* CSearchManager::PrepareFindKeywords(const wxString& keyword, uint32_t s - - wxString wstrKeyword = s->m_words.front(); - -- AddLogLineNS(CFormat(_("Keyword for search: %s")) % wstrKeyword); -+ AddDebugLogLineN(logSearch, CFormat(wxT("Keyword for search: %s")) % wstrKeyword); - - // Kry - I just decided to assume everyone is unicoded - // GonoszTopi - seconded