aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/msn/ns.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-04-10 00:16:38 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2010-04-10 00:16:38 +0100
commit9bf248155cb870be9dce921d58c905f5a5c1dad3 (patch)
treed8762898f3cbd7f1496ffa4a81968252a9e32b09 /protocols/msn/ns.c
parentc4bc92a42001a05a36678ae14f610ff3857be465 (diff)
First stab at MSN keepalives.
Only kicks in if the user goes offline during a conversation.
Diffstat (limited to 'protocols/msn/ns.c')
-rw-r--r--protocols/msn/ns.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/protocols/msn/ns.c b/protocols/msn/ns.c
index d78d753a..1f6f8c74 100644
--- a/protocols/msn/ns.c
+++ b/protocols/msn/ns.c
@@ -435,12 +435,25 @@ static int msn_ns_command( gpointer data, char **cmd, int num_parts )
}
else if( strcmp( cmd[0], "FLN" ) == 0 )
{
- if( cmd[1] )
- imcb_buddy_status( ic, cmd[1], 0, NULL, NULL );
+ struct msn_switchboard *sb;
+
+ if( cmd[1] == NULL )
+ return 1;
+
+ imcb_buddy_status( ic, cmd[1], 0, NULL, NULL );
+
+ if( ( sb = msn_sb_by_handle( ic, cmd[1] ) ) &&
+ set_getbool( &ic->acc->set, "switchboard_keepalives" ) &&
+ sb->keepalive == 0 )
+ {
+ msn_sb_keepalive( sb, 0, 0 );
+ sb->keepalive = b_timeout_add( 20000, msn_sb_keepalive, sb );
+ }
}
else if( strcmp( cmd[0], "NLN" ) == 0 )
{
const struct msn_away_state *st;
+ struct msn_switchboard *sb;
if( num_parts != 5 )
{
@@ -462,6 +475,12 @@ static int msn_ns_command( gpointer data, char **cmd, int num_parts )
imcb_buddy_status( ic, cmd[2], OPT_LOGGED_IN |
( st != msn_away_state_list ? OPT_AWAY : 0 ),
st->name, NULL );
+
+ if( ( sb = msn_sb_by_handle( ic, cmd[1] ) ) && sb->keepalive > 0 )
+ {
+ b_event_remove( sb->keepalive );
+ sb->keepalive = 0;
+ }
}
else if( strcmp( cmd[0], "RNG" ) == 0 )
{