Commit 93053fe45f4810c9c6cfb00bf2b049e49ca44289
1 parent
aba431be
Exists in
master
and in
3 other branches
Refactoring and centralizing auto-reconnect feature.
Showing
5 changed files
with
44 additions
and
24 deletions
Show diff stats
src/core/connect.c
| ... | ... | @@ -83,19 +83,15 @@ |
| 83 | 83 | |
| 84 | 84 | LIB3270_POPUP popup = { |
| 85 | 85 | .name = "CantConnect", |
| 86 | - .title = _( "Connection failed" ), | |
| 86 | +// .title = _( "Connection failed" ), | |
| 87 | 87 | .type = LIB3270_NOTIFY_INFO, |
| 88 | 88 | .summary = summary, |
| 89 | 89 | .body = message, |
| 90 | 90 | .label = _("Try again") |
| 91 | 91 | }; |
| 92 | 92 | |
| 93 | -// if(hSession->cbk.popup_show(hSession,&popup,lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECONNECT) && !hSession->auto_reconnect_inprogress) == 0) { | |
| 94 | - if(hSession->cbk.popup_show(hSession,&popup,!hSession->auto_reconnect_inprogress) == 0) { | |
| 95 | - // Schedule an automatic reconnection. | |
| 96 | - hSession->auto_reconnect_inprogress = 1; | |
| 97 | - (void) AddTimer(1000, hSession, lib3270_check_for_auto_reconnect); | |
| 98 | - } | |
| 93 | + if(hSession->cbk.popup_show(hSession,&popup,!hSession->auto_reconnect_inprogress) == 0) | |
| 94 | + lib3270_activate_auto_reconnect(hSession,1000); | |
| 99 | 95 | |
| 100 | 96 | } |
| 101 | 97 | ... | ... |
src/core/host.c
| ... | ... | @@ -64,7 +64,7 @@ |
| 64 | 64 | /** |
| 65 | 65 | * @brief Called from timer to attempt an automatic reconnection. |
| 66 | 66 | */ |
| 67 | -int lib3270_check_for_auto_reconnect(H3270 *hSession) | |
| 67 | +static int check_for_auto_reconnect(H3270 *hSession) | |
| 68 | 68 | { |
| 69 | 69 | |
| 70 | 70 | if(hSession->auto_reconnect_inprogress) |
| ... | ... | @@ -78,6 +78,27 @@ int lib3270_check_for_auto_reconnect(H3270 *hSession) |
| 78 | 78 | return 0; |
| 79 | 79 | } |
| 80 | 80 | |
| 81 | +/** | |
| 82 | + * @brief Activate auto-reconnect timer. | |
| 83 | + * | |
| 84 | + * @param hSession TN3270 Session handle. | |
| 85 | + * @param msec Time to reconnect. | |
| 86 | + * | |
| 87 | + * @return 0 if ok or error code if not. | |
| 88 | + * | |
| 89 | + * @retval EBUSY Auto reconnect is already active. | |
| 90 | + */ | |
| 91 | +int lib3270_activate_auto_reconnect(H3270 *hSession, unsigned long msec) | |
| 92 | +{ | |
| 93 | + if(hSession->auto_reconnect_inprogress) | |
| 94 | + return EBUSY; | |
| 95 | + | |
| 96 | + hSession->auto_reconnect_inprogress = 1; | |
| 97 | + (void) AddTimer(msec, hSession, check_for_auto_reconnect); | |
| 98 | + | |
| 99 | + return 0; | |
| 100 | +} | |
| 101 | + | |
| 81 | 102 | LIB3270_EXPORT int lib3270_disconnect(H3270 *h) |
| 82 | 103 | { |
| 83 | 104 | return host_disconnect(h,0); |
| ... | ... | @@ -95,12 +116,8 @@ int host_disconnect(H3270 *hSession, int failed) |
| 95 | 116 | |
| 96 | 117 | trace("Disconnected (Failed: %d Reconnect: %d in_progress: %d)",failed,lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECONNECT),hSession->auto_reconnect_inprogress); |
| 97 | 118 | |
| 98 | - if(failed && lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECONNECT) && !hSession->auto_reconnect_inprogress) | |
| 99 | - { | |
| 100 | - /* Schedule an automatic reconnection. */ | |
| 101 | - hSession->auto_reconnect_inprogress = 1; | |
| 102 | - (void) AddTimer(failed ? RECONNECT_ERR_MS : RECONNECT_MS, hSession, lib3270_check_for_auto_reconnect); | |
| 103 | - } | |
| 119 | + if(failed && lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECONNECT)) | |
| 120 | + lib3270_activate_auto_reconnect(hSession,failed ? RECONNECT_ERR_MS : RECONNECT_MS); | |
| 104 | 121 | |
| 105 | 122 | /* |
| 106 | 123 | * Remember a disconnect from ANSI mode, to keep screen tracing | ... | ... |
src/core/telnet.c
| ... | ... | @@ -2223,12 +2223,11 @@ static const char * cmd(int c) |
| 2223 | 2223 | return nnn(c); |
| 2224 | 2224 | } |
| 2225 | 2225 | |
| 2226 | -/* | |
| 2227 | - * opt | |
| 2228 | - * Expands a TELNET option into a character string. | |
| 2226 | +/*** | |
| 2227 | + * | |
| 2228 | + * @brief Expands a TELNET option into a character string. | |
| 2229 | 2229 | */ |
| 2230 | -static const char * | |
| 2231 | -opt(unsigned char c) | |
| 2230 | +static const char * opt(unsigned char c) | |
| 2232 | 2231 | { |
| 2233 | 2232 | if (TELOPT_OK(c)) |
| 2234 | 2233 | return TELOPT(c); | ... | ... |
src/include/internals.h
| ... | ... | @@ -753,11 +753,6 @@ LIB3270_INTERNAL int do_select(H3270 *h, unsigned int start, unsigned int end, |
| 753 | 753 | |
| 754 | 754 | LIB3270_INTERNAL void connection_failed(H3270 *hSession, const char *message); |
| 755 | 755 | |
| 756 | -/** | |
| 757 | - * @brief Called from timer to attempt an automatic reconnection. | |
| 758 | - */ | |
| 759 | -LIB3270_INTERNAL int lib3270_check_for_auto_reconnect(H3270 *hSession); | |
| 760 | - | |
| 761 | 756 | #if defined(DEBUG) |
| 762 | 757 | #define CHECK_SESSION_HANDLE(x) check_session_handle(&x,__FUNCTION__); |
| 763 | 758 | LIB3270_INTERNAL void check_session_handle(H3270 **hSession, const char *fname); |
| ... | ... | @@ -766,6 +761,18 @@ LIB3270_INTERNAL int lib3270_check_for_auto_reconnect(H3270 *hSession); |
| 766 | 761 | LIB3270_INTERNAL void check_session_handle(H3270 **hSession); |
| 767 | 762 | #endif // DEBUG |
| 768 | 763 | |
| 764 | +/** | |
| 765 | + * @brief Activate auto-reconnect timer. | |
| 766 | + * | |
| 767 | + * @param hSession TN3270 Session handle. | |
| 768 | + * @param msec Time to reconnect. | |
| 769 | + * | |
| 770 | + * @return 0 if ok or error code if not. | |
| 771 | + * | |
| 772 | + * @retval EBUSY Auto reconnect is already active. | |
| 773 | + */ | |
| 774 | +LIB3270_INTERNAL int lib3270_activate_auto_reconnect(H3270 *hSession, unsigned long msec); | |
| 775 | + | |
| 769 | 776 | LIB3270_INTERNAL int check_online_session(const H3270 *hSession); |
| 770 | 777 | LIB3270_INTERNAL int check_offline_session(const H3270 *hSession); |
| 771 | 778 | ... | ... |
src/ssl/state.c
| ... | ... | @@ -78,6 +78,7 @@ void set_ssl_state(H3270 *hSession, LIB3270_SSL_STATE state) |
| 78 | 78 | |
| 79 | 79 | hSession->ssl.state = state; |
| 80 | 80 | trace_dsn(hSession,"SSL state changes to %d\n",(int) state); |
| 81 | + debug("SSL state changes to %d\n",(int) state); | |
| 81 | 82 | |
| 82 | 83 | hSession->cbk.update_ssl(hSession,hSession->ssl.state); |
| 83 | 84 | } | ... | ... |