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,19 +83,15 @@ | ||
83 | 83 | ||
84 | LIB3270_POPUP popup = { | 84 | LIB3270_POPUP popup = { |
85 | .name = "CantConnect", | 85 | .name = "CantConnect", |
86 | - .title = _( "Connection failed" ), | 86 | +// .title = _( "Connection failed" ), |
87 | .type = LIB3270_NOTIFY_INFO, | 87 | .type = LIB3270_NOTIFY_INFO, |
88 | .summary = summary, | 88 | .summary = summary, |
89 | .body = message, | 89 | .body = message, |
90 | .label = _("Try again") | 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,7 +64,7 @@ | ||
64 | /** | 64 | /** |
65 | * @brief Called from timer to attempt an automatic reconnection. | 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 | if(hSession->auto_reconnect_inprogress) | 70 | if(hSession->auto_reconnect_inprogress) |
@@ -78,6 +78,27 @@ int lib3270_check_for_auto_reconnect(H3270 *hSession) | @@ -78,6 +78,27 @@ int lib3270_check_for_auto_reconnect(H3270 *hSession) | ||
78 | return 0; | 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 | LIB3270_EXPORT int lib3270_disconnect(H3270 *h) | 102 | LIB3270_EXPORT int lib3270_disconnect(H3270 *h) |
82 | { | 103 | { |
83 | return host_disconnect(h,0); | 104 | return host_disconnect(h,0); |
@@ -95,12 +116,8 @@ int host_disconnect(H3270 *hSession, int failed) | @@ -95,12 +116,8 @@ int host_disconnect(H3270 *hSession, int failed) | ||
95 | 116 | ||
96 | trace("Disconnected (Failed: %d Reconnect: %d in_progress: %d)",failed,lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECONNECT),hSession->auto_reconnect_inprogress); | 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 | * Remember a disconnect from ANSI mode, to keep screen tracing | 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,12 +2223,11 @@ static const char * cmd(int c) | ||
2223 | return nnn(c); | 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 | if (TELOPT_OK(c)) | 2232 | if (TELOPT_OK(c)) |
2234 | return TELOPT(c); | 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,11 +753,6 @@ LIB3270_INTERNAL int do_select(H3270 *h, unsigned int start, unsigned int end, | ||
753 | 753 | ||
754 | LIB3270_INTERNAL void connection_failed(H3270 *hSession, const char *message); | 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 | #if defined(DEBUG) | 756 | #if defined(DEBUG) |
762 | #define CHECK_SESSION_HANDLE(x) check_session_handle(&x,__FUNCTION__); | 757 | #define CHECK_SESSION_HANDLE(x) check_session_handle(&x,__FUNCTION__); |
763 | LIB3270_INTERNAL void check_session_handle(H3270 **hSession, const char *fname); | 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,6 +761,18 @@ LIB3270_INTERNAL int lib3270_check_for_auto_reconnect(H3270 *hSession); | ||
766 | LIB3270_INTERNAL void check_session_handle(H3270 **hSession); | 761 | LIB3270_INTERNAL void check_session_handle(H3270 **hSession); |
767 | #endif // DEBUG | 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 | LIB3270_INTERNAL int check_online_session(const H3270 *hSession); | 776 | LIB3270_INTERNAL int check_online_session(const H3270 *hSession); |
770 | LIB3270_INTERNAL int check_offline_session(const H3270 *hSession); | 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,6 +78,7 @@ void set_ssl_state(H3270 *hSession, LIB3270_SSL_STATE state) | ||
78 | 78 | ||
79 | hSession->ssl.state = state; | 79 | hSession->ssl.state = state; |
80 | trace_dsn(hSession,"SSL state changes to %d\n",(int) state); | 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 | hSession->cbk.update_ssl(hSession,hSession->ssl.state); | 83 | hSession->cbk.update_ssl(hSession,hSession->ssl.state); |
83 | } | 84 | } |