# HG changeset patch # User Mikael Berthe # Date 1182536659 -7200 # Node ID ceada40bbe203c629adb77f96d704db18b9acf9c # Parent 4016394133408f484a7da2b330c25d4e2a0e6e59 Update Entity Capabilities (add iq:last) diff -r 401639413340 -r ceada40bbe20 mcabber/src/jab_iq.c --- a/mcabber/src/jab_iq.c Fri Jun 22 19:21:23 2007 +0200 +++ b/mcabber/src/jab_iq.c Fri Jun 22 20:24:19 2007 +0200 @@ -112,14 +112,15 @@ const char *entity_version(void) { static char *ver; + const char *PVERSION = PACKAGE_VERSION "+iql"; if (ver) return ver; #ifdef HGCSET - ver = g_strdup_printf("%s-%s", PACKAGE_VERSION, HGCSET); + ver = g_strdup_printf("%s-%s", PVERSION, HGCSET); #else - ver = g_strdup(PACKAGE_VERSION); + ver = g_strdup(PVERSION); #endif return ver; @@ -1301,6 +1302,11 @@ xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"), "var", NS_CHATSTATES); } + if (!strcasecmp(ext, "iql")) { + // I guess it's ok to send this even if it's not compiled in. + xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"), + "var", NS_LAST); + } } // disco_info_set_default(ansquery, entitycaps) @@ -1341,6 +1347,9 @@ "var", NS_PING); xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"), "var", NS_COMMANDS); + if (!entitycaps) + xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"), + "var", NS_LAST); } static void handle_iq_disco_info(jconn conn, char *from, const char *id, diff -r 401639413340 -r ceada40bbe20 mcabber/src/jabglue.c --- a/mcabber/src/jabglue.c Fri Jun 22 19:21:23 2007 +0200 +++ b/mcabber/src/jabglue.c Fri Jun 22 20:24:19 2007 +0200 @@ -335,15 +335,30 @@ { xmlnode y; const char *ver = entity_version(); + char *exts, *exts2; + + exts = NULL; y = xmlnode_insert_tag(x, "c"); xmlnode_put_attrib(y, "xmlns", NS_CAPS); xmlnode_put_attrib(y, "node", MCABBER_CAPS_NODE); xmlnode_put_attrib(y, "ver", ver); #ifdef JEP0085 - if (!chatstates_disabled) - xmlnode_put_attrib(y, "ext", "csn"); + if (!chatstates_disabled) { + exts2 = g_strjoin(" ", "csn", exts, NULL); + g_free(exts); + exts = exts2; + } #endif + if (!settings_opt_get_int("iq_last_disable")) { + exts2 = g_strjoin(" ", "iql", exts, NULL); + g_free(exts); + exts = exts2; + } + if (exts) { + xmlnode_put_attrib(y, "ext", exts); + g_free(exts); + } } static void roompresence(gpointer room, void *presencedata)