diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2007-11-24 01:13:15 +0000 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2007-11-24 01:13:15 +0000 |
commit | 3a80471931642374f323e284ce3a5a04b5635a96 (patch) | |
tree | dd887df45ac2e1eccac5dc7ba821a5b3af424734 | |
parent | 77bfd077778c30c70f791752ce3a13d537aedd3b (diff) |
(Hopefully) fixing one case where the Jabber module doesn't understand a
<presence type=unavailable> tag properly and keeps showing the buddy as
on-line. (When the tag comes from a bare JID.)
-rw-r--r-- | protocols/jabber/presence.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/protocols/jabber/presence.c b/protocols/jabber/presence.c index 71a044b5..5abdc449 100644 --- a/protocols/jabber/presence.c +++ b/protocols/jabber/presence.c @@ -87,7 +87,7 @@ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data ) } else if( strcmp( type, "unavailable" ) == 0 ) { - if( ( bud = jabber_buddy_by_jid( ic, from, GET_BUDDY_EXACT ) ) == NULL ) + if( ( bud = jabber_buddy_by_jid( ic, from, 0 ) ) == NULL ) { if( set_getbool( &ic->irc->set, "debug" ) ) imcb_log( ic, "WARNING: Received presence information from unknown JID: %s", from ); @@ -100,7 +100,13 @@ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data ) jabber_chat_pkt_presence( ic, bud, node ); } - jabber_buddy_remove( ic, from ); + if( strchr( from, '/' ) == NULL ) + /* Sometimes servers send a type="unavailable" from a + bare JID, which should mean that suddenly all + resources for this JID disappeared. */ + jabber_buddy_remove_bare( ic, from ); + else + jabber_buddy_remove( ic, from ); if( is_chat ) { |