summaryrefslogtreecommitdiff
path: root/plugins/MirOTR
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MirOTR')
-rw-r--r--plugins/MirOTR/src/otr.h3
-rw-r--r--plugins/MirOTR/src/svcs_menu.cpp27
2 files changed, 30 insertions, 0 deletions
diff --git a/plugins/MirOTR/src/otr.h b/plugins/MirOTR/src/otr.h
index 9691cbbfc7..c91c173784 100644
--- a/plugins/MirOTR/src/otr.h
+++ b/plugins/MirOTR/src/otr.h
@@ -5,6 +5,9 @@ extern OtrlMessageAppOps ops;
/// @todo : add OTR version 3 instance tag choice (currently we use the most secure/active one)
#define MIROTR_PROTO_HELLO "?OTRv23?"
+/* OTR link normally is https://otr.cypherpunks.ca/ but it's blocked by ICQ as of March 2015 (even something like "ot-r.cyp her_ pun ks. ca")
+ It might be a good idea to use http://wikipedia.org/wiki/Off-the-Record_Messaging instead as it's not yet blocked by ICQ but might still help users to find a client/plugin */
+#define MIROTR_PROTO_HELLO_MSG _T(" has requested an Off-the-Record private conversation. However, you do not have a plugin to support that.\nSee http://wikipedia.org/wiki/Off-the-Record_Messaging for more information.")
extern "C" {
diff --git a/plugins/MirOTR/src/svcs_menu.cpp b/plugins/MirOTR/src/svcs_menu.cpp
index 4ed3f7a0d9..5467416408 100644
--- a/plugins/MirOTR/src/svcs_menu.cpp
+++ b/plugins/MirOTR/src/svcs_menu.cpp
@@ -14,9 +14,36 @@ int StartOTR(MCONTACT hContact) {
if(pol == CONTACT_DEFAULT_POLICY) pol = options.default_policy;
lib_cs_lock();
+ #ifndef MIROTR_PROTO_HELLO_MSG
char *msg = otrl_proto_default_query_msg(MODULENAME, pol);
otr_gui_inject_message((void*)hContact, proto, proto, uname, msg ? msg : MIROTR_PROTO_HELLO);
free(msg);
+ #else
+ TCHAR* nick=ProtoGetNickname(proto);
+ if(nick){
+ TCHAR msg[1024];
+ TCHAR* msgend = msg+SIZEOF(msg)-1;
+ TCHAR* msgoff = msg;
+ for(const char* c=MIROTR_PROTO_HELLO; *c; *msgoff++=*c++);
+ *msgoff++ = '\n';
+ for(const TCHAR* c=nick; *c && msgoff<msgend; *msgoff++=*c++);
+ for(const TCHAR* c=MIROTR_PROTO_HELLO_MSG; *c && msgoff<msgend; *msgoff++=*c++);
+ LCID langid = Langpack_GetDefaultLocale();
+ if(langid != 0x0409/*US*/ && langid != 0x1009/*CA*/ && langid != 0x0809/*GB*/){ // non english
+ const TCHAR* translated=TranslateTS(MIROTR_PROTO_HELLO_MSG);
+ if(_tcscmp(MIROTR_PROTO_HELLO_MSG,translated)){
+ *msgoff++ = '\n';
+ for(const TCHAR* c=nick; *c && msgoff<msgend; *msgoff++=*c++);
+ for(const TCHAR* c=translated; *c && msgoff<msgend; *msgoff++=*c++);
+ }
+ }
+ *msgoff='\0';
+ mir_free(nick);
+ char* msg_utf8 = mir_utf8encodeT(msg);
+ otr_gui_inject_message((void*)hContact, proto, proto, uname, msg_utf8 ? msg_utf8 : MIROTR_PROTO_HELLO);
+ mir_free(msg_utf8);
+ }
+ #endif
lib_cs_unlock();
mir_free(uname);
return 0;