Changeset e8c8d00 for protocols/msn


Ignore:
Timestamp:
2010-03-17T15:15:19Z (14 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
60e4df3
Parents:
1c3008a (diff), f9928cb (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:

Merging mainline.

Location:
protocols/msn
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn.c

    r1c3008a re8c8d00  
    2626#include "nogaim.h"
    2727#include "msn.h"
     28
     29int msn_chat_id;
     30GSList *msn_connections;
     31GSList *msn_switchboards;
    2832
    2933static char *msn_set_display_name( set_t *set, char *value );
     
    143147       
    144148        if( l == NULL )
    145                 for( i = 0; msn_away_state_list[i].number > -1; i ++ )
    146                         l = g_list_append( l, (void*) msn_away_state_list[i].name );
     149                for( i = 0; *msn_away_state_list[i].code; i ++ )
     150                        if( *msn_away_state_list[i].name )
     151                                l = g_list_append( l, (void*) msn_away_state_list[i].name );
    147152       
    148153        return l;
     
    153158        char buf[1024];
    154159        struct msn_data *md = ic->proto_data;
    155         const struct msn_away_state *st;
    156        
    157         if( strcmp( state, GAIM_AWAY_CUSTOM ) == 0 )
    158                 st = msn_away_state_by_name( "Away" );
     160       
     161        if( state )
     162                md->away_state = msn_away_state_by_name( state ) ? :
     163                                 msn_away_state_list + 1;
    159164        else
    160                 st = msn_away_state_by_name( state );
    161        
    162         if( !st ) st = msn_away_state_list;
    163         md->away_state = st;
    164        
    165         g_snprintf( buf, sizeof( buf ), "CHG %d %s\r\n", ++md->trId, st->code );
     165                md->away_state = msn_away_state_list;
     166       
     167        g_snprintf( buf, sizeof( buf ), "CHG %d %s\r\n", ++md->trId, md->away_state->code );
    166168        msn_write( ic, buf, strlen( buf ) );
    167169}
  • protocols/msn/msn.h

    r1c3008a re8c8d00  
    9898struct msn_away_state
    9999{
    100         int number;
    101100        char code[4];
    102101        char name[16];
     
    137136#define STATUS_SB_CHAT_SPARE    8       /* Same, but also for groupchats (not used yet). */
    138137
    139 int msn_chat_id;
     138extern int msn_chat_id;
    140139extern const struct msn_away_state msn_away_state_list[];
    141140extern const struct msn_status_code msn_status_code_list[];
     
    146145   connection), the callback should check whether it's still listed here
    147146   before doing *anything* else. */
    148 GSList *msn_connections;
    149 GSList *msn_switchboards;
     147extern GSList *msn_connections;
     148extern GSList *msn_switchboards;
    150149
    151150/* ns.c */
  • protocols/msn/msn_util.c

    r1c3008a re8c8d00  
    171171               
    172172                /* End of headers? */
    173                 if( strncmp( text + i - 2, "\n\n", 2 ) == 0 ||
    174                     strncmp( text + i - 4, "\r\n\r\n", 4 ) == 0 ||
    175                     strncmp( text + i - 2, "\r\r", 2 ) == 0 )
     173                if( ( i >= 4 && strncmp( text + i - 4, "\r\n\r\n", 4 ) == 0 ) ||
     174                    ( i >= 2 && ( strncmp( text + i - 2, "\n\n", 2 ) == 0 ||   
     175                                  strncmp( text + i - 2, "\r\r", 2 ) == 0 ) ) )
    176176                {
    177177                        break;
     
    374374        *list = NULL;
    375375       
    376         imcb_log( ic, ret->str );
     376        imcb_log( ic, "%s", ret->str );
    377377        g_string_free( ret, TRUE );
    378378}
  • protocols/msn/ns.c

    r1c3008a re8c8d00  
    229229                        }
    230230                }
    231                 else if( num_parts == 7 && strcmp( cmd[2], "OK" ) == 0 )
     231                else if( num_parts >= 7 && strcmp( cmd[2], "OK" ) == 0 )
    232232                {
    233233                        set_t *s;
    234234                       
    235                         http_decode( cmd[4] );
    236                        
    237                         strncpy( ic->displayname, cmd[4], sizeof( ic->displayname ) );
    238                         ic->displayname[sizeof(ic->displayname)-1] = 0;
    239                        
    240                         if( ( s = set_find( &ic->acc->set, "display_name" ) ) )
    241                         {
    242                                 g_free( s->value );
    243                                 s->value = g_strdup( cmd[4] );
     235                        if( num_parts == 7 )
     236                        {
     237                                http_decode( cmd[4] );
     238                               
     239                                strncpy( ic->displayname, cmd[4], sizeof( ic->displayname ) );
     240                                ic->displayname[sizeof(ic->displayname)-1] = 0;
     241                               
     242                                if( ( s = set_find( &ic->acc->set, "display_name" ) ) )
     243                                {
     244                                        g_free( s->value );
     245                                        s->value = g_strdup( cmd[4] );
     246                                }
     247                        }
     248                        else
     249                        {
     250                                imcb_log( ic, "Warning: Friendly name in server response was corrupted" );
    244251                        }
    245252                       
     
    420427                {
    421428                        /* FIXME: Warn/Bomb about unknown away state? */
    422                         st = msn_away_state_list;
    423                 }
    424                
    425                 imcb_buddy_status( ic, cmd[3], OPT_LOGGED_IN |
    426                                    ( st->number ? OPT_AWAY : 0 ), st->name, NULL );
     429                        st = msn_away_state_list + 1;
     430                }
     431               
     432                imcb_buddy_status( ic, cmd[3], OPT_LOGGED_IN |
     433                                   ( st != msn_away_state_list ? OPT_AWAY : 0 ),
     434                                   st->name, NULL );
    427435        }
    428436        else if( strcmp( cmd[0], "FLN" ) == 0 )
     
    449457                {
    450458                        /* FIXME: Warn/Bomb about unknown away state? */
    451                         st = msn_away_state_list;
    452                 }
    453                
    454                 imcb_buddy_status( ic, cmd[2], OPT_LOGGED_IN |
    455                                    ( st->number ? OPT_AWAY : 0 ), st->name, NULL );
     459                        st = msn_away_state_list + 1;
     460                }
     461               
     462                imcb_buddy_status( ic, cmd[2], OPT_LOGGED_IN |
     463                                   ( st != msn_away_state_list ? OPT_AWAY : 0 ),
     464                                   st->name, NULL );
    456465        }
    457466        else if( strcmp( cmd[0], "RNG" ) == 0 )
     
    663672                                }
    664673                               
    665                                 if( arg1 ) g_free( arg1 );
    666                                 if( mtype ) g_free( mtype );
     674                                g_free( arg1 );
     675                                g_free( mtype );
    667676                        }
    668677                        else if( g_strncasecmp( ct, "text/x-msmsgsprofile", 20 ) == 0 )
     
    672681                        else if( g_strncasecmp( ct, "text/x-msmsgsinitialemailnotification", 37 ) == 0 )
    673682                        {
    674                                 char *inbox = msn_findheader( body, "Inbox-Unread:", blen );
    675                                 char *folders = msn_findheader( body, "Folders-Unread:", blen );
    676                                
    677                                 if( inbox && folders && set_getbool( &ic->acc->set, "mail_notifications" ) )
     683                                if( set_getbool( &ic->acc->set, "mail_notifications" ) )
    678684                                {
    679                                         imcb_log( ic, "INBOX contains %s new messages, plus %s messages in other folders.", inbox, folders );
     685                                        char *inbox = msn_findheader( body, "Inbox-Unread:", blen );
     686                                        char *folders = msn_findheader( body, "Folders-Unread:", blen );
     687
     688                                        if( inbox && folders )
     689                                                imcb_log( ic, "INBOX contains %s new messages, plus %s messages in other folders.", inbox, folders );
     690                                       
     691                                        g_free( inbox );
     692                                        g_free( folders );
    680693                                }
    681                                
    682                                 g_free( inbox );
    683                                 g_free( folders );
    684694                        }
    685695                        else if( g_strncasecmp( ct, "text/x-msmsgsemailnotification", 30 ) == 0 )
    686696                        {
    687                                 char *from = msn_findheader( body, "From-Addr:", blen );
    688                                 char *fromname = msn_findheader( body, "From:", blen );
    689                                
    690                                 if( from && fromname && set_getbool( &ic->acc->set, "mail_notifications" ) )
     697                                if( set_getbool( &ic->acc->set, "mail_notifications" ) )
    691698                                {
    692                                         imcb_log( ic, "Received an e-mail message from %s <%s>.", fromname, from );
     699                                        char *from = msn_findheader( body, "From-Addr:", blen );
     700                                        char *fromname = msn_findheader( body, "From:", blen );
     701                                       
     702                                        if( from && fromname )
     703                                                imcb_log( ic, "Received an e-mail message from %s <%s>.", fromname, from );
     704
     705                                        g_free( from );
     706                                        g_free( fromname );
    693707                                }
    694708                        }
  • protocols/msn/tables.c

    r1c3008a re8c8d00  
    2929const struct msn_away_state msn_away_state_list[] =
    3030{
    31         {  0, "NLN", "Available" },
    32         {  1, "BSY", "Busy" },
    33         {  3, "IDL", "Idle" },
    34         {  5, "BRB", "Be Right Back" },
    35         {  7, "AWY", "Away" },
    36         {  9, "PHN", "On the Phone" },
    37         { 11, "LUN", "Out to Lunch" },
    38         { 13, "HDN", "Hidden" },
    39         { -1, "",    "" }
     31        { "NLN", "" },
     32        { "AWY", "Away" },
     33        { "BSY", "Busy" },
     34        { "IDL", "Idle" },
     35        { "BRB", "Be Right Back" },
     36        { "PHN", "On the Phone" },
     37        { "LUN", "Out to Lunch" },
     38        { "HDN", "Hidden" },
     39        { "",    "" }
    4040};
    41 
    42 const struct msn_away_state *msn_away_state_by_number( int number )
    43 {
    44         int i;
    45        
    46         for( i = 0; msn_away_state_list[i].number > -1; i ++ )
    47                 if( msn_away_state_list[i].number == number )
    48                         return( msn_away_state_list + i );
    49        
    50         return( NULL );
    51 }
    5241
    5342const struct msn_away_state *msn_away_state_by_code( char *code )
     
    5544        int i;
    5645       
    57         for( i = 0; msn_away_state_list[i].number > -1; i ++ )
     46        for( i = 0; *msn_away_state_list[i].code; i ++ )
    5847                if( g_strcasecmp( msn_away_state_list[i].code, code ) == 0 )
    5948                        return( msn_away_state_list + i );
    6049       
    61         return( NULL );
     50        return NULL;
    6251}
    6352
     
    6655        int i;
    6756       
    68         for( i = 0; msn_away_state_list[i].number > -1; i ++ )
     57        for( i = 0; *msn_away_state_list[i].code; i ++ )
    6958                if( g_strcasecmp( msn_away_state_list[i].name, name ) == 0 )
    7059                        return( msn_away_state_list + i );
    7160       
    72         return( NULL );
     61        return NULL;
    7362}
    7463
Note: See TracChangeset for help on using the changeset viewer.