Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn.c

    rc6ca3ee r17a6ee9  
    8181        if( md )
    8282        {
     83                /** Disabling MSN ft support for now.
     84                while( md->filetransfers ) {
     85                        imcb_file_canceled( md->filetransfers->data, "Closing connection" );
     86                }
     87                */
     88               
    8389                if( md->fd >= 0 )
    8490                        closesocket( md->fd );
     
    117123{
    118124        struct msn_switchboard *sb;
    119         struct msn_data *md = ic->proto_data;
    120125       
    121126        if( ( sb = msn_sb_by_handle( ic, who ) ) )
     
    126131        {
    127132                struct msn_message *m;
    128                 char buf[1024];
    129133               
    130134                /* Create a message. We have to arrange a usable switchboard, and send the message later. */
     
    133137                m->text = g_strdup( message );
    134138               
    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 );
     139                return msn_sb_write_msg( ic, m );
    169140        }
    170141       
     
    178149       
    179150        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 );
     151                for( i = 0; *msn_away_state_list[i].code; i ++ )
     152                        if( *msn_away_state_list[i].name )
     153                                l = g_list_append( l, (void*) msn_away_state_list[i].name );
    182154       
    183155        return l;
     
    188160        char buf[1024];
    189161        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" );
     162       
     163        if( state )
     164                md->away_state = msn_away_state_by_name( state ) ? :
     165                                 msn_away_state_list + 1;
    194166        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 );
     167                md->away_state = msn_away_state_list;
     168       
     169        g_snprintf( buf, sizeof( buf ), "CHG %d %s\r\n", ++md->trId, md->away_state->code );
    201170        msn_write( ic, buf, strlen( buf ) );
    202171}
     
    256225{
    257226        struct msn_switchboard *sb;
    258         struct msn_data *md = ic->proto_data;
    259         char buf[1024];
    260227       
    261228        if( ( sb = msn_sb_by_handle( ic, who ) ) )
     
    267234        {
    268235                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 );
    285236               
    286237                /* Create a magic message. This is quite hackish, but who cares? :-P */
     
    289240                m->text = g_strdup( GROUPCHAT_SWITCHBOARD_MESSAGE );
    290241               
    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? */
     242                msn_sb_write_msg( ic, m );
     243
    295244                return NULL;
    296245        }
     
    397346        ret->send_typing = msn_send_typing;
    398347        ret->handle_cmp = g_strcasecmp;
     348        //ret->transfer_request = msn_ftp_transfer_request;
    399349
    400350        register_protocol(ret);
Note: See TracChangeset for help on using the changeset viewer.