Mercurial > hg
diff mcabber/mcabber/xmpp.c @ 2165:db6ca1e1e082
Remove support for obsolete XEP 22
author | franky |
---|---|
date | Fri, 17 Oct 2014 22:33:19 +0200 |
parents | 28ee843ddc02 |
children | f51c341a9da5 |
line wrap: on
line diff
--- a/mcabber/mcabber/xmpp.c Fri Oct 17 22:31:03 2014 +0200 +++ b/mcabber/mcabber/xmpp.c Fri Oct 17 22:33:19 2014 +0200 @@ -311,16 +311,13 @@ int otr_msg = 0; #endif char *barejid; -#if defined HAVE_GPGME || defined XEP0022 || defined XEP0085 +#if defined HAVE_GPGME || defined XEP0085 char *rname; GSList *sl_buddy; #endif -#if defined XEP0022 || defined XEP0085 +#ifdef XEP0085 LmMessageNode *event; struct xep0085 *xep85 = NULL; -#if defined XEP0022 - guint use_xep85 = 0; -#endif #endif gchar *enc = NULL; @@ -343,8 +340,7 @@ } barejid = jidtodisp(fjid); -#if defined HAVE_GPGME || defined HAVE_LIBOTR || \ - defined XEP0022 || defined XEP0085 +#if defined HAVE_GPGME || defined HAVE_LIBOTR || defined XEP0085 rname = strchr(fjid, JID_RESOURCE_SEPARATOR); sl_buddy = roster_find(barejid, jidsearch, ROSTER_TYPE_USER); @@ -399,7 +395,7 @@ } #endif // HAVE_GPGME -#endif // HAVE_GPGME || defined XEP0022 || defined XEP0085 +#endif // HAVE_GPGME || defined XEP0085 x = lm_message_new_with_sub_type(fjid, LM_MESSAGE_TYPE_MESSAGE, subtype); lm_message_node_add_child(x->node, "body", @@ -433,16 +429,14 @@ } g_free(barejid); -#if defined XEP0022 || defined XEP0085 +#ifdef XEP0085 // If typing notifications are disabled, we can skip all this stuff... if (chatstates_disabled || type == ROSTER_TYPE_ROOM) goto xmpp_send_msg_no_chatstates; if (sl_buddy) xep85 = buddy_resource_xep85(sl_buddy->data, rname); -#endif -#ifdef XEP0085 /* XEP-0085 5.1 * "Until receiving a reply to the initial content message (or a standalone * notification) from the Contact, the User MUST NOT send subsequent chat @@ -456,40 +450,9 @@ lm_message_node_set_attribute(event, "xmlns", NS_CHATSTATES); if (xep85->support == CHATSTATES_SUPPORT_UNKNOWN) xep85->support = CHATSTATES_SUPPORT_PROBED; -#ifdef XEP0022 - else - use_xep85 = 1; -#endif xep85->last_state_sent = ROSTER_EVENT_ACTIVE; } #endif -#ifdef XEP0022 - /* XEP-22 - * If the Contact supports XEP-0085, we do not use XEP-0022. - * If not, we try to fall back to XEP-0022. - */ - if (!use_xep85) { - struct xep0022 *xep22 = NULL; - event = lm_message_node_add_child(x->node, "x", NULL); - lm_message_node_set_attribute(event, "xmlns", NS_EVENT); - lm_message_node_add_child(event, "composing", NULL); - - if (sl_buddy) - xep22 = buddy_resource_xep22(sl_buddy->data, rname); - if (xep22) - xep22->last_state_sent = ROSTER_EVENT_ACTIVE; - - // An id is mandatory when using XEP-0022. - if (text || subject) { - const gchar *msgid = lm_message_get_id(x); - // Let's update last_msgid_sent - if (xep22) { - g_free(xep22->last_msgid_sent); - xep22->last_msgid_sent = g_strdup(msgid); - } - } - } -#endif xmpp_send_msg_no_chatstates: #ifdef WITH_DEPRECATED_STATUS_INVISIBLE @@ -559,93 +522,21 @@ } #endif -#ifdef XEP0022 -// xmpp_send_xep22_event() -// Send a XEP-22 message event (delivered, composing...). -static void xmpp_send_xep22_event(const char *fjid, guint type) -{ - LmMessage *x; - LmMessageNode *event; - const char *msgid; - char *rname, *barejid; - GSList *sl_buddy; - struct xep0022 *xep22 = NULL; - guint xep22_state; - - if (!xmpp_is_online()) - return; - - rname = strchr(fjid, JID_RESOURCE_SEPARATOR); - barejid = jidtodisp(fjid); - sl_buddy = roster_find(barejid, jidsearch, ROSTER_TYPE_USER); - g_free(barejid); - - // If we can get a resource name, we use it. Else we use NULL, - // which hopefully will give us the most likely resource. - if (rname) - rname++; - if (sl_buddy) - xep22 = buddy_resource_xep22(sl_buddy->data, rname); - - if (!xep22) - return; // XXX Maybe we could try harder (other resources?) - - msgid = xep22->last_msgid_rcvd; - - // For composing events (composing, active, inactive, paused...), - // XEP22 only has 2 states; we'll use composing and active. - if (type == ROSTER_EVENT_COMPOSING) - xep22_state = ROSTER_EVENT_COMPOSING; - else if (type == ROSTER_EVENT_ACTIVE || - type == ROSTER_EVENT_PAUSED) - xep22_state = ROSTER_EVENT_ACTIVE; - else - xep22_state = 0; // ROSTER_EVENT_NONE - - if (xep22_state) { - // Do not re-send a same event - if (xep22_state == xep22->last_state_sent) - return; - xep22->last_state_sent = xep22_state; - } - - x = lm_message_new_with_sub_type(fjid, LM_MESSAGE_TYPE_MESSAGE, - LM_MESSAGE_SUB_TYPE_CHAT); - - event = lm_message_node_add_child(x->node, "x", NULL); - lm_message_node_set_attribute(event, "xmlns", NS_EVENT); - if (type == ROSTER_EVENT_DELIVERED) - lm_message_node_add_child(event, "delivered", NULL); - else if (type == ROSTER_EVENT_COMPOSING) - lm_message_node_add_child(event, "composing", NULL); - lm_message_node_add_child(event, "id", msgid); - - lm_connection_send(lconnection, x, NULL); - lm_message_unref(x); -} -#endif - // xmpp_send_chatstate(buddy, state) // Send a chatstate or event (XEP-22/85) according to the buddy's capabilities. // The message is sent to one of the resources with the highest priority. -#if defined XEP0022 || defined XEP0085 +#if defined XEP0085 void xmpp_send_chatstate(gpointer buddy, guint chatstate) { const char *bjid; const char *activeres; -#ifdef XEP0085 GSList *resources, *p_res, *p_next; struct xep0085 *xep85 = NULL; -#endif -#ifdef XEP0022 - struct xep0022 *xep22; -#endif bjid = buddy_getjid(buddy); if (!bjid) return; activeres = buddy_getactiveresource(buddy); -#ifdef XEP0085 /* Send the chatstate to the last resource (which should have the highest priority). If chatstate is "active", send an "active" state to all resources @@ -671,13 +562,6 @@ // we don't want to send a XEP22 event. if (xep85 && xep85->support == CHATSTATES_SUPPORT_OK) return; -#endif -#ifdef XEP0022 - xep22 = buddy_resource_xep22(buddy, activeres); - if (xep22 && xep22->support == CHATSTATES_SUPPORT_OK) { - xmpp_send_xep22_event(bjid, chatstate); - } -#endif } #endif @@ -685,13 +569,12 @@ // chatstates_reset_probed(fulljid) // If the XEP has been probed for this contact, set it back to unknown so // that we probe it again. The parameter must be a full jid (w/ resource). -#if defined XEP0022 || defined XEP0085 +#if defined XEP0085 static void chatstates_reset_probed(const char *fulljid) { char *rname, *barejid; GSList *sl_buddy; struct xep0085 *xep85; - struct xep0022 *xep22; rname = strchr(fulljid, JID_RESOURCE_SEPARATOR); if (!rname++) @@ -705,12 +588,9 @@ return; xep85 = buddy_resource_xep85(sl_buddy->data, rname); - xep22 = buddy_resource_xep22(sl_buddy->data, rname); if (xep85 && xep85->support == CHATSTATES_SUPPORT_PROBED) xep85->support = CHATSTATES_SUPPORT_UNKNOWN; - if (xep22 && xep22->support == CHATSTATES_SUPPORT_PROBED) - xep22->support = CHATSTATES_SUPPORT_UNKNOWN; } #endif @@ -974,18 +854,11 @@ static void handle_state_events(const char *from, LmMessageNode *node) { -#if defined XEP0022 || defined XEP0085 +#if defined XEP0085 LmMessageNode *state_ns = NULL; char *rname, *bjid; GSList *sl_buddy; - guint events; - struct xep0022 *xep22 = NULL; struct xep0085 *xep85 = NULL; - enum { - XEP_none, - XEP_85, - XEP_22 - } which_xep = XEP_none; rname = strchr(from, JID_RESOURCE_SEPARATOR); if (rname) @@ -996,92 +869,34 @@ sl_buddy = roster_find(bjid, jidsearch, ROSTER_TYPE_USER); g_free(bjid); - /* XXX Actually that's wrong, since it filters out server "offline" - messages (for XEP-0022). This XEP is (almost) deprecated so - we don't really care. */ if (!sl_buddy) { return; } - /* Let's see chich XEP the contact uses. If possible, we'll use - XEP-85, if not we'll look for XEP-22 support. */ - events = buddy_resource_getevents(sl_buddy->data, rname); - + /* Let's see whether the contact supports XEP0085 */ xep85 = buddy_resource_xep85(sl_buddy->data, rname); - if (xep85) { + if (xep85) state_ns = lm_message_node_find_xmlns(node, NS_CHATSTATES); - if (state_ns) - which_xep = XEP_85; - } - if (which_xep != XEP_85) { /* Fall back to XEP-0022 */ - xep22 = buddy_resource_xep22(sl_buddy->data, rname); - if (xep22) { - state_ns = lm_message_node_find_xmlns(node, NS_EVENT); - if (state_ns) - which_xep = XEP_22; - } - } - - if (!which_xep) { /* Sender does not use chat states */ + if (!state_ns) { /* Sender does not use chat states */ return; } - if (which_xep == XEP_85) { /* XEP-0085 */ - xep85->support = CHATSTATES_SUPPORT_OK; - - if (!strcmp(state_ns->name, "composing")) { - xep85->last_state_rcvd = ROSTER_EVENT_COMPOSING; - } else if (!strcmp(state_ns->name, "active")) { - xep85->last_state_rcvd = ROSTER_EVENT_ACTIVE; - } else if (!strcmp(state_ns->name, "paused")) { - xep85->last_state_rcvd = ROSTER_EVENT_PAUSED; - } else if (!strcmp(state_ns->name, "inactive")) { - xep85->last_state_rcvd = ROSTER_EVENT_INACTIVE; - } else if (!strcmp(state_ns->name, "gone")) { - xep85->last_state_rcvd = ROSTER_EVENT_GONE; - } - events = xep85->last_state_rcvd; - } else { /* XEP-0022 */ -#ifdef XEP0022 - const char *body = lm_message_node_get_child_value(node, "body"); - const char *msgid; - xep22->support = CHATSTATES_SUPPORT_OK; - xep22->last_state_rcvd = ROSTER_EVENT_NONE; - - msgid = lm_message_node_get_attribute(node, "id"); + xep85->support = CHATSTATES_SUPPORT_OK; - if (lm_message_node_get_child(state_ns, "composing")) { - // Clear composing if the message contains a body - if (body) - events &= ~ROSTER_EVENT_COMPOSING; - else - events |= ROSTER_EVENT_COMPOSING; - xep22->last_state_rcvd |= ROSTER_EVENT_COMPOSING; - - } else { - events &= ~ROSTER_EVENT_COMPOSING; - } - - // Cache the message id - g_free(xep22->last_msgid_rcvd); - if (msgid) - xep22->last_msgid_rcvd = g_strdup(msgid); - else - xep22->last_msgid_rcvd = NULL; - - if (lm_message_node_get_child(state_ns, "delivered")) { - xep22->last_state_rcvd |= ROSTER_EVENT_DELIVERED; - - // Do we have to send back an ACK? - if (body) - xmpp_send_xep22_event(from, ROSTER_EVENT_DELIVERED); - } -#endif + if (!strcmp(state_ns->name, "composing")) { + xep85->last_state_rcvd = ROSTER_EVENT_COMPOSING; + } else if (!strcmp(state_ns->name, "active")) { + xep85->last_state_rcvd = ROSTER_EVENT_ACTIVE; + } else if (!strcmp(state_ns->name, "paused")) { + xep85->last_state_rcvd = ROSTER_EVENT_PAUSED; + } else if (!strcmp(state_ns->name, "inactive")) { + xep85->last_state_rcvd = ROSTER_EVENT_INACTIVE; + } else if (!strcmp(state_ns->name, "gone")) { + xep85->last_state_rcvd = ROSTER_EVENT_GONE; } - buddy_resource_setevents(sl_buddy->data, rname, events); - + buddy_resource_setevents(sl_buddy->data, rname, xep85->last_state_rcvd); update_roster = TRUE; #endif } @@ -1275,7 +1090,7 @@ if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) { x = lm_message_node_get_child(m->node, "error"); display_server_error(x, from); -#if defined XEP0022 || defined XEP0085 +#ifdef XEP0085 // If the XEP85/22 support is probed, set it back to unknown so that // we probe it again. chatstates_reset_probed(from);