Mercurial > ~mikael > mcabber > hg
diff mcabber/mcabber/xmpp_iqrequest.c @ 2103:1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Discovery.
author | Roeland Jago Douma <roeland@famdouma.nl> |
---|---|
date | Fri, 01 Mar 2013 15:27:29 +0100 |
parents | 87049d55e34f |
children | c7e9950fa741 |
line wrap: on
line diff
--- a/mcabber/mcabber/xmpp_iqrequest.c Sun May 11 15:08:02 2014 +0200 +++ b/mcabber/mcabber/xmpp_iqrequest.c Fri Mar 01 15:27:29 2013 +0100 @@ -47,6 +47,9 @@ LmMessage *m, gpointer user_data); static LmHandlerResult cb_vcard(LmMessageHandler *h, LmConnection *c, LmMessage *m, gpointer user_data); +static LmHandlerResult cb_disco_info(LmMessageHandler *h, LmConnection *c, + LmMessage *m, gpointer user_data); + static struct IqRequestHandlers { @@ -60,6 +63,7 @@ {NS_LAST, "query", &cb_last}, {NS_PING, "ping", &cb_ping}, {NS_VCARD, "vCard", &cb_vcard}, + {NS_DISCO_INFO, "query", &cb_disco_info}, {NULL, NULL, NULL} }; @@ -75,6 +79,26 @@ vcard_pref = 1<<7, }; +static LmHandlerResult cb_disco_info(LmMessageHandler *h, LmConnection *c, + LmMessage *m, gpointer user_data) +{ + LmMessageNode *ansqry; + LmMessageNode *feature; + + ansqry = lm_message_node_get_child(m->node, "query"); + + feature = lm_message_node_get_child(ansqry, "feature"); + for(;feature;feature = feature->next) { + const char *v = lm_message_node_get_attribute(feature, "var"); + + if (!g_strcmp0(v, NS_CARBONS_2)) { + scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, "We have carbons!"); + } + } + + return LM_HANDLER_RESULT_REMOVE_MESSAGE; +} + static LmHandlerResult cb_ping(LmMessageHandler *h, LmConnection *c, LmMessage *m, gpointer user_data) { @@ -159,6 +183,10 @@ gettimeofday(now, NULL); data = (gpointer)now; notifier = g_free; + } else if (!g_strcmp0(xmlns, NS_DISCO_INFO)) { + gchar *servername = get_servername(settings_opt_get("jid"), settings_opt_get("server")); + lm_message_node_set_attribute(iq->node, "to", servername); + g_free(servername); } handler = lm_message_handler_new(iq_request_handlers[i].handler,