diff options
author | Eduardo Chappa <chappa@washington.edu> | 2018-05-27 15:48:21 -0600 |
---|---|---|
committer | Eduardo Chappa <chappa@washington.edu> | 2018-05-27 15:48:21 -0600 |
commit | 2e72300b0d571c2b319e0e5c827ddc45f011f964 (patch) | |
tree | 1ab904e5965602e4565497dd51bc3af2a46681da /alpine | |
parent | ae67ebf820817f01e77471b5bc7da9885b159bba (diff) | |
download | alpine-2e72300b0d571c2b319e0e5c827ddc45f011f964.tar.xz |
* Add new variable close-connection-timeout, which tells Alpine to close
a connection that is having problems being kept alive after the
number of seconds configured in this variable, if the connection has
not recovered. The default is 0, which means to keep the connection
alive and wait for the connection to recover.
Diffstat (limited to 'alpine')
-rw-r--r-- | alpine/confscroll.c | 12 | ||||
-rw-r--r-- | alpine/imap.c | 9 |
2 files changed, 21 insertions, 0 deletions
diff --git a/alpine/confscroll.c b/alpine/confscroll.c index 0d932f4c..ff8841fe 100644 --- a/alpine/confscroll.c +++ b/alpine/confscroll.c @@ -350,6 +350,7 @@ exclude_config_var(struct pine *ps, struct variable *var, int allow_hard_to_conf case V_TCPREADWARNTIMEO : case V_TCPWRITEWARNTIMEO : case V_TCPQUERYTIMEO : + case V_QUITQUERYTIMEO : case V_RSHCMD : case V_RSHPATH : case V_RSHOPENTIMEO : @@ -1608,6 +1609,10 @@ text_toolit(struct pine *ps, int cmd, CONF_S **cl, unsigned int flags, int look_ lowrange = 5; hirange = 1000; } + else if((*cl)->var == &ps->vars[V_QUITQUERYTIMEO]){ + lowrange = 0; + hirange = 1000; + } else if((*cl)->var == &ps->vars[V_TCPWRITEWARNTIMEO] || (*cl)->var == &ps->vars[V_RSHOPENTIMEO] || (*cl)->var == &ps->vars[V_SSHOPENTIMEO] || @@ -5432,6 +5437,12 @@ fix_side_effects(struct pine *ps, struct variable *var, int revert) if(ps->VAR_TCPQUERYTIMEO && SVAR_TCP_QUERY(ps, val, tmp_20k_buf, SIZEOF_20KBUF)) q_status_message(SM_ORDER, 3, 5, tmp_20k_buf); } + else if(var == &ps->vars[V_QUITQUERYTIMEO]){ + val = 0; + if(!revert) + if(ps->VAR_QUITQUERYTIMEO && SVAR_QUIT_QUERY_TIMEO(ps, val, tmp_20k_buf, SIZEOF_20KBUF)) + q_status_message(SM_ORDER, 3, 5, tmp_20k_buf); + } else if(var == &ps->vars[V_RSHOPENTIMEO]){ val = 15; if(!revert) @@ -5769,6 +5780,7 @@ fix_side_effects(struct pine *ps, struct variable *var, int revert) var == &ps->vars[V_TCPREADWARNTIMEO] || var == &ps->vars[V_TCPWRITEWARNTIMEO] || var == &ps->vars[V_TCPQUERYTIMEO] || + var == &ps->vars[V_QUITQUERYTIMEO] || var == &ps->vars[V_RSHOPENTIMEO] || var == &ps->vars[V_SSHOPENTIMEO])) q_status_message(SM_ASYNC, 0, 3, diff --git a/alpine/imap.c b/alpine/imap.c index 48ee3606..54e6b253 100644 --- a/alpine/imap.c +++ b/alpine/imap.c @@ -1259,6 +1259,15 @@ pine_tcptimeout(long int elapsed, long int sincelast, char *host) if(ps_global->noshow_timeout) return(rv); + if(ps_global->can_interrupt + && ps_global->close_connection_timeout > 0L + && elapsed >= (long)ps_global->tcp_query_timeout + && elapsed >= (long)ps_global->close_connection_timeout){ + ps_global->read_bail = 0; + ps_global->user_says_cancel = 1; + return 0; + } + if(!ps_global->ttyo) return(pine_tcptimeout_noscreen(elapsed, sincelast, host)); |