summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.cpp2
-rw-r--r--stopspam.cpp25
-rw-r--r--utilities.cpp33
-rw-r--r--utilities.h1
4 files changed, 46 insertions, 15 deletions
diff --git a/init.cpp b/init.cpp
index c37d9f6..a028864 100644
--- a/init.cpp
+++ b/init.cpp
@@ -54,7 +54,7 @@ PLUGININFOEX pluginInfoEx = {
pluginDescription,
"Roman Miklashevsky",
"sss123next@list.ru",
- "© 2004-2009 Roman Miklashevsky, A. Petkevich, Kosh&chka, sss, Elzor",
+ "© 2004-2010 Roman Miklashevsky, A. Petkevich, Kosh&chka, sss, Elzor",
"http://sss.chaoslab.ru:81/tracker/mim_plugs/",
UNICODE_AWARE,
0,
diff --git a/stopspam.cpp b/stopspam.cpp
index 7d3f5d0..07aee1e 100644
--- a/stopspam.cpp
+++ b/stopspam.cpp
@@ -1,4 +1,5 @@
#include "headers.h"
+#include <fstream>
MIRANDA_HOOK_EVENT(ME_DB_CONTACT_ADDED, w, l)
{
@@ -32,16 +33,9 @@ MIRANDA_HOOK_EVENT(ME_DB_EVENT_ADDED, wParam, lParam)
if(!(dbei.flags & DBEF_SENT) && !(dbei.flags & DBEF_READ) && dbei.eventType == EVENTTYPE_AUTHREQUEST)
{
HANDLE hcntct;
- hcntct=*((PHANDLE)(dbei.pBlob+sizeof(DWORD)));
- DBEVENTGETTEXT egt = {0};
- egt.datatype = DBVT_TCHAR;
- egt.dbei = &dbei;
- TCHAR *EventText = (TCHAR*)CallService(MS_DB_EVENT_GETTEXT, 0, (LPARAM)&egt);
-
-
+ hcntct=*((PHANDLE)(dbei.pBlob+sizeof(DWORD)));
// if request is from unknown or not marked Answered contact
-
int a = DBGetContactSettingByte(hcntct, "CList", "NotOnList", 0);
int b = !DBGetContactSettingByte(hcntct, pluginName, "Answered", 0);
@@ -53,14 +47,17 @@ MIRANDA_HOOK_EVENT(ME_DB_EVENT_ADDED, wParam, lParam)
DBWriteContactSettingByte(hcntct, "CList", "Hidden", 1);
if(gbSpecialGroup)
DBWriteContactSettingTString(hcntct, "CList", "Group", gbSpammersGroup.c_str());
- if(gbIgnoreURL)
- if(_tcslen(EventText) > 0)
+ BYTE msg = 1;
+ if(gbIgnoreURL){
+ TCHAR* EventText = ReqGetText(&dbei); //work only UTF, else return NULL
+ if(EventText&&_tcslen(EventText) > 0)
if(Stristr(EventText, _T("http")) || Stristr(EventText, _T("www")) || Stristr(EventText, _T(".ru")) || Stristr(EventText, _T(".com")) || Stristr(EventText, _T(".de")) || Stristr(EventText, _T(".cz")) || Stristr(EventText, _T(".org")) || Stristr(EventText, _T(".net")) || Stristr(EventText, _T(".su")))
- {
+ {
mir_free(EventText);
- return 1;
- }
- BYTE msg = 1;
+ msg=0;
+ };
+ mir_free(EventText);
+ };
if(gbInvisDisable)
{
if(CallProtoService(dbei.szModule, PS_GETSTATUS, 0, 0) == ID_STATUS_INVISIBLE)
diff --git a/utilities.cpp b/utilities.cpp
index bfb1f47..8349430 100644
--- a/utilities.cpp
+++ b/utilities.cpp
@@ -182,3 +182,36 @@ const int Stristr(const TCHAR *str, const TCHAR *substr)
return i;
}
+
+TCHAR* ReqGetText(DBEVENTINFO* dbei)
+{
+ if ( !dbei->pBlob )
+ return 0;
+
+ if ( dbei->flags & DBEF_UTF ) // UTF only
+ {
+ char * ptr=(char *)&dbei->pBlob[sizeof(DWORD)*2];
+ int len=dbei->cbBlob-sizeof(DWORD)*2;
+ int i=0;
+
+ while(len&&(i<4))
+ {
+ if(!ptr[0]) i++;
+ ptr++;
+ len--;
+ };
+
+ if(len){
+ char * tstr=(char *)mir_alloc(len+1);
+ memcpy(tstr, ptr, len);
+ tstr[len]=0;
+ WCHAR* msg = NULL;
+ //mir_utf8decodecp( tstr, egt->codepage, &msg );
+ msg=mir_utf8decodeW(tstr);
+ mir_free(tstr);
+ return (TCHAR *)msg;
+ };
+
+ }
+ return 0;
+}
diff --git a/utilities.h b/utilities.h
index ae57e0d..ed3159e 100644
--- a/utilities.h
+++ b/utilities.h
@@ -7,3 +7,4 @@ void RemoveExcludedUsers();
tstring variables_parse(tstring const &tstrFormat, HANDLE hContact);
const int Stricmp(const TCHAR *str, const TCHAR *substr);
const int Stristr(const TCHAR *str, const TCHAR *substr);
+TCHAR* ReqGetText(DBEVENTINFO* dbei); \ No newline at end of file