Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn.c

    r54794b8 r5b52a48  
    2727#include "msn.h"
    2828
    29 static void msn_login( struct aim_user *acct )
    30 {
    31         struct gaim_connection *gc = new_gaim_conn( acct );
     29static char *msn_set_display_name( set_t *set, char *value );
     30
     31static 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
     39static void msn_login( account_t *acc )
     40{
     41        struct gaim_connection *gc = new_gaim_conn( acc );
    3242        struct msn_data *md = g_new0( struct msn_data, 1 );
    3343       
     
    3747        md->fd = -1;
    3848       
    39         if( strchr( acct->username, '@' ) == NULL )
     49        if( strchr( acc->user, '@' ) == NULL )
    4050        {
    4151                hide_login_progress( gc, "Invalid account name" );
     
    95105                }
    96106               
    97                 while( md->groupcount > 0 )
    98                         g_free( md->grouplist[--md->groupcount] );
    99107                g_free( md->grouplist );
    100108               
     
    212220static void msn_set_info( struct gaim_connection *gc, char *info )
    213221{
    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 );
     222        msn_set_display_name( set_find( &gc->acc->set, "display_name" ), info );
    228223}
    229224
     
    364359}
    365360
     361static 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
    366408void msn_init()
    367409{
    368410        struct prpl *ret = g_new0(struct prpl, 1);
     411       
    369412        ret->name = "msn";
    370413        ret->login = msn_login;
     414        ret->acc_init = msn_acc_init;
    371415        ret->close = msn_close;
    372416        ret->send_im = msn_send_im;
     
    388432        ret->rem_deny = msn_rem_deny;
    389433        ret->send_typing = msn_send_typing;
    390         ret->cmp_buddynames = g_strcasecmp;
     434        ret->handle_cmp = g_strcasecmp;
    391435
    392436        register_protocol(ret);
Note: See TracChangeset for help on using the changeset viewer.