Mercurial > ~mikael > mcabber > hg
diff mcabber/src/jabglue.c @ 1299:3b338a5c01fc
OTR support
author | Frank Zschockelt <mcabber_otr[at]freakysoft.de> |
---|---|
date | Thu, 30 Aug 2007 00:52:51 +0200 |
parents | e42f48103609 |
children | 8ada97e5eb75 |
line wrap: on
line diff
--- a/mcabber/src/jabglue.c Tue Aug 28 18:56:50 2007 +0200 +++ b/mcabber/src/jabglue.c Thu Aug 30 00:52:51 2007 +0200 @@ -33,6 +33,7 @@ #include "histolog.h" #include "commands.h" #include "pgp.h" +#include "otr.h" #define JABBERPORT 5222 #define JABBERSSLPORT 5223 @@ -551,7 +552,7 @@ return g_strdup_printf("%u%d", msg_idn, (int)(now%10L)); } -// jb_send_msg(jid, test, type, subject, msgid, *encrypted) +// jb_send_msg(jid, text, type, subject, msgid, *encrypted) // When encrypted is not NULL, the function set *encrypted to 1 if the // message has been PGP-encrypted. If encryption enforcement is set and // encryption fails, *encrypted is set to -1. @@ -560,6 +561,7 @@ { xmlnode x; gchar *strtype; + int otr_msg = 0; #if defined HAVE_GPGME || defined JEP0022 || defined JEP0085 char *rname, *barejid; GSList *sl_buddy; @@ -584,7 +586,7 @@ else strtype = TMSG_CHAT; -#if defined HAVE_GPGME || defined JEP0022 || defined JEP0085 +#if defined HAVE_GPGME || defined HAVE_LIBOTR || defined JEP0022 || defined JEP0085 rname = strchr(fjid, JID_RESOURCE_SEPARATOR); barejid = jidtodisp(fjid); sl_buddy = roster_find(barejid, jidsearch, ROSTER_TYPE_USER); @@ -594,6 +596,23 @@ if (rname) rname++; +#ifdef HAVE_LIBOTR + if (msgid && strcmp(msgid, "otrinject") == 0) + msgid = NULL; + else { + otr_msg = otr_send((char **)&text, barejid); + if (!text) { + g_free(barejid); + if (encrypted) + *encrypted = -1; + return; + } + } + if (otr_msg && encrypted) { + *encrypted = 1; + } +#endif + #ifdef HAVE_GPGME if (type == ROSTER_TYPE_USER && sl_buddy && gpg_enabled()) { if (!settings_pgp_getdisabled(barejid)) { // not disabled for this contact? @@ -1669,6 +1688,7 @@ char *bjid; const char *rname, *s; char *decrypted = NULL; + int otr_msg = 0, free_msg = 0; bjid = jidtodisp(from); @@ -1687,6 +1707,14 @@ check_signature(bjid, rname, xmldata_signed, decrypted); #endif +#ifdef HAVE_LIBOTR + otr_msg = otr_receive((char **)&body, bjid, &free_msg); + if(!body){ + g_free(bjid); + return; + } +#endif + // Check for unexpected groupchat messages // If we receive a groupchat message from a room we're not a member of, // this is probably a server issue and the best we can do is to send @@ -1715,6 +1743,8 @@ g_free(bjid); g_free(decrypted); + if(free_msg) + g_free((char *)body); buddylist_build(); scr_DrawRoster(); @@ -1729,12 +1759,14 @@ (type && strcmp(type, "chat")) || ((s = settings_opt_get("server")) != NULL && !strcasecmp(bjid, s))) { hk_message_in(bjid, rname, timestamp, body, type, - (decrypted ? TRUE : FALSE)); + ((decrypted || otr_msg) ? TRUE : FALSE)); } else { scr_LogPrint(LPRINT_LOGNORM, "Blocked a message from <%s>", bjid); } g_free(bjid); g_free(decrypted); + if(free_msg) + g_free((char *)body); } static const char *defaulterrormsg(int code)