Commit a58ef7adb543ce822e7040d46ac738befe3418e4
1 parent
83226739
Exists in
master
and in
3 other branches
Fixing status of "reconnect" action.
Showing
5 changed files
with
67 additions
and
39 deletions
Show diff stats
src/core/actions/table.c
@@ -87,7 +87,7 @@ | @@ -87,7 +87,7 @@ | ||
87 | .activate = connect_host, | 87 | .activate = connect_host, |
88 | 88 | ||
89 | .group = LIB3270_ACTION_GROUP_OFFLINE, | 89 | .group = LIB3270_ACTION_GROUP_OFFLINE, |
90 | - .activatable = lib3270_is_disconnected | 90 | + .activatable = lib3270_allow_reconnect // lib3270_is_disconnected |
91 | }, | 91 | }, |
92 | 92 | ||
93 | { | 93 | { |
@@ -472,6 +472,20 @@ | @@ -472,6 +472,20 @@ | ||
472 | .activatable = lib3270_is_connected | 472 | .activatable = lib3270_is_connected |
473 | }, | 473 | }, |
474 | 474 | ||
475 | + { | ||
476 | + .name = "clear", | ||
477 | + .type = LIB3270_ACTION_TYPE_GENERIC, | ||
478 | + | ||
479 | + .keys = NULL, | ||
480 | + .icon = "edit-clear-all", | ||
481 | + .label = N_("Clear"), | ||
482 | + .summary = N_( "Clear AID key" ), | ||
483 | + .activate = lib3270_clear, | ||
484 | + | ||
485 | + .group = LIB3270_ACTION_GROUP_ONLINE, | ||
486 | + .activatable = lib3270_is_connected | ||
487 | + }, | ||
488 | + | ||
475 | // | 489 | // |
476 | // Keyboard actions | 490 | // Keyboard actions |
477 | // | 491 | // |
@@ -504,20 +518,6 @@ | @@ -504,20 +518,6 @@ | ||
504 | .activatable = lib3270_is_connected | 518 | .activatable = lib3270_is_connected |
505 | }, | 519 | }, |
506 | 520 | ||
507 | - { | ||
508 | - .name = "clear", | ||
509 | - .type = LIB3270_ACTION_TYPE_GENERIC, | ||
510 | - | ||
511 | - .keys = NULL, | ||
512 | - .icon = NULL, | ||
513 | - .label = N_("Clear"), | ||
514 | - .summary = N_( "Clear AID key" ), | ||
515 | - .activate = lib3270_clear, | ||
516 | - | ||
517 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
518 | - .activatable = lib3270_is_connected | ||
519 | - }, | ||
520 | - | ||
521 | 521 | ||
522 | { | 522 | { |
523 | .name = "delete", | 523 | .name = "delete", |
src/core/connect.c
@@ -70,36 +70,48 @@ | @@ -70,36 +70,48 @@ | ||
70 | 70 | ||
71 | #endif // HAVE_LIBSSL | 71 | #endif // HAVE_LIBSSL |
72 | 72 | ||
73 | - int lib3270_reconnect(H3270 *hSession, int seconds) | 73 | + int lib3270_allow_reconnect(H3270 *hSession) |
74 | { | 74 | { |
75 | - debug("%s",__FUNCTION__); | ||
76 | - | ||
77 | - FAIL_IF_ONLINE(hSession); | ||
78 | - | ||
79 | // | 75 | // |
80 | // Can't reconnect if already reconnecting *OR* there's an open popup | 76 | // Can't reconnect if already reconnecting *OR* there's an open popup |
81 | - // (to avoid open more than one connect error popup. | 77 | + // (to avoid open more than one connect error popup). |
82 | // | 78 | // |
83 | if(hSession->auto_reconnect_inprogress || hSession->popups) | 79 | if(hSession->auto_reconnect_inprogress || hSession->popups) |
84 | - return errno = EAGAIN; | 80 | + { |
81 | + errno = EBUSY; | ||
82 | + return 0; | ||
83 | + } | ||
85 | 84 | ||
86 | - if(hSession->connection.sock > 0) | ||
87 | - return errno = EISCONN; | 85 | + // Is the session disconnected? |
86 | + if(!lib3270_is_disconnected(hSession)) | ||
87 | + { | ||
88 | + errno = EISCONN; | ||
89 | + return 0; | ||
90 | + } | ||
88 | 91 | ||
92 | + // Do I have a defined host? | ||
89 | if(!(hSession->host.current && hSession->host.srvc)) | 93 | if(!(hSession->host.current && hSession->host.srvc)) |
90 | { | 94 | { |
91 | - // No host info, try the default one. | ||
92 | - if(lib3270_set_url(hSession,NULL)) | ||
93 | - { | ||
94 | - int err = errno; | ||
95 | - lib3270_write_event_trace(hSession,"Can't set default URL (%s)\n",strerror(err)); | ||
96 | - return errno = err; | ||
97 | - } | ||
98 | - | ||
99 | - if(!(hSession->host.current && hSession->host.srvc)) | ||
100 | - { | ||
101 | - return errno = EINVAL; | ||
102 | - } | 95 | + errno = EINVAL; |
96 | + return 0; | ||
97 | + } | ||
98 | + | ||
99 | + if(hSession->connection.sock > 0) | ||
100 | + { | ||
101 | + errno = EISCONN; | ||
102 | + return 0; | ||
103 | + } | ||
104 | + | ||
105 | + return 1; | ||
106 | + } | ||
107 | + | ||
108 | + int lib3270_reconnect(H3270 *hSession, int seconds) | ||
109 | + { | ||
110 | + debug("%s",__FUNCTION__); | ||
111 | + | ||
112 | + if(!lib3270_allow_reconnect(hSession)) | ||
113 | + { | ||
114 | + return errno == 0 ? -1 : errno; | ||
103 | } | 115 | } |
104 | 116 | ||
105 | #if defined(HAVE_LIBSSL) | 117 | #if defined(HAVE_LIBSSL) |
src/core/host.c
@@ -430,6 +430,9 @@ LIB3270_EXPORT int lib3270_set_url(H3270 *h, const char *n) | @@ -430,6 +430,9 @@ LIB3270_EXPORT int lib3270_set_url(H3270 *h, const char *n) | ||
430 | // Notifica atualização | 430 | // Notifica atualização |
431 | update_url(h); | 431 | update_url(h); |
432 | 432 | ||
433 | + // The "reconnect" action is now available. | ||
434 | + lib3270_action_group_notify(h, LIB3270_ACTION_GROUP_OFFLINE); | ||
435 | + | ||
433 | return 0; | 436 | return 0; |
434 | } | 437 | } |
435 | 438 |
src/core/session.c
@@ -432,6 +432,8 @@ H3270 * lib3270_session_new(const char *model) | @@ -432,6 +432,8 @@ H3270 * lib3270_session_new(const char *model) | ||
432 | ft_init(hSession); | 432 | ft_init(hSession); |
433 | #endif | 433 | #endif |
434 | 434 | ||
435 | + lib3270_set_url(hSession,NULL); // Set default URL (if available). | ||
436 | + | ||
435 | trace("%s finished",__FUNCTION__); | 437 | trace("%s finished",__FUNCTION__); |
436 | 438 | ||
437 | errno = 0; | 439 | errno = 0; |
src/include/lib3270.h
@@ -621,19 +621,28 @@ | @@ -621,19 +621,28 @@ | ||
621 | * @return Pointer to host URL set (internal data, do not change it) | 621 | * @return Pointer to host URL set (internal data, do not change it) |
622 | * | 622 | * |
623 | */ | 623 | */ |
624 | - LIB3270_EXPORT const char * LIB3270_DEPRECATED(lib3270_get_host(const H3270 *h)); | 624 | + LIB3270_EXPORT const char * LIB3270_DEPRECATED(lib3270_get_host(const H3270 *h)); |
625 | 625 | ||
626 | + /** | ||
627 | + * @brief Check if the session can reconnect. | ||
628 | + * | ||
629 | + * @param hSession Session handle. | ||
630 | + * | ||
631 | + * @return zero if reconnect is unavailable (sets errno), non zero if available. | ||
632 | + * | ||
633 | + */ | ||
634 | + LIB3270_EXPORT int lib3270_allow_reconnect(H3270 *hSession); | ||
626 | 635 | ||
627 | /** | 636 | /** |
628 | * @brief Reconnect to host. | 637 | * @brief Reconnect to host. |
629 | * | 638 | * |
630 | - * @param h Session handle. | 639 | + * @param hSession Session handle. |
631 | * @param seconds Seconds to wait for connection. | 640 | * @param seconds Seconds to wait for connection. |
632 | * | 641 | * |
633 | * @return 0 for success, non zero if fails (sets errno). | 642 | * @return 0 for success, non zero if fails (sets errno). |
634 | * | 643 | * |
635 | */ | 644 | */ |
636 | - LIB3270_EXPORT int lib3270_reconnect(H3270 *h,int seconds); | 645 | + LIB3270_EXPORT int lib3270_reconnect(H3270 *hSession,int seconds); |
637 | 646 | ||
638 | /** | 647 | /** |
639 | * @brief Connect by URL | 648 | * @brief Connect by URL |
@@ -1031,6 +1040,8 @@ | @@ -1031,6 +1040,8 @@ | ||
1031 | LIB3270_EXPORT const char ** lib3270_get_lunames(H3270 *hSession); | 1040 | LIB3270_EXPORT const char ** lib3270_get_lunames(H3270 *hSession); |
1032 | 1041 | ||
1033 | LIB3270_EXPORT int lib3270_is_connected(const H3270 *h); | 1042 | LIB3270_EXPORT int lib3270_is_connected(const H3270 *h); |
1043 | + | ||
1044 | + | ||
1034 | LIB3270_EXPORT int lib3270_is_disconnected(const H3270 *h); | 1045 | LIB3270_EXPORT int lib3270_is_disconnected(const H3270 *h); |
1035 | 1046 | ||
1036 | LIB3270_EXPORT int lib3270_is_unlocked(const H3270 *h); | 1047 | LIB3270_EXPORT int lib3270_is_unlocked(const H3270 *h); |