diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2006-11-13 00:06:08 +0100 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2006-11-13 00:06:08 +0100 |
commit | 0d3f30f5449cf1730c006314f3dd60843e911ad1 (patch) | |
tree | a9d952e5342e65ee2097295871f3e34e53d93c6c /protocols/jabber/presence.c | |
parent | 47d3ac46306965e9db66096eef8c60c8e7985950 (diff) |
Improved handling of JIDs: Bare JIDs are allowed (*sigh*) and case
insensitivity. Probably not complete yet...
Diffstat (limited to 'protocols/jabber/presence.c')
-rw-r--r-- | protocols/jabber/presence.c | 63 |
1 files changed, 19 insertions, 44 deletions
diff --git a/protocols/jabber/presence.c b/protocols/jabber/presence.c index ccd22f60..b56acb51 100644 --- a/protocols/jabber/presence.c +++ b/protocols/jabber/presence.c @@ -37,36 +37,12 @@ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data ) if( type == NULL ) { - if( ( s = strchr( from, '/' ) ) == NULL ) + if( !( bud = jabber_buddy_by_jid( gc, from, GET_BUDDY_EXACT | GET_BUDDY_CREAT ) ) ) { - char *s = xt_to_string( node ); - serv_got_crap( gc, "WARNING: Ignoring presence tag with bare JID: %s", s ); - g_free( s ); + serv_got_crap( gc, "WARNING: Could not handle presence information from JID: %s", from ); return XT_HANDLED; } - if( !( bud = jabber_buddy_by_jid( gc, from ) ) ) - { - /* FOR NOW, s still contains the location of the /. - Keep this in mind when changing things here. :-) */ - - /* We check if the buddy is in the contact list, - because Jabber servers seem to like to send - presence information of buddies we removed - from our list sometimes, for example... */ - - *s = 0; - if( find_buddy( gc, from ) == NULL ) - { - *s = '/'; - serv_got_crap( gc, "WARNING: Ignoring presence information from unknown JID: %s", from ); - return XT_HANDLED; - } - *s = '/'; - - bud = jabber_buddy_add( gc, from ); - } - g_free( bud->away_message ); if( ( c = xt_find_node( node->children, "status" ) ) && c->text_len > 0 ) bud->away_message = g_strdup( c->text ); @@ -88,36 +64,34 @@ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data ) else bud->priority = 0; - serv_got_update( gc, bud->handle, 1, 0, 0, 0, + serv_got_update( gc, bud->bare_jid, 1, 0, 0, 0, bud->away_state ? UC_UNAVAILABLE : 0, 0 ); } else if( strcmp( type, "unavailable" ) == 0 ) { - char *s; - - if( ( s = strchr( from, '/' ) ) == NULL ) - { - char *s = xt_to_string( node ); - serv_got_crap( gc, "WARNING: Ignoring presence tag with bare JID: %s\n", s ); - g_free( s ); - return XT_HANDLED; - } - - if( jabber_buddy_by_jid( gc, from ) == NULL ) + if( jabber_buddy_by_jid( gc, from, GET_BUDDY_EXACT ) == NULL ) { serv_got_crap( gc, "WARNING: Received presence information from unknown JID: %s", from ); return XT_HANDLED; } jabber_buddy_remove( gc, from ); - *s = 0; - /* Only count this as offline if there's no other resource - available anymore. */ - if( jabber_buddy_by_jid( gc, from ) == NULL ) - serv_got_update( gc, from, 0, 0, 0, 0, 0, 0 ); + if( ( s = strchr( from, '/' ) ) ) + { + *s = 0; - *s = '/'; + /* Only count this as offline if there's no other resource + available anymore. */ + if( jabber_buddy_by_jid( gc, from, 0 ) == NULL ) + serv_got_update( gc, from, 0, 0, 0, 0, 0, 0 ); + + *s = '/'; + } + else + { + serv_got_update( gc, from, 0, 0, 0, 0, 0, 0 ); + } } else if( strcmp( type, "subscribe" ) == 0 ) { @@ -125,6 +99,7 @@ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data ) } else if( strcmp( type, "subscribed" ) == 0 ) { + /* Not sure about this one, actually... */ serv_got_crap( gc, "%s just accepted your authorization request", from ); } else if( strcmp( type, "unsubscribe" ) == 0 || strcmp( type, "unsubscribed" ) == 0 ) |