Ignore:
Timestamp:
2008-02-15T17:38:57Z (16 years ago)
Author:
ulim <a.sporto+bee@…>
Branches:
master
Children:
506e61b
Parents:
0fbd3a6d (diff), eeb85a8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merged with upstream r328

Wilmer van der Gaast 2008-02-11 Got rid of some noise at startup: complaining when the default configuration

Wilmer van der Gaast 2008-02-10 Added support for password-protected Jabber chatrooms.
Wilmer van der Gaast 2008-02-10 Making AI_ADDRCONFIG optional, it doesn't exist on at least NetBSD and
Wilmer van der Gaast 2008-02-09 Restored "add -tmp". A bit hackish, but it will do for now.
Wilmer van der Gaast 2008-02-07 Fixed getnameinfo() calls, this fixes Solaris stability issues. Thanks to
Wilmer van der Gaast 2008-02-04 Added bogus G_GNUC_MALLOC to restore GLib 2.4 compatibility (hopefully).
Wilmer van der Gaast 2008-02-03 Messages from the user are also included in backlogs when joining a Jabber
Wilmer van der Gaast 2008-02-03 Disabling "Unknown command" warnings since they're very noisy and pretty
Wilmer van der Gaast 2008-02-03 Implemented XEP-0115. This adds some info to the <presence/> tags so
Wilmer van der Gaast 2008-02-03 Saner garbage collection of cached packets in the Jabber module. Now
Wilmer van der Gaast 2008-02-02 Added help_free() and cleaned up some very stale help-related stuff I
Wilmer van der Gaast 2008-01-30 Fixed handling of OSCAR multi-part messages... They're not arrays, they're
Wilmer van der Gaast 2008-01-24 Keeping track of valid Jabber connections so _connected() events will be
Wilmer van der Gaast 2008-01-24 Fixed two valgrind warnings (partially uninitialized "struct tm" vars.)
Wilmer van der Gaast 2008-01-20 The Jabber module now uses imcb_chat_log() instead of imcb_log() where
Wilmer van der Gaast 2008-01-20 Added imcb_chat_log() for chatroom system messages, so they can be
Wilmer van der Gaast 2008-01-20 GET_BUDDY_FIRST wasn't actually implemented, even though it was in use
Wilmer van der Gaast 2008-01-19 Using test -f instead of test -e. This breaks if the include files are
Wilmer van der Gaast 2008-01-19 Added byte swapping code to the new MD5 checksumming code to make it work
Wilmer van der Gaast 2008-01-18 Moving imcb_chat_new() to a saner location (no code changes) and fixing
Wilmer van der Gaast 2008-01-17 Apparently ext_yahoo_got_im can be called with msg=NULL, so it should be
Wilmer van der Gaast 2008-01-17 Fixing some Solaris compiler warnings (u_int->uint, adding some typecasts
Wilmer van der Gaast 2008-01-13 Fixed handing of failed groupchat joins.
Wilmer van der Gaast 2008-01-13 Fixed "Conditional jump or move depends on uninitialised value(s)" at
Wilmer van der Gaast 2008-01-13 Fixed quickstart2. (Bug #349.)
Wilmer van der Gaast 2008-01-13 Different handling of charset mismatches before login time. Ignoring a
Wilmer van der Gaast 2008-01-12 When a switchboard connection dies (at the TCP level) and there are still
Wilmer van der Gaast 2008-01-12 Killed info_string_append() and now showing the IP address of ICQ users
Wilmer van der Gaast 2008-01-11 Fixing bug #344, now away states should always be correct, even when people
Wilmer van der Gaast 2008-01-11 Adding own handle to protocol name in blist output for people with multiple
Wilmer van der Gaast 2008-01-10 Now setting odata->icq properly again, this got lost some time ago, which
Wilmer van der Gaast 2008-01-06 More consistency in error/warning errors. Until now "WARNING:" was usually
Wilmer van der Gaast 2008-01-06 Changed warning message about unsent MSN messages. It should show the actual
Wilmer van der Gaast 2008-01-05 Added "mail_notifications" setting. Who needs those notifications anyway?
Wilmer van der Gaast 2008-01-05 Build fix from vmiklos.
Wilmer van der Gaast 2008-01-05 Added handling of MSN switchboard NAK messages. Untested, but hey, it
Wilmer van der Gaast 2008-01-05 Removed closure->result. I was planning to add some more stuff, but will
Miklos Vajna 2007-12-31 encode: md5.c is no longer in protocols/, it's in lib/
Wilmer van der Gaast 2007-12-28 Fixed return value check in proxy_connect(), since on some systems
Wilmer van der Gaast 2007-12-28 Added missing return in jabber_login().
Wilmer van der Gaast 2007-12-16 Implemented XEP-0199 (patch from misc@…).
Wilmer van der Gaast 2007-12-12 Checking conn->xcred before trying to clean it up since GnuTLS doesn't
Wilmer van der Gaast 2007-12-12 Killed the <server> parameter to "account add" and changed the default
Wilmer van der Gaast 2007-12-12 Fixed sockerr_again() usage in Jabber module to (hopefully) fix a 100% CPU
Wilmer van der Gaast 2007-12-10 Don't allow nicks that start with a number.
Wilmer van der Gaast 2007-12-10 Fixed "set xxx" syntax (it showed all settings instead of just xxx).
Wilmer van der Gaast 2007-12-09 If I keep forgetting to credit people in commit msgs I should probably add
Wilmer van der Gaast 2007-12-09 Added /invite support for Jabber chatrooms (and fixed the argument order

File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/jabber/presence.c

    r0fbd3a6d r1ba7e8f  
    2929        char *from = xt_find_attr( node, "from" );
    3030        char *type = xt_find_attr( node, "type" );      /* NULL should mean the person is online. */
    31         struct xt_node *c;
    32         struct jabber_buddy *bud;
    33         int is_chat = 0, is_away = 0;
     31        struct xt_node *c, *cap;
     32        struct jabber_buddy *bud, *send_presence = NULL;
     33        int is_chat = 0;
    3434        char *s;
    3535       
     
    5050                {
    5151                        if( set_getbool( &ic->irc->set, "debug" ) )
    52                                 imcb_log( ic, "WARNING: Could not handle presence information from JID: %s", from );
     52                                imcb_log( ic, "Warning: Could not handle presence information from JID: %s", from );
    5353                        return XT_HANDLED;
    5454                }
     
    6363                {
    6464                        bud->away_state = (void*) jabber_away_state_by_code( c->text );
    65                         if( strcmp( c->text, "chat" ) != 0 )
    66                                 is_away = OPT_AWAY;
    6765                }
    6866                else
     
    7977                        bud->priority = 0;
    8078               
     79                if( bud && ( cap = xt_find_node( node->children, "c" ) ) &&
     80                    ( s = xt_find_attr( cap, "xmlns" ) ) && strcmp( s, XMLNS_CAPS ) == 0 )
     81                {
     82                        /* This <presence> stanza includes an XEP-0115
     83                           capabilities part. Not too interesting, but we can
     84                           see if it has an ext= attribute. */
     85                        s = xt_find_attr( cap, "ext" );
     86                        if( s && ( strstr( s, "cstates" ) || strstr( s, "chatstate" ) ) )
     87                                bud->flags |= JBFLAG_DOES_XEP85;
     88                       
     89                        /* This field can contain more information like xhtml
     90                           support, but we don't support that ourselves.
     91                           Officially the ext= tag was deprecated, but enough
     92                           clients do send it.
     93                           
     94                           (I'm aware that this is not the right way to use
     95                           this field.) See for an explanation of ext=:
     96                           http://www.xmpp.org/extensions/attic/xep-0115-1.3.html*/
     97                }
     98               
    8199                if( is_chat )
    82100                        jabber_chat_pkt_presence( ic, bud, node );
    83                 else if( bud == jabber_buddy_by_jid( ic, bud->bare_jid, 0 ) )
    84                         imcb_buddy_status( ic, bud->bare_jid, OPT_LOGGED_IN | is_away,
    85                                            ( is_away && bud->away_state ) ? bud->away_state->full_name : NULL,
    86                                            bud->away_message );
     101                else
     102                        send_presence = jabber_buddy_by_jid( ic, bud->bare_jid, 0 );
    87103        }
    88104        else if( strcmp( type, "unavailable" ) == 0 )
     
    91107                {
    92108                        if( set_getbool( &ic->irc->set, "debug" ) )
    93                                 imcb_log( ic, "WARNING: Received presence information from unknown JID: %s", from );
     109                                imcb_log( ic, "Warning: Received presence information from unknown JID: %s", from );
    94110                        return XT_HANDLED;
    95111                }
     
    119135                        /* If another resource is still available, send its presence
    120136                           information. */
    121                         if( ( bud = jabber_buddy_by_jid( ic, from, 0 ) ) )
    122                         {
    123                                 if( bud->away_state && ( *bud->away_state->code == 0 ||
    124                                     strcmp( bud->away_state->code, "chat" ) == 0 ) )
    125                                         is_away = OPT_AWAY;
    126                                
    127                                 imcb_buddy_status( ic, bud->bare_jid, OPT_LOGGED_IN | is_away,
    128                                                    ( is_away && bud->away_state ) ? bud->away_state->full_name : NULL,
    129                                                    bud->away_message );
    130                         }
    131                         else
     137                        if( ( send_presence = jabber_buddy_by_jid( ic, from, 0 ) ) == NULL )
    132138                        {
    133139                                /* Otherwise, count him/her as offline now. */
     
    177183                } */
    178184        }
     185
     186        if( send_presence )
     187        {
     188                int is_away = 0;
     189
     190                if( send_presence->away_state && !( *send_presence->away_state->code == 0 ||
     191                    strcmp( send_presence->away_state->code, "chat" ) == 0 ) )
     192                        is_away = OPT_AWAY;
     193
     194                imcb_buddy_status( ic, send_presence->bare_jid, OPT_LOGGED_IN | is_away,
     195                                   ( is_away && send_presence->away_state ) ?
     196                                   send_presence->away_state->full_name : NULL,
     197                                   send_presence->away_message );
     198        }
    179199       
    180200        return XT_HANDLED;
     
    186206{
    187207        struct jabber_data *jd = ic->proto_data;
    188         struct xt_node *node;
     208        struct xt_node *node, *cap;
    189209        char *show = jd->away_state->code;
    190210        char *status = jd->away_message;
     
    199219                xt_add_child( node, xt_new_node( "status", status, NULL ) );
    200220       
     221        /* This makes the packet slightly bigger, but clients interested in
     222           capabilities can now cache the discovery info. This reduces the
     223           usual post-login iq-flood. See XEP-0115. At least libpurple and
     224           Trillian seem to do this right. */
     225        cap = xt_new_node( "c", NULL, NULL );
     226        xt_add_attr( cap, "xmlns", XMLNS_CAPS );
     227        xt_add_attr( cap, "node", "http://bitlbee.org/xmpp/caps" );
     228        xt_add_attr( cap, "ver", BITLBEE_VERSION ); /* The XEP wants this hashed, but nobody's doing that. */
     229        xt_add_child( node, cap );
     230       
    201231        st = jabber_write_packet( ic, node );
    202232       
Note: See TracChangeset for help on using the changeset viewer.