Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn.c

    rc6ca3ee r9bf2481  
    4141
    4242        s = set_add( &acc->set, "mail_notifications", "false", set_eval_bool, acc );
     43       
     44        s = set_add( &acc->set, "switchboard_keepalives", "false", set_eval_bool, acc );
    4345}
    4446
     
    117119{
    118120        struct msn_switchboard *sb;
    119         struct msn_data *md = ic->proto_data;
    120121       
    121122        if( ( sb = msn_sb_by_handle( ic, who ) ) )
     
    126127        {
    127128                struct msn_message *m;
    128                 char buf[1024];
    129129               
    130130                /* Create a message. We have to arrange a usable switchboard, and send the message later. */
     
    133133                m->text = g_strdup( message );
    134134               
    135                 /* FIXME: *CHECK* the reliability of using spare sb's! */
    136                 if( ( sb = msn_sb_spare( ic ) ) )
    137                 {
    138                         debug( "Trying to use a spare switchboard to message %s", who );
    139                        
    140                         sb->who = g_strdup( who );
    141                         g_snprintf( buf, sizeof( buf ), "CAL %d %s\r\n", ++sb->trId, who );
    142                         if( msn_sb_write( sb, buf, strlen( buf ) ) )
    143                         {
    144                                 /* He/She should join the switchboard soon, let's queue the message. */
    145                                 sb->msgq = g_slist_append( sb->msgq, m );
    146                                 return( 1 );
    147                         }
    148                 }
    149                
    150                 debug( "Creating a new switchboard to message %s", who );
    151                
    152                 /* If we reach this line, there was no spare switchboard, so let's make one. */
    153                 g_snprintf( buf, sizeof( buf ), "XFR %d SB\r\n", ++md->trId );
    154                 if( !msn_write( ic, buf, strlen( buf ) ) )
    155                 {
    156                         g_free( m->who );
    157                         g_free( m->text );
    158                         g_free( m );
    159                        
    160                         return( 0 );
    161                 }
    162                
    163                 /* And queue the message to md. We'll pick it up when the switchboard comes up. */
    164                 md->msgq = g_slist_append( md->msgq, m );
    165                
    166                 /* FIXME: If the switchboard creation fails, the message will not be sent. */
    167                
    168                 return( 1 );
     135                return msn_sb_write_msg( ic, m );
    169136        }
    170137       
     
    178145       
    179146        if( l == NULL )
    180                 for( i = 0; msn_away_state_list[i].number > -1; i ++ )
    181                         l = g_list_append( l, (void*) msn_away_state_list[i].name );
     147                for( i = 0; *msn_away_state_list[i].code; i ++ )
     148                        if( *msn_away_state_list[i].name )
     149                                l = g_list_append( l, (void*) msn_away_state_list[i].name );
    182150       
    183151        return l;
     
    188156        char buf[1024];
    189157        struct msn_data *md = ic->proto_data;
    190         const struct msn_away_state *st;
    191        
    192         if( strcmp( state, GAIM_AWAY_CUSTOM ) == 0 )
    193                 st = msn_away_state_by_name( "Away" );
     158       
     159        if( state )
     160                md->away_state = msn_away_state_by_name( state ) ? :
     161                                 msn_away_state_list + 1;
    194162        else
    195                 st = msn_away_state_by_name( state );
    196        
    197         if( !st ) st = msn_away_state_list;
    198         md->away_state = st;
    199        
    200         g_snprintf( buf, sizeof( buf ), "CHG %d %s\r\n", ++md->trId, st->code );
     163                md->away_state = msn_away_state_list;
     164       
     165        g_snprintf( buf, sizeof( buf ), "CHG %d %s\r\n", ++md->trId, md->away_state->code );
    201166        msn_write( ic, buf, strlen( buf ) );
    202167}
     
    256221{
    257222        struct msn_switchboard *sb;
    258         struct msn_data *md = ic->proto_data;
    259         char buf[1024];
    260223       
    261224        if( ( sb = msn_sb_by_handle( ic, who ) ) )
     
    267230        {
    268231                struct msn_message *m;
    269                
    270                 if( ( sb = msn_sb_spare( ic ) ) )
    271                 {
    272                         debug( "Trying to reuse an existing switchboard as a groupchat with %s", who );
    273                         g_snprintf( buf, sizeof( buf ), "CAL %d %s\r\n", ++sb->trId, who );
    274                         if( msn_sb_write( sb, buf, strlen( buf ) ) )
    275                                 return msn_sb_to_chat( sb );
    276                 }
    277                
    278                 /* If the stuff above failed for some reason: */
    279                 debug( "Creating a new switchboard to groupchat with %s", who );
    280                
    281                 /* Request a new switchboard. */
    282                 g_snprintf( buf, sizeof( buf ), "XFR %d SB\r\n", ++md->trId );
    283                 if( !msn_write( ic, buf, strlen( buf ) ) )
    284                         return( 0 );
    285232               
    286233                /* Create a magic message. This is quite hackish, but who cares? :-P */
     
    289236                m->text = g_strdup( GROUPCHAT_SWITCHBOARD_MESSAGE );
    290237               
    291                 /* Queue the magic message and cross your fingers. */
    292                 md->msgq = g_slist_append( md->msgq, m );
    293                
    294                 /* FIXME: Can I try to return something here already? */
     238                msn_sb_write_msg( ic, m );
     239
    295240                return NULL;
    296241        }
Note: See TracChangeset for help on using the changeset viewer.