aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2007-11-24 01:13:15 +0000
committerWilmer van der Gaast <wilmer@gaast.net>2007-11-24 01:13:15 +0000
commit3a80471931642374f323e284ce3a5a04b5635a96 (patch)
treedd887df45ac2e1eccac5dc7ba821a5b3af424734
parent77bfd077778c30c70f791752ce3a13d537aedd3b (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.c10
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 )
{