Changeset e3413cc
- Timestamp:
- 2010-03-30T01:30:19Z (15 years ago)
- Branches:
- master
- Children:
- 7815a2b
- Parents:
- c4bc92a
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/user-guide/commands.xml
rc4bc92a re3413cc 609 609 </bitlbee-setting> 610 610 611 <bitlbee-setting name="local_display_name" type="boolean" scope="account"> 612 <default>false</default> 613 614 <description> 615 <para> 616 Mostly meant to work around a bug in MSN servers (forgetting the display name set by the user), this setting tells BitlBee to store your display name locally and set this name on the MSN servers when connecting. 617 </para> 618 </description> 619 620 </bitlbee-setting> 621 611 622 <bitlbee-setting name="mail_notifications" type="boolean" scope="account"> 612 623 <default>false</default> -
protocols/msn/msn.c
rc4bc92a re3413cc 31 31 GSList *msn_switchboards; 32 32 33 static char * msn_set_display_name( set_t *set, char *value );33 static char *set_eval_display_name( set_t *set, char *value ); 34 34 35 35 static void msn_init( account_t *acc ) 36 36 { 37 set_t *s; 38 39 s = set_add( &acc->set, "display_name", NULL, msn_set_display_name, acc ); 40 s->flags |= ACC_SET_NOSAVE | ACC_SET_ONLINE_ONLY; 41 42 s = set_add( &acc->set, "mail_notifications", "false", set_eval_bool, acc ); 37 set_add( &acc->set, "display_name", NULL, set_eval_display_name, acc ); 38 set_add( &acc->set, "local_display_name", "false", set_eval_bool, acc ); 39 set_add( &acc->set, "mail_notifications", "false", set_eval_bool, acc ); 43 40 } 44 41 … … 167 164 static void msn_set_my_name( struct im_connection *ic, char *info ) 168 165 { 169 msn_set_display_name( set_find( &ic->acc->set, "display_name" ), info );166 msn_set_display_name( ic, info ); 170 167 } 171 168 … … 283 280 } 284 281 285 static char * msn_set_display_name( set_t *set, char *value )282 static char *set_eval_display_name( set_t *set, char *value ) 286 283 { 287 284 account_t *acc = set->data; 288 285 struct im_connection *ic = acc->ic; 289 struct msn_data *md; 290 char buf[1024], *fn; 291 292 /* Double-check. */ 286 287 /* Allow any name if we're offline. */ 293 288 if( ic == NULL ) 294 return NULL; 295 296 md = ic->proto_data; 289 return value; 297 290 298 291 if( strlen( value ) > 129 ) … … 301 294 return NULL; 302 295 } 303 304 fn = msn_http_encode( value );305 306 g_snprintf( buf, sizeof( buf ), "REA %d %s %s\r\n", ++md->trId, ic->acc->user, fn );307 msn_write( ic, buf, strlen( buf ) );308 g_free( fn );309 296 310 297 /* Returning NULL would be better, because the server still has to 311 298 confirm the name change. However, it looks a bit confusing to the 312 299 user. */ 313 return value;300 return msn_set_display_name( ic, value ) ? value : NULL; 314 301 } 315 302 -
protocols/msn/msn.h
rc4bc92a re3413cc 161 161 char *msn_http_encode( const char *input ); 162 162 void msn_msgq_purge( struct im_connection *ic, GSList **list ); 163 gboolean msn_set_display_name( struct im_connection *ic, const char *rawname ); 163 164 164 165 /* tables.c */ -
protocols/msn/msn_util.c
rc4bc92a re3413cc 38 38 imcb_error( ic, "Short write() to main server" ); 39 39 imc_logout( ic, TRUE ); 40 return ( 0 );41 } 42 43 return ( 1 );40 return 0; 41 } 42 43 return 1; 44 44 } 45 45 … … 377 377 g_string_free( ret, TRUE ); 378 378 } 379 380 gboolean msn_set_display_name( struct im_connection *ic, const char *rawname ) 381 { 382 char *fn = msn_http_encode( rawname ); 383 struct msn_data *md = ic->proto_data; 384 char buf[1024]; 385 386 g_snprintf( buf, sizeof( buf ), "REA %d %s %s\r\n", ++md->trId, ic->acc->user, fn ); 387 g_free( fn ); 388 389 return msn_write( ic, buf, strlen( buf ) ) != 0; 390 } -
protocols/msn/ns.c
rc4bc92a re3413cc 35 35 36 36 static void msn_auth_got_passport_token( struct msn_auth_data *mad ); 37 static gboolean msn_ns_got_display_name( struct im_connection *ic, char *name ); 37 38 38 39 gboolean msn_ns_connected( gpointer data, gint source, b_input_condition cond ) … … 231 232 else if( num_parts >= 7 && strcmp( cmd[2], "OK" ) == 0 ) 232 233 { 233 set_t *s;234 235 234 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 } 235 msn_ns_got_display_name( ic, cmd[4] ); 248 236 else 249 {250 237 imcb_log( ic, "Warning: Friendly name in server response was corrupted" ); 251 }252 238 253 239 imcb_log( ic, "Authenticated, getting buddy list" ); … … 567 553 return( 0 ); 568 554 } 555 #if 0 556 /* Discard this one completely for now since I don't care about the ack 557 and since MSN servers can apparently screw up the formatting. */ 569 558 else if( strcmp( cmd[0], "REA" ) == 0 ) 570 559 { … … 597 586 } 598 587 } 588 #endif 599 589 else if( strcmp( cmd[0], "IPG" ) == 0 ) 600 590 { … … 746 736 } 747 737 } 738 739 static gboolean msn_ns_got_display_name( struct im_connection *ic, char *name ) 740 { 741 set_t *s; 742 743 if( ( s = set_find( &ic->acc->set, "display_name" ) ) == NULL ) 744 return FALSE; /* Shouldn't happen.. */ 745 746 http_decode( name ); 747 748 if( s->value && strcmp( s->value, name ) == 0 ) 749 { 750 return TRUE; 751 /* The names match, nothing to worry about. */ 752 } 753 else if( s->value != NULL && 754 ( strcmp( name, ic->acc->user ) == 0 || 755 set_getbool( &ic->acc->set, "local_display_name" ) ) ) 756 { 757 /* The server thinks our display name is our e-mail address 758 which is probably wrong, or the user *wants* us to do this: 759 Always use the locally set display_name. */ 760 return msn_set_display_name( ic, s->value ); 761 } 762 else 763 { 764 if( s->value && *s->value ) 765 imcb_log( ic, "BitlBee thinks your display name is `%s' but " 766 "the MSN server says it's `%s'. Using the MSN " 767 "server's name. Set local_display_name to true " 768 "to use the local name.", s->value, name ); 769 770 g_free( s->value ); 771 s->value = g_strdup( name ); 772 return TRUE; 773 } 774 }
Note: See TracChangeset
for help on using the changeset viewer.