684 jep22 = buddy_resource_jep22(buddy, NULL); |
684 jep22 = buddy_resource_jep22(buddy, NULL); |
685 if (jep22 && jep22->support == CHATSTATES_SUPPORT_OK) { |
685 if (jep22 && jep22->support == CHATSTATES_SUPPORT_OK) { |
686 jb_send_jep22_event(jid, chatstate); |
686 jb_send_jep22_event(jid, chatstate); |
687 } |
687 } |
688 #endif |
688 #endif |
|
689 } |
|
690 #endif |
|
691 |
|
692 // chatstates_reset_probed(fulljid) |
|
693 // If the JEP has been probed for this contact, set it back to unknown so |
|
694 // that we probe it again. The parameter must be a full jid (w/ resource). |
|
695 #if defined JEP0022 || defined JEP0085 |
|
696 static void chatstates_reset_probed(const char *fulljid) |
|
697 { |
|
698 char *rname, *barejid; |
|
699 GSList *sl_buddy; |
|
700 struct jep0085 *jep85; |
|
701 struct jep0022 *jep22; |
|
702 |
|
703 rname = strchr(fulljid, JID_RESOURCE_SEPARATOR); |
|
704 if (!rname++) |
|
705 return; |
|
706 |
|
707 barejid = jidtodisp(fulljid); |
|
708 sl_buddy = roster_find(barejid, jidsearch, ROSTER_TYPE_USER); |
|
709 g_free(barejid); |
|
710 |
|
711 if (!sl_buddy) |
|
712 return; |
|
713 |
|
714 jep85 = buddy_resource_jep85(sl_buddy->data, rname); |
|
715 jep22 = buddy_resource_jep22(sl_buddy->data, rname); |
|
716 |
|
717 if (jep85 && jep85->support == CHATSTATES_SUPPORT_PROBED) |
|
718 jep85->support = CHATSTATES_SUPPORT_UNKNOWN; |
|
719 if (jep22 && jep22->support == CHATSTATES_SUPPORT_PROBED) |
|
720 jep22->support = CHATSTATES_SUPPORT_UNKNOWN; |
689 } |
721 } |
690 #endif |
722 #endif |
691 |
723 |
692 // jb_subscr_send_auth(jid) |
724 // jb_subscr_send_auth(jid) |
693 // Allow jid to receive our presence updates |
725 // Allow jid to receive our presence updates |
1686 timestamp = xml_get_timestamp(xmldata); |
1718 timestamp = xml_get_timestamp(xmldata); |
1687 |
1719 |
1688 if (type && !strcmp(type, TMSG_ERROR)) { |
1720 if (type && !strcmp(type, TMSG_ERROR)) { |
1689 if ((x = xmlnode_get_tag(xmldata, TMSG_ERROR)) != NULL) |
1721 if ((x = xmlnode_get_tag(xmldata, TMSG_ERROR)) != NULL) |
1690 display_server_error(x); |
1722 display_server_error(x); |
|
1723 #if defined JEP0022 || defined JEP0085 |
|
1724 // If the JEP85/22 support is probed, set it back to unknown so that |
|
1725 // we probe it again. |
|
1726 chatstates_reset_probed(from); |
|
1727 #endif |
1691 } |
1728 } |
1692 if (from && body) |
1729 if (from && body) |
1693 gotmessage(type, from, body, enc, timestamp); |
1730 gotmessage(type, from, body, enc, timestamp); |
1694 g_free(tmp); |
1731 g_free(tmp); |
1695 } |
1732 } |