Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/jabglue.c @ 997:d0d0cd9e39c4
Cosmetics & comments
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Thu, 02 Nov 2006 22:34:52 +0100 |
parents | 0759f4c7da68 |
children | f984baa9a789 |
comparison
equal
deleted
inserted
replaced
996:f4d6570e2628 | 997:d0d0cd9e39c4 |
---|---|
440 gchar *strtype; | 440 gchar *strtype; |
441 #if defined JEP0022 || defined JEP0085 | 441 #if defined JEP0022 || defined JEP0085 |
442 xmlnode event; | 442 xmlnode event; |
443 char *rname, *barejid; | 443 char *rname, *barejid; |
444 GSList *sl_buddy; | 444 GSList *sl_buddy; |
445 guint which_jep = 0; /* 0: none, 1: 85, 2: 22 */ | 445 guint use_jep85 = 0; |
446 struct jep0085 *jep85 = NULL; | 446 struct jep0085 *jep85 = NULL; |
447 #endif | 447 #endif |
448 | 448 |
449 if (!online) return; | 449 if (!online) return; |
450 | 450 |
491 event = xmlnode_insert_tag(x, "active"); | 491 event = xmlnode_insert_tag(x, "active"); |
492 xmlnode_put_attrib(event, "xmlns", NS_CHATSTATES); | 492 xmlnode_put_attrib(event, "xmlns", NS_CHATSTATES); |
493 if (jep85->support == CHATSTATES_SUPPORT_UNKNOWN) | 493 if (jep85->support == CHATSTATES_SUPPORT_UNKNOWN) |
494 jep85->support = CHATSTATES_SUPPORT_PROBED; | 494 jep85->support = CHATSTATES_SUPPORT_PROBED; |
495 else | 495 else |
496 which_jep = 1; | 496 use_jep85 = 1; |
497 jep85->last_state_sent = ROSTER_EVENT_ACTIVE; | 497 jep85->last_state_sent = ROSTER_EVENT_ACTIVE; |
498 } | 498 } |
499 #endif | 499 #endif |
500 #ifdef JEP0022 | 500 #ifdef JEP0022 |
501 /* JEP-22 | 501 /* JEP-22 |
502 * If the Contact supports JEP-0085, we do not use JEP-0022. | 502 * If the Contact supports JEP-0085, we do not use JEP-0022. |
503 * If not, we try to fall back to JEP-0022. | 503 * If not, we try to fall back to JEP-0022. |
504 */ | 504 */ |
505 if (!which_jep) { | 505 if (!use_jep85) { |
506 struct jep0022 *jep22 = NULL; | 506 struct jep0022 *jep22 = NULL; |
507 event = xmlnode_insert_tag(x, "x"); | 507 event = xmlnode_insert_tag(x, "x"); |
508 xmlnode_put_attrib(event, "xmlns", NS_EVENT); | 508 xmlnode_put_attrib(event, "xmlns", NS_EVENT); |
509 xmlnode_insert_tag(event, "composing"); | 509 xmlnode_insert_tag(event, "composing"); |
510 | 510 |
658 | 658 |
659 jb_reset_keepalive(); | 659 jb_reset_keepalive(); |
660 } | 660 } |
661 #endif | 661 #endif |
662 | 662 |
663 // jb_send_chatstate(buddy, state) | |
664 // Send a chatstate or event (JEP-22/85) according to the buddy's capabilities. | |
665 // The message is sent to one of the resources with the highest priority. | |
663 #if defined JEP0022 || defined JEP0085 | 666 #if defined JEP0022 || defined JEP0085 |
664 void jb_send_chatstate(gpointer buddy, guint chatstate) | 667 void jb_send_chatstate(gpointer buddy, guint chatstate) |
665 { | 668 { |
666 const char *jid; | 669 const char *jid; |
667 struct jep0085 *jep85 = NULL; | 670 struct jep0085 *jep85 = NULL; |
1697 xmlnode state_ns = NULL; | 1700 xmlnode state_ns = NULL; |
1698 const char *body; | 1701 const char *body; |
1699 char *rname, *jid; | 1702 char *rname, *jid; |
1700 GSList *sl_buddy; | 1703 GSList *sl_buddy; |
1701 guint events; | 1704 guint events; |
1702 guint which_jep = 0; /* 0: none, 1: 85, 2: 22 */ | |
1703 struct jep0022 *jep22 = NULL; | 1705 struct jep0022 *jep22 = NULL; |
1704 struct jep0085 *jep85 = NULL; | 1706 struct jep0085 *jep85 = NULL; |
1707 enum { | |
1708 JEP_none, | |
1709 JEP_85, | |
1710 JEP_22 | |
1711 } which_jep = JEP_none; | |
1705 | 1712 |
1706 rname = strchr(from, JID_RESOURCE_SEPARATOR); | 1713 rname = strchr(from, JID_RESOURCE_SEPARATOR); |
1707 jid = jidtodisp(from); | 1714 jid = jidtodisp(from); |
1708 sl_buddy = roster_find(jid, jidsearch, ROSTER_TYPE_USER); | 1715 sl_buddy = roster_find(jid, jidsearch, ROSTER_TYPE_USER); |
1709 | 1716 |
1710 /* XXX Actually that's wrong, since it filters out server "offline" | 1717 /* XXX Actually that's wrong, since it filters out server "offline" |
1711 messages (for JEP-0022) */ | 1718 messages (for JEP-0022). This JEP is (almost) deprecated so |
1719 we don't really care. */ | |
1712 if (!sl_buddy || !rname++) { | 1720 if (!sl_buddy || !rname++) { |
1713 g_free(jid); | 1721 g_free(jid); |
1714 return; | 1722 return; |
1715 } | 1723 } |
1716 | 1724 |
1725 /* Let's see chich JEP the contact uses. If possible, we'll use | |
1726 JEP-85, if not we'll look for JEP-22 support. */ | |
1717 events = buddy_resource_getevents(sl_buddy->data, rname); | 1727 events = buddy_resource_getevents(sl_buddy->data, rname); |
1718 | 1728 |
1719 jep85 = buddy_resource_jep85(sl_buddy->data, rname); | 1729 jep85 = buddy_resource_jep85(sl_buddy->data, rname); |
1720 if (jep85) { | 1730 if (jep85) { |
1721 state_ns = xml_get_xmlns(xmldata, NS_CHATSTATES); | 1731 state_ns = xml_get_xmlns(xmldata, NS_CHATSTATES); |
1722 if (state_ns) | 1732 if (state_ns) |
1723 which_jep = 1; | 1733 which_jep = JEP_85; |
1724 } | 1734 } |
1725 | 1735 |
1726 if (which_jep != 1) { /* Fall back to JEP-0022 */ | 1736 if (which_jep != JEP_85) { /* Fall back to JEP-0022 */ |
1727 jep22 = buddy_resource_jep22(sl_buddy->data, rname); | 1737 jep22 = buddy_resource_jep22(sl_buddy->data, rname); |
1728 if (jep22) { | 1738 if (jep22) { |
1729 state_ns = xml_get_xmlns(xmldata, NS_EVENT); | 1739 state_ns = xml_get_xmlns(xmldata, NS_EVENT); |
1730 if (state_ns) | 1740 if (state_ns) |
1731 which_jep = 2; | 1741 which_jep = JEP_22; |
1732 } | 1742 } |
1733 } | 1743 } |
1734 | 1744 |
1735 if (!which_jep) { /* Sender does not use chat states */ | 1745 if (!which_jep) { /* Sender does not use chat states */ |
1736 g_free(jid); | 1746 g_free(jid); |
1737 return; | 1747 return; |
1738 } | 1748 } |
1739 | 1749 |
1740 body = xmlnode_get_tag_data(xmldata, "body"); | 1750 body = xmlnode_get_tag_data(xmldata, "body"); |
1741 | 1751 |
1742 if (which_jep == 1) { /* JEP-0085 */ | 1752 if (which_jep == JEP_85) { /* JEP-0085 */ |
1743 const char *p; | 1753 const char *p; |
1744 jep85->support = CHATSTATES_SUPPORT_OK; | 1754 jep85->support = CHATSTATES_SUPPORT_OK; |
1745 | 1755 |
1746 p = xmlnode_get_name(state_ns); | 1756 p = xmlnode_get_name(state_ns); |
1747 if (!strcmp(p, "composing")) { | 1757 if (!strcmp(p, "composing")) { |