Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn.c

    r5b52a48 r54794b8  
    2727#include "msn.h"
    2828
    29 static char *msn_set_display_name( set_t *set, char *value );
    30 
    31 static void msn_acc_init( account_t *acc )
    32 {
    33         set_t *s;
    34        
    35         s = set_add( &acc->set, "display_name", NULL, msn_set_display_name, acc );
    36         s->flags |= ACC_SET_NOSAVE | ACC_SET_ONLINE_ONLY;
    37 }
    38 
    39 static void msn_login( account_t *acc )
    40 {
    41         struct gaim_connection *gc = new_gaim_conn( acc );
     29static void msn_login( struct aim_user *acct )
     30{
     31        struct gaim_connection *gc = new_gaim_conn( acct );
    4232        struct msn_data *md = g_new0( struct msn_data, 1 );
    4333       
     
    4737        md->fd = -1;
    4838       
    49         if( strchr( acc->user, '@' ) == NULL )
     39        if( strchr( acct->username, '@' ) == NULL )
    5040        {
    5141                hide_login_progress( gc, "Invalid account name" );
     
    10595                }
    10696               
     97                while( md->groupcount > 0 )
     98                        g_free( md->grouplist[--md->groupcount] );
    10799                g_free( md->grouplist );
    108100               
     
    220212static void msn_set_info( struct gaim_connection *gc, char *info )
    221213{
    222         msn_set_display_name( set_find( &gc->acc->set, "display_name" ), info );
     214        char buf[1024], *fn;
     215        struct msn_data *md = gc->proto_data;
     216       
     217        if( strlen( info ) > 129 )
     218        {
     219                do_error_dialog( gc, "Maximum name length exceeded", "MSN" );
     220                return;
     221        }
     222       
     223        fn = msn_http_encode( info );
     224       
     225        g_snprintf( buf, sizeof( buf ), "REA %d %s %s\r\n", ++md->trId, gc->username, fn );
     226        msn_write( gc, buf, strlen( buf ) );
     227        g_free( fn );
    223228}
    224229
     
    359364}
    360365
    361 static char *msn_set_display_name( set_t *set, char *value )
    362 {
    363         account_t *acc = set->data;
    364         struct gaim_connection *gc = acc->gc;
    365         struct msn_data *md;
    366         char buf[1024], *fn, *s;
    367         int i;
    368        
    369         /* Double-check. */
    370         if( gc == NULL )
    371                 return NULL;
    372        
    373         md = gc->proto_data;
    374        
    375         if( strlen( value ) > 129 )
    376         {
    377                 serv_got_crap( gc, "Maximum name length exceeded" );
    378                 return NULL;
    379         }
    380        
    381         /* Of course we could use http_encode() here, but when we encode
    382            every character, the server is less likely to complain about the
    383            chosen name. However, the MSN server doesn't seem to like escaped
    384            non-ASCII chars, so we keep those unescaped. */
    385         s = fn = g_new0( char, strlen( value ) * 3 + 1 );
    386         for( i = 0; value[i]; i ++ )
    387                 if( value[i] & 128 )
    388                 {
    389                         *s = value[i];
    390                         s ++;
    391                 }
    392                 else
    393                 {
    394                         g_snprintf( s, 4, "%%%02X", value[i] );
    395                         s += 3;
    396                 }
    397        
    398         g_snprintf( buf, sizeof( buf ), "REA %d %s %s\r\n", ++md->trId, gc->username, fn );
    399         msn_write( gc, buf, strlen( buf ) );
    400         g_free( fn );
    401        
    402         /* Returning NULL would be better, because the server still has to
    403            confirm the name change. However, it looks a bit confusing to the
    404            user. */
    405         return value;
    406 }
    407 
    408366void msn_init()
    409367{
    410368        struct prpl *ret = g_new0(struct prpl, 1);
    411        
    412369        ret->name = "msn";
    413370        ret->login = msn_login;
    414         ret->acc_init = msn_acc_init;
    415371        ret->close = msn_close;
    416372        ret->send_im = msn_send_im;
     
    432388        ret->rem_deny = msn_rem_deny;
    433389        ret->send_typing = msn_send_typing;
    434         ret->handle_cmp = g_strcasecmp;
     390        ret->cmp_buddynames = g_strcasecmp;
    435391
    436392        register_protocol(ret);
Note: See TracChangeset for help on using the changeset viewer.