diff options
-rw-r--r-- | init.cpp | 2 | ||||
-rw-r--r-- | stopspam.cpp | 25 | ||||
-rw-r--r-- | utilities.cpp | 33 | ||||
-rw-r--r-- | utilities.h | 1 |
4 files changed, 46 insertions, 15 deletions
@@ -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 |