Mercurial > ~mikael > mcabber > hg
diff mcabber/mcabber/commands.c @ 2346:7921c8d671c8
Implemented another helper function jid_get_resource_name
author | franky |
---|---|
date | Tue, 14 May 2019 22:19:33 +0200 |
parents | 8ecc28068748 |
children | 73916eeef3cb |
line wrap: on
line diff
--- a/mcabber/mcabber/commands.c Sat May 11 23:06:34 2019 +0200 +++ b/mcabber/mcabber/commands.c Tue May 14 22:19:33 2019 +0200 @@ -626,18 +626,16 @@ if (jidres[1] == JID_RESOURCE_SEPARATOR) resource = jidres+2; } else { - char *tmp; if (!check_jid_syntax(jidres) && - (tmp = strchr(jidres, JID_RESOURCE_SEPARATOR))) { + jid_get_resource_name(jidres)) { //Any other valid full jid - *tmp = '\0'; // for roster search by bare jid; - resource = tmp+1; + char * bare_jid = jidtodisp(jidres); GSList *roster_elt; - roster_elt = roster_find(jidres, jidsearch, + roster_elt = roster_find(bare_jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT); if (roster_elt) bud = roster_elt->data; - *tmp = JID_RESOURCE_SEPARATOR; + g_free(bare_jid); } if (!bud) { //Resource for current buddy @@ -1256,7 +1254,8 @@ static int send_message_to(const char *fjid, const char *msg, const char *subj, LmMessageSubType type_overwrite, bool quiet) { - char *bare_jid, *rp; + char *bare_jid; + const char *muc_nick; char *hmsg; gint crypted; gint retval = 0; @@ -1282,11 +1281,7 @@ } // We must use the bare jid in hk_message_out() - rp = strchr(fjid, JID_RESOURCE_SEPARATOR); - if (rp) - bare_jid = g_strndup(fjid, rp - fjid); - else - bare_jid = (char*)fjid; + bare_jid = jidtodisp(fjid); if (!quiet) { // Jump to window, create one if needed @@ -1294,13 +1289,9 @@ } // Check if we're sending a message to a conference room - // If not, we must make sure rp is NULL, for hk_message_out() isroom = !!roster_find(bare_jid, jidsearch, ROSTER_TYPE_ROOM); - if (rp) { - if (isroom) rp++; - else rp = NULL; - } - isroom = isroom && (!rp || !*rp); + muc_nick = jid_get_resource_name(fjid); + isroom = isroom && !muc_nick; // local part (UI, logging, etc.) if (subj) @@ -1320,11 +1311,11 @@ // Hook if (!isroom) - hk_message_out(bare_jid, rp, 0, hmsg, crypted, FALSE, xep184); + hk_message_out(bare_jid, muc_nick, 0, hmsg, crypted, FALSE, xep184); send_message_to_return: if (hmsg != msg) g_free(hmsg); - if (rp) g_free(bare_jid); + g_free(bare_jid); return retval; } @@ -1705,14 +1696,14 @@ if (!strchr(fjid, JID_DOMAIN_SEPARATOR)) { const gchar *append_server = settings_opt_get("default_server"); if (append_server) { - gchar *res = strchr(fjid, JID_RESOURCE_SEPARATOR); - uncompletedfjid = fjid; + const char *res = jid_get_resource_name(fjid); + uncompletedfjid = jidtodisp(fjid); + g_free(fjid); if (res) { - *res++ = '\0'; - fjid = g_strdup_printf("%s%c%s%c%s", fjid, JID_DOMAIN_SEPARATOR, + fjid = g_strdup_printf("%s%c%s%c%s", uncompletedfjid, JID_DOMAIN_SEPARATOR, append_server, JID_RESOURCE_SEPARATOR, res); } else { - fjid = g_strdup_printf("%s%c%s", fjid, JID_DOMAIN_SEPARATOR, + fjid = g_strdup_printf("%s%c%s", uncompletedfjid, JID_DOMAIN_SEPARATOR, append_server); } } @@ -3593,27 +3584,20 @@ } if (fjid) { - switch (numtype) { - case iqreq_vcard: - { // vCards requests are sent to the bare jid, except in MUC rooms - gchar *tmp = strchr(fjid, JID_RESOURCE_SEPARATOR); - if (tmp) { - gchar *bjid = jidtodisp(fjid); - if (!roster_find(bjid, jidsearch, ROSTER_TYPE_ROOM)) - *tmp = '\0'; - g_free(bjid); - } - } - /* FALLTHRU */ - case iqreq_version: - case iqreq_time: - case iqreq_last: - case iqreq_ping: - xmpp_request(fjid, numtype); - break; - default: - break; + if (iqreq_vcard == numtype) { + // vCards requests are sent to the bare jid, except in MUC rooms + const char *resource_name = jid_get_resource_name(fjid); + if (resource_name) { + char *bare_jid = jidtodisp(fjid); + if (!roster_find(bare_jid, jidsearch, ROSTER_TYPE_ROOM)) { + g_free(jid_utf8); + fjid = jid_utf8 = bare_jid; + } else { + g_free(bare_jid); + } + } } + xmpp_request(fjid, numtype); } g_free(jid_utf8); free_arg_lst(paramlst);