- Timestamp:
- 2010-04-16T09:58:22Z (15 years ago)
- Branches:
- master
- Children:
- 0f84234
- Parents:
- b6190ca (diff), bb839e8 (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. - Location:
- protocols/msn
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/msn/msn.c
rb6190ca refbc154 38 38 set_add( &acc->set, "local_display_name", "false", set_eval_bool, acc ); 39 39 set_add( &acc->set, "mail_notifications", "false", set_eval_bool, acc ); 40 set_add( &acc->set, "switchboard_keepalives", "false", set_eval_bool, acc ); 40 41 } 41 42 -
protocols/msn/msn.h
rb6190ca refbc154 31 31 #define TYPING_NOTIFICATION_MESSAGE "\r\r\rBEWARE, ME R TYPINK MESSAGE!!!!\r\r\r" 32 32 #define GROUPCHAT_SWITCHBOARD_MESSAGE "\r\r\rME WANT TALK TO MANY PEOPLE\r\r\r" 33 #define SB_KEEPALIVE_MESSAGE "\r\r\rDONT HANG UP ON ME!\r\r\r" 33 34 34 35 #ifdef DEBUG_MSN … … 53 54 "TypingUser: %s\r\n" \ 54 55 "\r\n\r\n" 56 57 #define SB_KEEPALIVE_HEADERS "MIME-Version: 1.0\r\n" \ 58 "Content-Type: text/x-ping\r\n" \ 59 "\r\n\r\n" 55 60 56 61 #define PROFILE_URL "http://members.msn.com/" … … 83 88 gint inp; 84 89 struct msn_handler_data *handler; 90 gint keepalive; 85 91 86 92 int trId; … … 180 186 gboolean msn_sb_connected( gpointer data, gint source, b_input_condition cond ); 181 187 int msn_sb_write_msg( struct im_connection *ic, struct msn_message *m ); 188 void msn_sb_start_keepalives( struct msn_switchboard *sb, gboolean initial ); 189 void msn_sb_stop_keepalives( struct msn_switchboard *sb ); 182 190 183 191 #endif //_MSN_H -
protocols/msn/ns.c
rb6190ca refbc154 422 422 else if( strcmp( cmd[0], "FLN" ) == 0 ) 423 423 { 424 if( cmd[1] ) 425 imcb_buddy_status( ic, cmd[1], 0, NULL, NULL ); 424 if( cmd[1] == NULL ) 425 return 1; 426 427 imcb_buddy_status( ic, cmd[1], 0, NULL, NULL ); 428 429 msn_sb_start_keepalives( msn_sb_by_handle( ic, cmd[1] ), TRUE ); 426 430 } 427 431 else if( strcmp( cmd[0], "NLN" ) == 0 ) … … 449 453 ( st != msn_away_state_list ? OPT_AWAY : 0 ), 450 454 st->name, NULL ); 455 456 msn_sb_stop_keepalives( msn_sb_by_handle( ic, cmd[2] ) ); 451 457 } 452 458 else if( strcmp( cmd[0], "RNG" ) == 0 ) -
protocols/msn/sb.c
rb6190ca refbc154 168 168 169 169 /* Build the message. Convert LF to CR-LF for normal messages. */ 170 if( strcmp( text, TYPING_NOTIFICATION_MESSAGE ) != 0 ) 170 if( strcmp( text, TYPING_NOTIFICATION_MESSAGE ) == 0 ) 171 { 172 i = strlen( MSN_TYPING_HEADERS ) + strlen( sb->ic->acc->user ); 173 buf = g_new0( char, i ); 174 i = g_snprintf( buf, i, MSN_TYPING_HEADERS, sb->ic->acc->user ); 175 } 176 else if( strcmp( text, SB_KEEPALIVE_MESSAGE ) == 0 ) 177 { 178 buf = g_strdup( SB_KEEPALIVE_HEADERS ); 179 i = strlen( buf ); 180 } 181 else 171 182 { 172 183 buf = g_new0( char, sizeof( MSN_MESSAGE_HEADERS ) + strlen( text ) * 2 + 1 ); … … 182 193 } 183 194 } 184 else185 {186 i = strlen( MSN_TYPING_HEADERS ) + strlen( sb->ic->acc->user );187 buf = g_new0( char, i );188 i = g_snprintf( buf, i, MSN_TYPING_HEADERS, sb->ic->acc->user );189 }190 195 191 196 /* Build the final packet (MSG command + the message). */ … … 250 255 251 256 msn_msgq_purge( ic, &sb->msgq ); 257 msn_sb_stop_keepalives( sb ); 252 258 253 259 if( sb->key ) g_free( sb->key ); … … 471 477 472 478 sb->ready = 1; 479 480 msn_sb_start_keepalives( sb, FALSE ); 473 481 } 474 482 else if( strcmp( cmd[0], "CAL" ) == 0 ) … … 520 528 } 521 529 530 msn_sb_start_keepalives( sb, FALSE ); 531 522 532 return( st ); 523 533 } … … 581 591 if( sb->who ) 582 592 { 593 msn_sb_stop_keepalives( sb ); 594 583 595 /* This is a single-person chat, and the other person is leaving. */ 584 596 g_free( sb->who ); … … 764 776 return( 1 ); 765 777 } 778 779 static gboolean msn_sb_keepalive( gpointer data, gint source, b_input_condition cond ) 780 { 781 struct msn_switchboard *sb = data; 782 return sb->ready && msn_sb_sendmessage( sb, SB_KEEPALIVE_MESSAGE ); 783 } 784 785 void msn_sb_start_keepalives( struct msn_switchboard *sb, gboolean initial ) 786 { 787 struct buddy *b; 788 789 if( sb && sb->who && sb->keepalive == 0 && 790 ( b = imcb_find_buddy( sb->ic, sb->who ) ) && !b->present && 791 set_getbool( &sb->ic->acc->set, "switchboard_keepalives" ) ) 792 { 793 if( initial ) 794 msn_sb_keepalive( sb, 0, 0 ); 795 796 sb->keepalive = b_timeout_add( 20000, msn_sb_keepalive, sb ); 797 } 798 } 799 800 void msn_sb_stop_keepalives( struct msn_switchboard *sb ) 801 { 802 if( sb && sb->keepalive > 0 ) 803 { 804 b_event_remove( sb->keepalive ); 805 sb->keepalive = 0; 806 } 807 }
Note: See TracChangeset
for help on using the changeset viewer.