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 | 87 | .activate = connect_host, |
| 88 | 88 | |
| 89 | 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 | 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 | 490 | // Keyboard actions |
| 477 | 491 | // |
| ... | ... | @@ -504,20 +518,6 @@ |
| 504 | 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 | 523 | .name = "delete", | ... | ... |
src/core/connect.c
| ... | ... | @@ -70,36 +70,48 @@ |
| 70 | 70 | |
| 71 | 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 | 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 | 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 | 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 | 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 | 430 | // Notifica atualização |
| 431 | 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 | 436 | return 0; |
| 434 | 437 | } |
| 435 | 438 | ... | ... |
src/core/session.c
src/include/lib3270.h
| ... | ... | @@ -621,19 +621,28 @@ |
| 621 | 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 | 637 | * @brief Reconnect to host. |
| 629 | 638 | * |
| 630 | - * @param h Session handle. | |
| 639 | + * @param hSession Session handle. | |
| 631 | 640 | * @param seconds Seconds to wait for connection. |
| 632 | 641 | * |
| 633 | 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 | 648 | * @brief Connect by URL |
| ... | ... | @@ -1031,6 +1040,8 @@ |
| 1031 | 1040 | LIB3270_EXPORT const char ** lib3270_get_lunames(H3270 *hSession); |
| 1032 | 1041 | |
| 1033 | 1042 | LIB3270_EXPORT int lib3270_is_connected(const H3270 *h); |
| 1043 | + | |
| 1044 | + | |
| 1034 | 1045 | LIB3270_EXPORT int lib3270_is_disconnected(const H3270 *h); |
| 1035 | 1046 | |
| 1036 | 1047 | LIB3270_EXPORT int lib3270_is_unlocked(const H3270 *h); | ... | ... |