// started: 19.12.2006 #include "Mra.h" #include "MraAntiSpam.h" #include "MraRTFMsg.h" typedef struct { LPWSTR lpwszBadWord; DWORD dwBadWordLen; } MRA_ANTISPAM_BAD_WORD; static MRA_ANTISPAM_BAD_WORD *pmabwBadWords=NULL; static SIZE_T dwBadWordsCount=0; #define MRA_ANTISPAM_PREALLOC_COUNT 256 SIZE_T MraAntiSpamLoadBadWordsW() { SIZE_T dwRet=0; char szSettingName[MAX_PATH]; SIZE_T i=0,dwValueSize,dwAllocatedItemsCount=MRA_ANTISPAM_PREALLOC_COUNT; DBVARIANT dbv={0}; DBCONTACTGETSETTING sVal={0}; dbv.type=DBVT_WCHAR; sVal.pValue=&dbv; sVal.szModule=PROTOCOL_NAMEA; sVal.szSetting=szSettingName; if (pmabwBadWords || dwBadWordsCount) MraAntiSpamFreeBadWords(); pmabwBadWords=(MRA_ANTISPAM_BAD_WORD*)MEMALLOC((sizeof(MRA_ANTISPAM_BAD_WORD)*dwAllocatedItemsCount)); for(i=0;TRUE;i++) { mir_snprintf(szSettingName,SIZEOF(szSettingName),"AntiSpamBadWord %lu",i); dbv.type=DBVT_WCHAR; if (CallService(MS_DB_CONTACT_GETSETTING_STR,NULL,(LPARAM)&sVal)) { break; }else{ if (dwAllocatedItemsCount==i) { dwAllocatedItemsCount+=MRA_ANTISPAM_PREALLOC_COUNT; pmabwBadWords=(MRA_ANTISPAM_BAD_WORD*)MEMREALLOC(pmabwBadWords,(sizeof(MRA_ANTISPAM_BAD_WORD)*dwAllocatedItemsCount)); if (pmabwBadWords==NULL) break; } dwValueSize=lstrlenW(dbv.pwszVal); pmabwBadWords[i].lpwszBadWord=(LPWSTR)MEMALLOC((dwValueSize*sizeof(WCHAR))); if (pmabwBadWords[i].lpwszBadWord) {//BuffToLowerCase(szValue,dbv.pszVal,dwValueSize); memmove(pmabwBadWords[i].lpwszBadWord,dbv.pwszVal,(dwValueSize*sizeof(WCHAR))); CharLowerBuffW(pmabwBadWords[i].lpwszBadWord,dwValueSize); pmabwBadWords[i].dwBadWordLen=dwValueSize; } DBFreeVariant(&dbv); if (pmabwBadWords[i].lpwszBadWord==NULL) break; } } dwBadWordsCount=i; return(dwRet); } void MraAntiSpamFreeBadWords() { SIZE_T i; for(i=0;i<dwBadWordsCount;i++) { if (pmabwBadWords[i].lpwszBadWord) MEMFREE(pmabwBadWords[i].lpwszBadWord); } MEMFREE(pmabwBadWords); dwBadWordsCount=0; } void MraAntiSpamEnableControls(HWND hWndDlg,BOOL bEnabled) { WORD wMraAntiSpamControlsList[]={ IDC_CHK_TEMP_CONTACTS, IDC_CLN_NON_ALPHNUM, IDC_MAX_LANG_CHANGES, IDC_SHOWPOPUP, IDC_WRITETOSYSTEMHISTORY, IDC_SEND_SPAM_REPORT_TO_SERVER, IDC_BAD_WORDS_LIST, IDC_EDIT_BAD_WORD, IDC_BUTTON_ADD, IDC_BUTTONREMOVE, IDC_BUTTON_DEFAULT }; EnableControlsArray(hWndDlg,(WORD*)&wMraAntiSpamControlsList,SIZEOF(wMraAntiSpamControlsList),bEnabled); EnableWindow(GetDlgItem(hWndDlg,IDC_DELETE_SPAMBOT_CONTACT),(bEnabled && IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_CHK_TEMP_CONTACTS))); } INT_PTR CALLBACK MraAntiSpamDlgProcOpts(HWND hWndDlg,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg){ case WM_INITDIALOG: { TranslateDialogDefault(hWndDlg); CHECK_DLG_BUTTON(hWndDlg,IDC_ENABLE,DB_Mra_GetByte(NULL,"AntiSpamEnable",MRA_ANTISPAM_DEFAULT_ENABLE)); CHECK_DLG_BUTTON(hWndDlg,IDC_CHK_TEMP_CONTACTS,DB_Mra_GetByte(NULL,"AntiSpamCheckTempContacts",MRA_ANTISPAM_DEFAULT_CHK_TEMP_CONTACTS)); CHECK_DLG_BUTTON(hWndDlg,IDC_DELETE_SPAMBOT_CONTACT,DB_Mra_GetByte(NULL,"AntiSpamDeteleSpamBotContacts",MRA_ANTISPAM_DEFAULT_DELETE_SPAMBOT_CONTACT)); CHECK_DLG_BUTTON(hWndDlg,IDC_CLN_NON_ALPHNUM,DB_Mra_GetByte(NULL,"AntiSpamCleanNonAlphaNumeric",MRA_ANTISPAM_DEFAULT_CLN_NON_ALPHNUM)); SetDlgItemInt(hWndDlg,IDC_MAX_LANG_CHANGES,DB_Mra_GetDword(NULL,"AntiSpamMaxLangChanges",MRA_ANTISPAM_DEFAULT_MAX_LNG_CHANGES),FALSE); CHECK_DLG_BUTTON(hWndDlg,IDC_SHOWPOPUP,DB_Mra_GetByte(NULL,"AntiSpamShowPopUp",MRA_ANTISPAM_DEFAULT_SHOWPOP)); CHECK_DLG_BUTTON(hWndDlg,IDC_WRITETOSYSTEMHISTORY,DB_Mra_GetByte(NULL,"AntiSpamWriteToSystemHistory",MRA_ANTISPAM_DEFAULT_WRITETOSYSTEMHISTORY)); CHECK_DLG_BUTTON(hWndDlg,IDC_SEND_SPAM_REPORT_TO_SERVER,DB_Mra_GetByte(NULL,"AntiSpamSendSpamReportToSrv",MRA_ANTISPAM_DEFAULT_SEND_SPAM_REPORT_TO_SERVER)); {// fill list char szSettingName[MAX_PATH]; WCHAR wszBuff[MAX_PATH]; SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_RESETCONTENT,0,0); SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_INITSTORAGE,(WPARAM)1024,(LPARAM)32768); for(SIZE_T i=0;TRUE;i++) { mir_snprintf(szSettingName,SIZEOF(szSettingName),"AntiSpamBadWord %lu",i); if (DB_Mra_GetStaticStringW(NULL,szSettingName,wszBuff,SIZEOF(wszBuff),NULL)) { if (SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_FINDSTRING,-1,(LPARAM)wszBuff)==LB_ERR) SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_ADDSTRING,0,(LPARAM)wszBuff); }else{ break; } } } //SET_DLG_ITEM_TEXTW(hWndDlg,IDC_EDIT_BAD_WORD,L""); MraAntiSpamEnableControls(hWndDlg,IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_ENABLE)); } return(TRUE); case WM_COMMAND: if (LOWORD(wParam)==IDC_ENABLE) { MraAntiSpamEnableControls(hWndDlg,IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_ENABLE)); } if (LOWORD(wParam)==IDC_CHK_TEMP_CONTACTS) { EnableWindow(GetDlgItem(hWndDlg,IDC_DELETE_SPAMBOT_CONTACT),IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_CHK_TEMP_CONTACTS)); } if (LOWORD(wParam)==IDC_BUTTON_ADD) { WCHAR szBadWord[MAX_PATH]; if (GET_DLG_ITEM_TEXT(hWndDlg,IDC_EDIT_BAD_WORD,szBadWord,SIZEOF(szBadWord))) { SET_DLG_ITEM_TEXTW(hWndDlg,IDC_EDIT_BAD_WORD,L""); if (SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_FINDSTRING,-1,(LPARAM)szBadWord)==LB_ERR) SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_ADDSTRING,0,(LPARAM)szBadWord); } } if (LOWORD(wParam)==IDC_BUTTONREMOVE) { SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_DELETESTRING,SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_GETCURSEL,0,0),0); } if (LOWORD(wParam)==IDC_BUTTON_DEFAULT) { MraAntiSpamResetBadWordsList(); {// fill list char szSettingName[MAX_PATH]; WCHAR wszBuff[MAX_PATH]; SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_RESETCONTENT,0,0); SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_INITSTORAGE,(WPARAM)1024,(LPARAM)32768); for(SIZE_T i=0;TRUE;i++) { mir_snprintf(szSettingName,SIZEOF(szSettingName),"AntiSpamBadWord %lu",i); if (DB_Mra_GetStaticStringW(NULL,szSettingName,wszBuff,SIZEOF(wszBuff),NULL)) { if (SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_FINDSTRING,-1,(LPARAM)wszBuff)==LB_ERR) SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_ADDSTRING,0,(LPARAM)wszBuff); }else{ break; } } } MraAntiSpamLoadBadWordsW(); } if ((LOWORD(wParam)==IDC_EDIT_BAD_WORD) && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus()) ) return(0); SendMessage(GetParent(hWndDlg),PSM_CHANGED,0,0); break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code){ case PSN_APPLY: { char szSettingName[MAX_PATH]; WCHAR szBadWord[MAX_PATH]; SIZE_T i,dwCount; DBWriteContactSettingByte(NULL,PROTOCOL_NAMEA,"AntiSpamEnable",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_ENABLE)); DBWriteContactSettingByte(NULL,PROTOCOL_NAMEA,"AntiSpamCheckTempContacts",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_CHK_TEMP_CONTACTS)); DBWriteContactSettingByte(NULL,PROTOCOL_NAMEA,"AntiSpamDeteleSpamBotContacts",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_DELETE_SPAMBOT_CONTACT)); DBWriteContactSettingByte(NULL,PROTOCOL_NAMEA,"AntiSpamCleanNonAlphaNumeric",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_CLN_NON_ALPHNUM)); DB_Mra_SetDword(NULL,"AntiSpamMaxLangChanges",(DWORD)GetDlgItemInt(hWndDlg,IDC_MAX_LANG_CHANGES,NULL,FALSE)); DBWriteContactSettingByte(NULL,PROTOCOL_NAMEA,"AntiSpamShowPopUp",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_SHOWPOPUP)); DBWriteContactSettingByte(NULL,PROTOCOL_NAMEA,"AntiSpamWriteToSystemHistory",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_WRITETOSYSTEMHISTORY)); DBWriteContactSettingByte(NULL,PROTOCOL_NAMEA,"AntiSpamSendSpamReportToSrv",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_SEND_SPAM_REPORT_TO_SERVER)); dwCount=SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_GETCOUNT,0,0); for(i=0;i<dwCount;i++) { mir_snprintf(szSettingName,SIZEOF(szSettingName),"AntiSpamBadWord %lu",i); SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BAD_WORDS_LIST,LB_GETTEXT,i,(LPARAM)szBadWord); DB_Mra_SetStringW(NULL,szSettingName,szBadWord); } dwCount=((i*2)+1024); for (;i<dwCount;i++) { mir_snprintf(szSettingName,SIZEOF(szSettingName),"AntiSpamBadWord %lu",i); DB_Mra_DeleteValue(NULL,szSettingName); } MraAntiSpamLoadBadWordsW(); } return(TRUE); } break; } return(FALSE); } void MraAntiSpamResetBadWordsList() { char szSettingName[MAX_PATH]; SIZE_T i,dwMax; LPWSTR lpwszBadWords[]= { // web words L"@",L"http://",L"ftp://",L"www",L"wap.",L".com",L".org",L".info",L".net",L".ua",L".uz",L".to",L".biz",L".vu",L".ru",L"mailto:",L"ICQ",L"SKYPE", // spam words L"sex",L"seks",L"sekc",L"xxx",L"phorno",L"video",L"photo",L"SMS",L"WMZ",L"WMR",L"narod",L"ucoz",L"ref",L"Agent",L"+7",L"495",L"$",L"spam",L"URL",L"%2E", // spam words rus L"�����",L"����",L"������",L"�����",L"����",L"�����",L"�����",L"����",L"����",L"������",L"�����",L"�����",L"����",L"���",L"�����",L"����",L"���",L"����",L"����",L"����",L"������",L"�������",L"��������",L"������",L"�����",L"�����",L"�����",L"����",L"�����",L"�����",L"�����",L"�����",L"�������",L"������",L"�������",L"������",L"�����",L"���",L"����",L"�����",L"����",L"�����",L"�����",L"���",L"���������",L"�����",L"�����",L"�����", // executable L".ade",L".adp",L".bas",L".bat",L".chm",L".cmd",L".com",L".cpl",L".crt",L".exe",L".hlp",L".hta",L".inf",L".ins",L".isp",L".js",L".jse",L".lnk",L".mdb",L".mde",L".msc",L".msi",L".msp",L".mst",L".pcd",L".pif",L".reg",L".scr",L".sct",L".shs",L".shb",L".url",L".vb",L".vbe",L".vbs",L".wsc",L".wsf",L".wsh", // archives L".zip",L".rar",L".cab",L".arj",L".tar",L".gz",L".zoo",L".lzh",L".jar",L".ace",L".z",L".iso",L".bz2",L".uue",L".gzip", NULL }; for(i=0;lpwszBadWords[i];i++) { mir_snprintf(szSettingName,SIZEOF(szSettingName),"AntiSpamBadWord %lu",i); DB_Mra_SetStringW(NULL,szSettingName,lpwszBadWords[i]); } dwMax=(i+1024); for (;i<dwMax;i++) { mir_snprintf(szSettingName,SIZEOF(szSettingName),"AntiSpamBadWord %lu",i); DB_Mra_DeleteValue(NULL,szSettingName); } } BOOL MraAntiSpamIsCharExcepted(WCHAR wcTestChar) { BOOL bRet=FALSE; SIZE_T i; LPWSTR lpwszExceptedChars=L"\r\n .,<>//?;:'\"\\][}{`-=~!@#$%^&*()_+�1234567890"; //lstrlenW(lpwszExceptedChars)=46 for(i=0;i<46;i++) { if (lpwszExceptedChars[i]==wcTestChar) { bRet=TRUE; break; } } return(bRet); } SIZE_T MraAntiSpamCalcLangChanges(LPWSTR lpwszMessage,SIZE_T dwMessageSize) { SIZE_T dwRet=0; if (lpwszMessage && dwMessageSize) { WCHAR wcPrevChar=0; SIZE_T i; for(i=1;i<dwMessageSize;i++) { if (MraAntiSpamIsCharExcepted(lpwszMessage[i])==FALSE) { if (wcPrevChar) if ( (max(wcPrevChar,lpwszMessage[i])-min(wcPrevChar,lpwszMessage[i])) > 255) { dwRet++; } wcPrevChar=lpwszMessage[i]; } } } return(dwRet); } SIZE_T MraAntiSpamCleanNonAlphaNumeric(LPWSTR lpwszMessage,SIZE_T dwMessageSize) { SIZE_T dwRet=0; if (lpwszMessage && dwMessageSize) { LPWSTR lpwszCurWritePos=lpwszMessage; SIZE_T i; for(i=0;i<dwMessageSize;i++) { if (IsCharAlphaNumeric(lpwszMessage[i])) (*lpwszCurWritePos++)=lpwszMessage[i]; } (*lpwszCurWritePos)=0; dwRet=(lpwszCurWritePos-lpwszMessage); } return(dwRet); } BOOL MraAntiSpamTestMessageForBadWordsW(LPWSTR lpwszMessage,SIZE_T dwMessageSize) { BOOL bRet=FALSE; if (lpwszMessage && dwMessageSize) { for(SIZE_T i=0;i<dwBadWordsCount;i++) { if (MemoryFind(0,lpwszMessage,(dwMessageSize*sizeof(WCHAR)),pmabwBadWords[i].lpwszBadWord,(pmabwBadWords[i].dwBadWordLen*sizeof(WCHAR)))) { bRet=TRUE; break; } } } return(bRet); } BOOL MraAntiSpamHasMessageBadWordsW(LPWSTR lpwszMessage,SIZE_T dwMessageSize) { BOOL bRet=FALSE; if (lpwszMessage && dwMessageSize) { LPWSTR lpwszMessageConverted; lpwszMessageConverted=(LPWSTR)MEMALLOC((dwMessageSize*sizeof(WCHAR))); if (lpwszMessageConverted) { SIZE_T dwtm; /*{ HANDLE hFile=CreateFile(L"C:\\Documents and Settings\\Rozhuk_IM\\������� ����\\spam_raw.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile!=INVALID_HANDLE_VALUE) { WriteFile(hFile,lpwszMessageConverted,(dwMessageSize*sizeof(WCHAR)),&i,NULL); CloseHandle(hFile); } }//*/ // � ������ ������� �� ��������� {//BuffToLowerCase(lpszMessageConverted,lpszMessage,dwMessageSize); memmove(lpwszMessageConverted,lpwszMessage,(dwMessageSize*sizeof(WCHAR))); CharLowerBuffW(lpwszMessageConverted,dwMessageSize); } // 1 ������: ������� ����������� ������������ ����� dwtm=DB_Mra_GetDword(NULL,"AntiSpamMaxLangChanges",MRA_ANTISPAM_DEFAULT_MAX_LNG_CHANGES); if (dwtm) { if (dwtm<=MraAntiSpamCalcLangChanges(lpwszMessageConverted,dwMessageSize)) bRet=TRUE; } // 2 ������: ���� ������ ����� if (bRet==FALSE) bRet=MraAntiSpamTestMessageForBadWordsW(lpwszMessageConverted,dwMessageSize); // 3 ������: ��������� ������ ����� + ����� � ����� ���� ������ ����� if (bRet==FALSE) if (DB_Mra_GetByte(NULL,"AntiSpamCleanNonAlphaNumeric",MRA_ANTISPAM_DEFAULT_ENABLE)) { dwMessageSize=MraAntiSpamCleanNonAlphaNumeric(lpwszMessageConverted,dwMessageSize); bRet=MraAntiSpamTestMessageForBadWordsW(lpwszMessageConverted,dwMessageSize); } MEMFREE(lpwszMessageConverted); } } return(bRet); } DWORD MraAntiSpamReceivedMessageW(LPSTR lpszEMail,SIZE_T dwEMailSize,DWORD dwMessageFlags,LPWSTR lpwszMessage,SIZE_T dwMessageSize) { DWORD dwRet=MESSAGE_NOT_SPAM;; if ((dwMessageFlags&(MESSAGE_FLAG_SYSTEM|MESSAGE_FLAG_CONTACT|MESSAGE_FLAG_NOTIFY|MESSAGE_FLAG_SMS|MESSAGE_SMS_DELIVERY_REPORT|MESSAGE_FLAG_ALARM|MESSAGE_FLAG_MULTICHAT))==0) if (DB_Mra_GetByte(NULL,"AntiSpamEnable",MRA_ANTISPAM_DEFAULT_ENABLE)) if (IsEMailChatAgent(lpszEMail,dwEMailSize)==FALSE) {// enabled, message mast be cheked BOOL bCheckMessage=TRUE; HANDLE hContact; dwRet=MESSAGE_SPAM; hContact=MraHContactFromEmail(lpszEMail,dwEMailSize,FALSE,TRUE,NULL); if (hContact) { DWORD dwID,dwGroupID,dwContactFlag,dwContactSeverFlags; GetContactBasicInfoW(hContact,&dwID,&dwGroupID,&dwContactFlag,&dwContactSeverFlags,NULL,NULL,0,NULL,NULL,0,NULL,NULL,0,NULL); if ((dwID!=-1 && DBGetContactSettingByte(hContact,"CList","NotOnList",0)==0) || dwGroupID==-2) {// not temp contact, OK bCheckMessage=FALSE; dwRet=MESSAGE_NOT_SPAM; }else{// temp contact if (DB_Mra_GetByte(NULL,"AntiSpamCheckTempContacts",MRA_ANTISPAM_DEFAULT_CHK_TEMP_CONTACTS)==FALSE || (((dwMessageFlags&MESSAGE_FLAG_AUTHORIZE) && DB_Mra_GetByte(NULL,"AutoAuthGrandNewUsers",MRA_DEFAULT_AUTO_AUTH_GRAND_NEW_USERS) && DB_Mra_GetByte(NULL,"AutoAuthGrandNewUsersDisableSPAMCheck",MRA_DEFAULT_AUTO_AUTH_GRAND_NEW_USERS_DISABLE_SPAM_CHECK))) ) {// �������� ���������� �������� bCheckMessage=FALSE; dwRet=MESSAGE_NOT_SPAM; } } } if (bCheckMessage) { if (MraAntiSpamHasMessageBadWordsW(lpwszMessage,dwMessageSize)==FALSE) {// � ������� ������ ��� ����� dwRet=MESSAGE_NOT_SPAM; } } if (dwRet==MESSAGE_SPAM) { BOOL bAntiSpamShowPopUp,bAntiSpamWriteToSystemHistory,bAntiSpamDeteleSpamBotContacts; bAntiSpamShowPopUp=(BOOL)DB_Mra_GetByte(NULL,"AntiSpamShowPopUp",MRA_ANTISPAM_DEFAULT_SHOWPOP); bAntiSpamWriteToSystemHistory=(BOOL)DB_Mra_GetByte(NULL,"AntiSpamWriteToSystemHistory",MRA_ANTISPAM_DEFAULT_WRITETOSYSTEMHISTORY); bAntiSpamDeteleSpamBotContacts=(BOOL)DB_Mra_GetByte(NULL,"AntiSpamDeteleSpamBotContacts",MRA_ANTISPAM_DEFAULT_DELETE_SPAMBOT_CONTACT); if (bAntiSpamShowPopUp || bAntiSpamWriteToSystemHistory) { char szEMail[MAX_EMAIL_LEN]; WCHAR wszBuff[MRA_MAXLENOFMESSAGE*2]; SIZE_T dwDBMessageSize; memmove(szEMail,lpszEMail,dwEMailSize); (*((WORD*)(szEMail+dwEMailSize)))=0; dwDBMessageSize=mir_sntprintf(wszBuff,SIZEOF(wszBuff),L"%s: %S\r\n",TranslateW(L"Spam bot blocked"),szEMail); if (dwMessageSize>(SIZEOF(wszBuff)-(dwDBMessageSize+sizeof(DWORD)))) dwMessageSize=(SIZEOF(wszBuff)-(dwDBMessageSize+sizeof(DWORD))); memmove((wszBuff+dwDBMessageSize),lpwszMessage,(dwMessageSize*sizeof(WCHAR))); dwDBMessageSize+=dwMessageSize; (*((DWORD*)(wszBuff+dwDBMessageSize)))=0; dwDBMessageSize+=sizeof(DWORD); if (bAntiSpamShowPopUp) MraPopupShowFromAgentW(MRA_POPUP_TYPE_INFORMATION,0,wszBuff); if (bAntiSpamWriteToSystemHistory) { CHAR szBuff[MRA_MAXLENOFMESSAGE*2]; DBEVENTINFO dbei={0}; WideCharToMultiByte(CP_UTF8,0,wszBuff,dwDBMessageSize,szBuff,SIZEOF(szBuff),NULL,NULL); dbei.cbSize=sizeof(dbei); dbei.szModule=PROTOCOL_NAMEA; dbei.timestamp=_time32(NULL); dbei.flags=(DBEF_READ|DBEF_UTF); dbei.eventType=EVENTTYPE_MESSAGE; dbei.cbBlob=(dwDBMessageSize*sizeof(WCHAR)); dbei.pBlob=(PBYTE)szBuff; CallService(MS_DB_EVENT_ADD,0,(LPARAM)&dbei); } if (hContact && bAntiSpamDeteleSpamBotContacts) { dwDBMessageSize=mir_sntprintf(wszBuff,SIZEOF(wszBuff),L"%s: %S",TranslateW(L"Spam bot contact deleted"),szEMail); if (bAntiSpamShowPopUp) MraPopupShowFromAgentW(MRA_POPUP_TYPE_INFORMATION,0,wszBuff); if (bAntiSpamWriteToSystemHistory) { CHAR szBuff[MRA_MAXLENOFMESSAGE*2]; DBEVENTINFO dbei={0}; (*((DWORD*)(wszBuff+dwDBMessageSize)))=0; dwDBMessageSize+=sizeof(DWORD); WideCharToMultiByte(CP_UTF8,0,wszBuff,dwDBMessageSize,szBuff,SIZEOF(szBuff),NULL,NULL); dbei.cbSize=sizeof(dbei); dbei.szModule=PROTOCOL_NAMEA; dbei.timestamp=_time32(NULL); dbei.flags=(DBEF_READ|DBEF_UTF); dbei.eventType=EVENTTYPE_MESSAGE; dbei.cbBlob=(dwDBMessageSize*sizeof(WCHAR)); dbei.pBlob=(PBYTE)szBuff; CallService(MS_DB_EVENT_ADD,0,(LPARAM)&dbei); } } } if (hContact && bAntiSpamDeteleSpamBotContacts) CallService(MS_DB_CONTACT_DELETE,(WPARAM)hContact,0); } } return(dwRet); }