Commit c949a338b81b7da27090a2f655e7ec5072888040
1 parent
caa2ecc7
Exists in
master
and in
5 other branches
Incluindo toggle para ativar/desativar a utilizacao do keep-alive da rede
Showing
6 changed files
with
44 additions
and
15 deletions
Show diff stats
src/include/lib3270.h
| @@ -116,6 +116,7 @@ | @@ -116,6 +116,7 @@ | ||
| 116 | LIB3270_TOGGLE_BEEP, /**< Beep on errors */ | 116 | LIB3270_TOGGLE_BEEP, /**< Beep on errors */ |
| 117 | LIB3270_TOGGLE_VIEW_FIELD, /**< View Field attribute */ | 117 | LIB3270_TOGGLE_VIEW_FIELD, /**< View Field attribute */ |
| 118 | LIB3270_TOGGLE_ALTSCREEN, /**< auto resize on altscreen */ | 118 | LIB3270_TOGGLE_ALTSCREEN, /**< auto resize on altscreen */ |
| 119 | + LIB3270_TOGGLE_KEEP_ALIVE, /**< Enable network keep-alive with SO_KEEPALIVE */ | ||
| 119 | 120 | ||
| 120 | // LIB3270_TOGGLE_ALT_CURSOR, | 121 | // LIB3270_TOGGLE_ALT_CURSOR, |
| 121 | // LIB3270_TOGGLE_AID_WAIT, | 122 | // LIB3270_TOGGLE_AID_WAIT, |
src/lib3270/telnet.c
| @@ -488,6 +488,7 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo | @@ -488,6 +488,7 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo | ||
| 488 | int passthru_len = 0; | 488 | int passthru_len = 0; |
| 489 | unsigned short passthru_port = 0; | 489 | unsigned short passthru_port = 0; |
| 490 | int on = 1; | 490 | int on = 1; |
| 491 | + int optval; | ||
| 491 | char errmsg[1024]; | 492 | char errmsg[1024]; |
| 492 | int rc; | 493 | int rc; |
| 493 | #if defined(OMTU) /*[*/ | 494 | #if defined(OMTU) /*[*/ |
| @@ -630,12 +631,6 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo | @@ -630,12 +631,6 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo | ||
| 630 | close_fail; | 631 | close_fail; |
| 631 | } | 632 | } |
| 632 | 633 | ||
| 633 | - if (setsockopt(session->sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&on, sizeof(on)) < 0) | ||
| 634 | - { | ||
| 635 | - popup_a_sockerr(session, N_( "setsockopt(%s)" ), "SO_KEEPALIVE"); | ||
| 636 | - close_fail; | ||
| 637 | - } | ||
| 638 | - | ||
| 639 | #if defined(OMTU) | 634 | #if defined(OMTU) |
| 640 | if (setsockopt(session->sock, SOL_SOCKET, SO_SNDBUF, (char *)&mtu,sizeof(mtu)) < 0) | 635 | if (setsockopt(session->sock, SOL_SOCKET, SO_SNDBUF, (char *)&mtu,sizeof(mtu)) < 0) |
| 641 | { | 636 | { |
| @@ -666,8 +661,22 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo | @@ -666,8 +661,22 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo | ||
| 666 | if(!rc) | 661 | if(!rc) |
| 667 | { | 662 | { |
| 668 | trace_dsn(session,"Connected.\n"); | 663 | trace_dsn(session,"Connected.\n"); |
| 664 | + | ||
| 665 | + optval = lib3270_get_toggle(session,LIB3270_TOGGLE_KEEP_ALIVE) ? 1 : 0; | ||
| 666 | + | ||
| 667 | + if (setsockopt(session->sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)) < 0) | ||
| 668 | + { | ||
| 669 | + popup_a_sockerr(session, N_( "Can´t %s network keep-alive" ), optval ? _( "enable" ) : _( "disable" )); | ||
| 670 | + close_fail; | ||
| 671 | + } | ||
| 672 | + else | ||
| 673 | + { | ||
| 674 | + trace_dsn(session,"Network keep-alive is %s\n",optval ? "enabled" : "disabled" ); | ||
| 675 | + } | ||
| 676 | + | ||
| 669 | if(net_connected(session)) | 677 | if(net_connected(session)) |
| 670 | return -1; | 678 | return -1; |
| 679 | + | ||
| 671 | } | 680 | } |
| 672 | else | 681 | else |
| 673 | { | 682 | { |
src/lib3270/toggles.c
| @@ -51,8 +51,6 @@ | @@ -51,8 +51,6 @@ | ||
| 51 | #include "togglesc.h" | 51 | #include "togglesc.h" |
| 52 | #include "api.h" | 52 | #include "api.h" |
| 53 | 53 | ||
| 54 | - | ||
| 55 | - | ||
| 56 | static const char *toggle_names[LIB3270_TOGGLE_COUNT] = | 54 | static const char *toggle_names[LIB3270_TOGGLE_COUNT] = |
| 57 | { | 55 | { |
| 58 | "monocase", | 56 | "monocase", |
| @@ -79,6 +77,7 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] = | @@ -79,6 +77,7 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] = | ||
| 79 | "beep", /**< Beep on errors */ | 77 | "beep", /**< Beep on errors */ |
| 80 | "fieldattr", /**< View Field attribute */ | 78 | "fieldattr", /**< View Field attribute */ |
| 81 | "altscreen", /**< auto resize on altscreen */ | 79 | "altscreen", /**< auto resize on altscreen */ |
| 80 | + "keepalive", /**< Enable network keep-alive with SO_KEEPALIVE */ | ||
| 82 | 81 | ||
| 83 | 82 | ||
| 84 | }; | 83 | }; |
| @@ -158,10 +157,29 @@ static void toggle_redraw(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGG | @@ -158,10 +157,29 @@ static void toggle_redraw(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGG | ||
| 158 | /* | 157 | /* |
| 159 | * No-op toggle. | 158 | * No-op toggle. |
| 160 | */ | 159 | */ |
| 161 | -static void toggle_nop(H3270 *session, struct lib3270_toggle *t unused, LIB3270_TOGGLE_TYPE tt unused) | 160 | +static void toggle_nop(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt unused) |
| 162 | { | 161 | { |
| 163 | } | 162 | } |
| 164 | 163 | ||
| 164 | +static void toggle_keepalive(H3270 *session, struct lib3270_toggle *t unused, LIB3270_TOGGLE_TYPE tt unused) | ||
| 165 | +{ | ||
| 166 | + if(session->sock > 0) | ||
| 167 | + { | ||
| 168 | + // Update keep-alive option | ||
| 169 | + int optval = t->value ? 1 : 0; | ||
| 170 | + | ||
| 171 | + if (setsockopt(session->sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)) < 0) | ||
| 172 | + { | ||
| 173 | + popup_a_sockerr(session, N_( "Can´t %s network keep-alive" ), optval ? _( "enable" ) : _( "disable" )); | ||
| 174 | + } | ||
| 175 | + else | ||
| 176 | + { | ||
| 177 | + trace_dsn(session,"Network keep-alive is %s\n",optval ? "enabled" : "disabled" ); | ||
| 178 | + } | ||
| 179 | + | ||
| 180 | + } | ||
| 181 | +} | ||
| 182 | + | ||
| 165 | /* | 183 | /* |
| 166 | * Called from system initialization code to handle initial toggle settings. | 184 | * Called from system initialization code to handle initial toggle settings. |
| 167 | */ | 185 | */ |
| @@ -176,10 +194,8 @@ void initialize_toggles(H3270 *session) | @@ -176,10 +194,8 @@ void initialize_toggles(H3270 *session) | ||
| 176 | session->toggle[LIB3270_TOGGLE_MONOCASE].upcall = toggle_redraw; | 194 | session->toggle[LIB3270_TOGGLE_MONOCASE].upcall = toggle_redraw; |
| 177 | session->toggle[LIB3270_TOGGLE_UNDERLINE].upcall = toggle_redraw; | 195 | session->toggle[LIB3270_TOGGLE_UNDERLINE].upcall = toggle_redraw; |
| 178 | session->toggle[LIB3270_TOGGLE_ALTSCREEN].upcall = toggle_altscreen; | 196 | session->toggle[LIB3270_TOGGLE_ALTSCREEN].upcall = toggle_altscreen; |
| 179 | - | ||
| 180 | -#if defined(X3270_ANSI) | ||
| 181 | - session->toggle[LIB3270_TOGGLE_LINE_WRAP].upcall = toggle_lineWrap; | ||
| 182 | -#endif | 197 | + session->toggle[LIB3270_TOGGLE_ALTSCREEN].upcall = toggle_altscreen; |
| 198 | + session->toggle[LIB3270_TOGGLE_KEEP_ALIVE].upcall = toggle_keepalive; | ||
| 183 | 199 | ||
| 184 | static const LIB3270_TOGGLE active_by_default[] = | 200 | static const LIB3270_TOGGLE active_by_default[] = |
| 185 | { | 201 | { |
| @@ -187,6 +203,7 @@ void initialize_toggles(H3270 *session) | @@ -187,6 +203,7 @@ void initialize_toggles(H3270 *session) | ||
| 187 | LIB3270_TOGGLE_CURSOR_POS, | 203 | LIB3270_TOGGLE_CURSOR_POS, |
| 188 | LIB3270_TOGGLE_BEEP, | 204 | LIB3270_TOGGLE_BEEP, |
| 189 | LIB3270_TOGGLE_ALTSCREEN, | 205 | LIB3270_TOGGLE_ALTSCREEN, |
| 206 | + LIB3270_TOGGLE_KEEP_ALIVE | ||
| 190 | }; | 207 | }; |
| 191 | 208 | ||
| 192 | for(f=0;f< (sizeof(active_by_default)/sizeof(active_by_default[0])); f++) | 209 | for(f=0;f< (sizeof(active_by_default)/sizeof(active_by_default[0])); f++) |
src/plugins/rx3270/rexx_methods.cc
| @@ -328,7 +328,8 @@ RexxMethod3(int, rx3270_method_set_option, CSELF, sessionPtr, CSTRING, name, int | @@ -328,7 +328,8 @@ RexxMethod3(int, rx3270_method_set_option, CSELF, sessionPtr, CSTRING, name, int | ||
| 328 | { "kpalternative", LIB3270_TOGGLE_KP_ALTERNATIVE }, | 328 | { "kpalternative", LIB3270_TOGGLE_KP_ALTERNATIVE }, |
| 329 | { "beep", LIB3270_TOGGLE_BEEP }, | 329 | { "beep", LIB3270_TOGGLE_BEEP }, |
| 330 | { "fieldattr", LIB3270_TOGGLE_VIEW_FIELD }, | 330 | { "fieldattr", LIB3270_TOGGLE_VIEW_FIELD }, |
| 331 | - { "altscreen", LIB3270_TOGGLE_ALTSCREEN } | 331 | + { "altscreen", LIB3270_TOGGLE_ALTSCREEN }, |
| 332 | + { "keepalive", LIB3270_TOGGLE_KEEP_ALIVE }, | ||
| 332 | }; | 333 | }; |
| 333 | 334 | ||
| 334 | session *hSession = (session *) sessionPtr; | 335 | session *hSession = (session *) sessionPtr; |
src/pw3270/common/config.c
| @@ -439,7 +439,7 @@ void set_boolean_to_config(const gchar *group, const gchar *key, gboolean val) | @@ -439,7 +439,7 @@ void set_boolean_to_config(const gchar *group, const gchar *key, gboolean val) | ||
| 439 | DWORD disp; | 439 | DWORD disp; |
| 440 | gchar * path = g_strdup_printf("%s\\%s\\%s",registry_path,g_get_application_name(),group); | 440 | gchar * path = g_strdup_printf("%s\\%s\\%s",registry_path,g_get_application_name(),group); |
| 441 | 441 | ||
| 442 | - trace("Creating key %s",path); | 442 | +// trace("Creating key %s",path); |
| 443 | if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) | 443 | if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) |
| 444 | { | 444 | { |
| 445 | DWORD value = val ? 1 : 0; | 445 | DWORD value = val ? 1 : 0; |
ui/00default.xml
| @@ -131,6 +131,7 @@ | @@ -131,6 +131,7 @@ | ||
| 131 | <menuitem action='toggle' id='SmartPaste' label='Smart paste' /> | 131 | <menuitem action='toggle' id='SmartPaste' label='Smart paste' /> |
| 132 | <menuitem action='toggle' id='Beep' label='Alert sound' /> | 132 | <menuitem action='toggle' id='Beep' label='Alert sound' /> |
| 133 | <menuitem action='toggle' id='KPAlternative' label='Use +/- for field navigation' /> | 133 | <menuitem action='toggle' id='KPAlternative' label='Use +/- for field navigation' /> |
| 134 | + <menuitem action='toggle' id='keepalive' label='Network keep alive' /> | ||
| 134 | </menu> | 135 | </menu> |
| 135 | 136 | ||
| 136 | <!--- Special action - InputMethod menu will be populated with Gtk input_method menu items ---> | 137 | <!--- Special action - InputMethod menu will be populated with Gtk input_method menu items ---> |