diff options
author | sje <sje@4f64403b-2f21-0410-a795-97e2b3489a10> | 2007-04-26 04:50:52 +0000 |
---|---|---|
committer | sje <sje@4f64403b-2f21-0410-a795-97e2b3489a10> | 2007-04-26 04:50:52 +0000 |
commit | ed78d0bc52bbef490b66700e9c8563a68338ad36 (patch) | |
tree | eb78d1e93a3619fce810c3e2af7de00fd456a512 /nohtml/filter.cpp | |
parent | b668c691db2fb618029ae031a4be72d15155fdb1 (diff) |
fixed detection of unicode messages in filter recv
added 'unicode aware' flag
added lotsa options
git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@153 4f64403b-2f21-0410-a795-97e2b3489a10
Diffstat (limited to 'nohtml/filter.cpp')
-rw-r--r-- | nohtml/filter.cpp | 159 |
1 files changed, 90 insertions, 69 deletions
diff --git a/nohtml/filter.cpp b/nohtml/filter.cpp index 5d60445..230cab7 100644 --- a/nohtml/filter.cpp +++ b/nohtml/filter.cpp @@ -3,38 +3,54 @@ #include "options.h"
#include "conv.h"
-int FilterSendMessage(WPARAM wParam, LPARAM lParam) {
- CCSDATA *ccs = (CCSDATA *) lParam;
- char *old_message = (char *)ccs->lParam;
+void LOG(char *message) {
+#ifdef _DEBUG
+ PUShowMessage(message, SM_NOTIFY);
+#endif
+}
+
+bool ContactIsOTREncrypted(HANDLE hContact) {
+ return (DBGetContactSettingByte(hContact, "OTR", "Encrypted", 0) != 0);
+}
+int FilterSendMessage(WPARAM wParam, LPARAM lParam) {
+ CCSDATA *ccs = (CCSDATA *) lParam;
+ char *old_message = (char *)ccs->lParam;
char *buf = 0;
- if(ccs->wParam & PREF_UNICODE) {
- wchar_t *messagew = (wchar_t *)&old_message[strlen(old_message)+1];
- wchar_t* smsg=strip_carrots(messagew);
- wchar_t* html_msg;
- if(options.html) {
- html_msg=bbcodes_to_html(smsg);
- delete[] smsg;
- } else
- html_msg = smsg;
-
- buf=(char *)malloc(wcslen(html_msg)*3+3);
- WideCharToMultiByte( CP_ACP, 0,html_msg, -1,buf,wcslen(html_msg)+1, NULL, NULL);
- memcpy(&buf[strlen(buf)+1],html_msg,lstrlen(buf)*2+2);
- delete[] html_msg;
- } else {
- char* smsg=strip_carrots(old_message);
- char* html_msg;
- if(options.html) {
- html_msg=bbcodes_to_html(smsg);
- delete[] smsg;
- } else
- html_msg = smsg;
-
- buf = strdup(html_msg);
- delete[] html_msg;
+
+ if(options.filter_out) {
+ if((options.apply_to & ATF_ALL)
+ || ((options.apply_to & ATF_OTR) && ContactIsOTREncrypted(ccs->hContact)))
+ {
+ if(ccs->wParam & PREF_UNICODE) {
+ wchar_t *messagew = (wchar_t *)&old_message[strlen(old_message)+1];
+ wchar_t* smsg=strip_carrots(messagew);
+ wchar_t* html_msg;
+ if(options.html) {
+ html_msg=bbcodes_to_html(smsg);
+ delete[] smsg;
+ } else
+ html_msg = smsg;
+
+ buf=(char *)malloc(wcslen(html_msg)*3+3);
+ WideCharToMultiByte( CP_ACP, 0,html_msg, -1,buf,wcslen(html_msg)+1, NULL, NULL);
+ memcpy(&buf[strlen(buf)+1],html_msg,lstrlen(buf)*2+2);
+ delete[] html_msg;
+ } else {
+ char* smsg=strip_carrots(old_message);
+ char* html_msg;
+ if(options.html) {
+ html_msg=bbcodes_to_html(smsg);
+ delete[] smsg;
+ } else
+ html_msg = smsg;
+
+ buf = strdup(html_msg);
+ delete[] html_msg;
+ }
+ ccs->lParam = (LPARAM)buf;
+ }
}
- ccs->lParam = (LPARAM)buf;
int ret = CallService(MS_PROTO_CHAINSEND, wParam, lParam);
ccs->lParam = (LPARAM)old_message;
@@ -50,50 +66,55 @@ int FilterSendMessageW(WPARAM wParam, LPARAM lParam) { }
int FilterRecvMessage(WPARAM wParam, LPARAM lParam) {
- CCSDATA *ccs = (CCSDATA *) lParam;
- PROTORECVEVENT *pre = (PROTORECVEVENT *) ccs->lParam;
-
+ CCSDATA *ccs = (CCSDATA *) lParam;
+ PROTORECVEVENT *pre = (PROTORECVEVENT *) ccs->lParam;
char *old_message = pre->szMessage;
-
char* buf = 0;
- if(ccs->wParam & PREF_UNICODE) {
- wchar_t *messagew = (wchar_t *)&old_message[strlen(old_message)+1];
- //LOG("Recieved a unicode message.");
- wchar_t* wbuf=(wchar_t*)&pre->szMessage[lstrlen(pre->szMessage)+1];
- wchar_t* st_wbuf;
- if(options.bbcodes)
- {
- //LOG("Converting from html to bbcodes then stripping leftover html.(U)");
- wchar_t* bbuf=html_to_bbcodes(wbuf);
- st_wbuf=strip_html(bbuf);
- delete[] bbuf;
- }
- else
- {
- //LOG("Stripping html.(U)");
- st_wbuf=strip_html(wbuf);
- }
- //delete[] pre->szMessage; not necessary - done in server.cpp
- buf=(char *)malloc(wcslen(st_wbuf)*3+3);
- WideCharToMultiByte( CP_ACP, 0,st_wbuf, -1,buf,wcslen(st_wbuf)+1, NULL, NULL);
- memcpy(&buf[strlen(buf)+1],st_wbuf,lstrlen(buf)*2+2);
- delete[] st_wbuf;
- pre->szMessage = buf;
- } else {
- //LOG("Recieved a non-unicode message.");
- if(options.bbcodes)
- {
- //LOG("Converting from html to bbcodes then stripping leftover html.");
- char* bbuf=html_to_bbcodes(pre->szMessage);
- buf=strip_html(bbuf);
- delete[] bbuf;
- }
- else
+
+ if(options.filter_in) {
+ if((options.apply_to & ATF_ALL)
+ || ((options.apply_to & ATF_OTR) && ContactIsOTREncrypted(ccs->hContact)))
{
- //LOG("Stripping html.");
- buf=strip_html(pre->szMessage);
+ if(pre->flags & PREF_UNICODE) {
+ LOG("Recieved a unicode message.");
+ wchar_t *messagew = (wchar_t *)&old_message[strlen(old_message)+1];
+ //wchar_t* wbuf=(wchar_t*)&pre->szMessage[lstrlen(pre->szMessage)+1];
+ wchar_t* st_wbuf;
+ if(options.bbcodes)
+ {
+ LOG("Converting from html to bbcodes then stripping leftover html.(U)");
+ wchar_t* bbuf=html_to_bbcodes(messagew);
+ st_wbuf=strip_html(bbuf);
+ delete[] bbuf;
+ }
+ else
+ {
+ LOG("Stripping html.(U)");
+ st_wbuf=strip_html(messagew);
+ }
+ //delete[] pre->szMessage; not necessary - done in server.cpp
+ buf=(char *)malloc(wcslen(st_wbuf)*3+3);
+ WideCharToMultiByte( CP_ACP, 0,st_wbuf, -1,buf,wcslen(st_wbuf)+1, NULL, NULL);
+ memcpy(&buf[strlen(buf)+1],st_wbuf,lstrlen(buf)*2+2);
+ delete[] st_wbuf;
+ pre->szMessage = buf;
+ } else {
+ LOG("Recieved a non-unicode message.");
+ if(options.bbcodes)
+ {
+ LOG("Converting from html to bbcodes then stripping leftover html.");
+ char* bbuf=html_to_bbcodes(pre->szMessage);
+ buf=strip_html(bbuf);
+ delete[] bbuf;
+ }
+ else
+ {
+ LOG("Stripping html.");
+ buf=strip_html(pre->szMessage);
+ }
+ pre->szMessage = buf;
+ }
}
- pre->szMessage = buf;
}
int ret = CallService(MS_PROTO_CHAINRECV, wParam, lParam);
|