Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/sb.c

    rfe79de66 rdcf155d  
    22  * BitlBee -- An IRC to other IM-networks gateway                     *
    33  *                                                                    *
    4   * Copyright 2002-2012 Wilmer van der Gaast and others                *
     4  * Copyright 2002-2010 Wilmer van der Gaast and others                *
    55  \********************************************************************/
    66
     
    122122}
    123123
    124 struct msn_switchboard *msn_sb_by_handle( struct im_connection *ic, const char *handle )
     124struct msn_switchboard *msn_sb_by_handle( struct im_connection *ic, char *handle )
    125125{
    126126        struct msn_data *md = ic->proto_data;
     
    308308        struct msn_switchboard *sb = data;
    309309        struct im_connection *ic;
    310         struct msn_data *md;
    311310        char buf[1024];
    312311       
     
    316315       
    317316        ic = sb->ic;
    318         md = ic->proto_data;
    319317       
    320318        if( source != sb->fd )
     
    334332       
    335333        if( sb->session == MSN_SB_NEW )
    336                 g_snprintf( buf, sizeof( buf ), "USR %d %s;{%s} %s\r\n", ++sb->trId, ic->acc->user, md->uuid, sb->key );
     334                g_snprintf( buf, sizeof( buf ), "USR %d %s %s\r\n", ++sb->trId, ic->acc->user, sb->key );
    337335        else
    338                 g_snprintf( buf, sizeof( buf ), "ANS %d %s;{%s} %s %d\r\n", ++sb->trId, ic->acc->user, md->uuid, sb->key, sb->session );
     336                g_snprintf( buf, sizeof( buf ), "ANS %d %s %s %d\r\n", ++sb->trId, ic->acc->user, sb->key, sb->session );
    339337       
    340338        if( msn_sb_write( sb, "%s", buf ) )
     
    455453                        char buf[1024];
    456454                       
    457                         /* For as much as I understand this MPOP stuff now, a
    458                            switchboard has two (or more) roster entries per
    459                            participant. One "bare JID" and one JID;UUID. Ignore
    460                            the latter. */
    461                         if( !strchr( cmd[4], ';' ) )
     455                        if( num == 1 )
    462456                        {
    463                                 /* HACK: Since even 1:1 chats now have >2 participants
    464                                    (ourselves included) it gets hard to tell them apart
    465                                    from rooms. Let's hope this is enough: */
    466                                 if( sb->chat == NULL && num != tot )
    467                                 {
    468                                         g_snprintf( buf, sizeof( buf ), "MSN groupchat session %d", sb->session );
    469                                         sb->chat = imcb_chat_new( ic, buf );
    470                                        
    471                                         g_free( sb->who );
    472                                         sb->who = NULL;
    473                                 }
     457                                g_snprintf( buf, sizeof( buf ), "MSN groupchat session %d", sb->session );
     458                                sb->chat = imcb_chat_new( ic, buf );
    474459                               
    475                                 if( sb->chat )
    476                                         imcb_chat_add_buddy( sb->chat, cmd[4] );
    477                         }
    478                        
    479                         /* We have the full roster, start showing the channel to
    480                            the user. */
    481                         if( num == tot && sb->chat )
     460                                g_free( sb->who );
     461                                sb->who = NULL;
     462                        }
     463                       
     464                        imcb_chat_add_buddy( sb->chat, cmd[4] );
     465                       
     466                        if( num == tot )
    482467                        {
    483468                                imcb_chat_add_buddy( sb->chat, ic->acc->user );
     
    521506                        return( 0 );
    522507                }
    523                
    524                 /* See IRO above. Handle "bare JIDs" only. */
    525                 if( strchr( cmd[1], ';' ) )
    526                         return 1;
    527508               
    528509                if( sb->who && g_strcasecmp( cmd[1], sb->who ) == 0 )
     
    560541                        return( st );
    561542                }
    562                 else if( strcmp( cmd[1], ic->acc->user ) == 0 )
    563                 {
    564                         /* Well, gee thanks. Thanks for letting me know I've arrived.. */
    565                 }
    566543                else if( sb->who )
    567544                {
     
    636613                           The server will clean it up when it's idle for too long. */
    637614                }
    638                 else if( sb->chat && !strchr( cmd[1], ';' ) )
     615                else if( sb->chat )
    639616                {
    640617                        imcb_chat_remove_buddy( sb->chat, cmd[1], "" );
     
    652629                /* If the person is offline, send an offline message instead,
    653630                   and don't report an error. */
     631                /* TODO: Support for OIMs that works. (#874) */
     632                /*
    654633                if( num == 217 )
    655                         msn_ns_oim_send_queue( ic, &sb->msgq );
     634                        msn_soap_oim_send_queue( ic, &sb->msgq );
    656635                else
     636                */
    657637                        imcb_error( ic, "Error reported by switchboard server: %s", err->text );
    658638               
Note: See TracChangeset for help on using the changeset viewer.