Commit 01859ebfbfbdf03c42f983e6e172d0221d8283be
1 parent
7d4f3364
Exists in
master
and in
1 other branch
Implementing lib3270_wait_for_connected, cleaning up code, fixing
warning.
Showing
4 changed files
with
48 additions
and
41 deletions
Show diff stats
src/core/ft/ft.c
| @@ -474,7 +474,7 @@ LIB3270_EXPORT int lib3270_ft_start(H3270 *hSession) { | @@ -474,7 +474,7 @@ LIB3270_EXPORT int lib3270_ft_start(H3270 *hSession) { | ||
| 474 | // Erase the line and enter the command. | 474 | // Erase the line and enter the command. |
| 475 | flen = kybd_prime(ft->host); | 475 | flen = kybd_prime(ft->host); |
| 476 | if (!flen || flen < strlen(buffer) - 1) { | 476 | if (!flen || flen < strlen(buffer) - 1) { |
| 477 | - lib3270_write_log(ft->host, "ft", "Unable to send command \"%s\" (flen=%d szBuffer=%ld)",buffer,flen,strlen(buffer)); | 477 | + lib3270_write_log(ft->host, "ft", "Unable to send command \"%s\" (flen=%d szBuffer=%u)",buffer,flen,(unsigned int) strlen(buffer)); |
| 478 | ft_failed(ft,_( "Unable to send file-transfer request" )); | 478 | ft_failed(ft,_( "Unable to send file-transfer request" )); |
| 479 | return errno = EINVAL; | 479 | return errno = EINVAL; |
| 480 | } | 480 | } |
src/core/linux/connect.c
| @@ -373,46 +373,6 @@ int net_reconnect(H3270 *hSession, int seconds) { | @@ -373,46 +373,6 @@ int net_reconnect(H3270 *hSession, int seconds) { | ||
| 373 | lib3270_write_log(hSession,"connect", "%s: %s",__FUNCTION__,strerror(ETIMEDOUT)); | 373 | lib3270_write_log(hSession,"connect", "%s: %s",__FUNCTION__,strerror(ETIMEDOUT)); |
| 374 | return errno = rc; | 374 | return errno = rc; |
| 375 | } | 375 | } |
| 376 | - | ||
| 377 | - /* | ||
| 378 | - time_t end = time(0)+seconds; | ||
| 379 | - | ||
| 380 | - while(time(0) < end) | ||
| 381 | - { | ||
| 382 | - lib3270_main_iterate(hSession,1); | ||
| 383 | - | ||
| 384 | - switch(hSession->connection.state) | ||
| 385 | - { | ||
| 386 | - case LIB3270_PENDING: | ||
| 387 | - case LIB3270_CONNECTED_INITIAL: | ||
| 388 | - case LIB3270_CONNECTED_ANSI: | ||
| 389 | - case LIB3270_CONNECTED_3270: | ||
| 390 | - case LIB3270_CONNECTED_INITIAL_E: | ||
| 391 | - case LIB3270_CONNECTED_NVT: | ||
| 392 | - case LIB3270_CONNECTED_SSCP: | ||
| 393 | - case LIB3270_CONNECTING: | ||
| 394 | - break; | ||
| 395 | - | ||
| 396 | - case LIB3270_NOT_CONNECTED: | ||
| 397 | - return errno = ENOTCONN; | ||
| 398 | - | ||
| 399 | - case LIB3270_CONNECTED_TN3270E: | ||
| 400 | - if(!hSession->starting) | ||
| 401 | - return 0; | ||
| 402 | - break; | ||
| 403 | - | ||
| 404 | - default: | ||
| 405 | - lib3270_write_log(hSession,"connect", "%s: State changed to unexpected state %d",__FUNCTION__,hSession->connection.state); | ||
| 406 | - return errno = EINVAL; | ||
| 407 | - } | ||
| 408 | - | ||
| 409 | - } | ||
| 410 | - | ||
| 411 | - lib3270_disconnect(hSession); | ||
| 412 | - lib3270_write_log(hSession,"connect", "%s: %s",__FUNCTION__,strerror(ETIMEDOUT)); | ||
| 413 | - | ||
| 414 | - return errno = ETIMEDOUT; | ||
| 415 | - */ | ||
| 416 | } | 376 | } |
| 417 | 377 | ||
| 418 | return 0; | 378 | return 0; |
src/core/wait.c
| @@ -46,6 +46,7 @@ LIB3270_EXPORT int lib3270_wait_for_update(H3270 GNUC_UNUSED(*hSession), int GNU | @@ -46,6 +46,7 @@ LIB3270_EXPORT int lib3270_wait_for_update(H3270 GNUC_UNUSED(*hSession), int GNU | ||
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) { | 48 | LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) { |
| 49 | + | ||
| 49 | debug("%s",__FUNCTION__); | 50 | debug("%s",__FUNCTION__); |
| 50 | debug("Session lock state is %d",lib3270_get_lock_status(hSession)); | 51 | debug("Session lock state is %d",lib3270_get_lock_status(hSession)); |
| 51 | 52 | ||
| @@ -87,6 +88,7 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) { | @@ -87,6 +88,7 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) { | ||
| 87 | } | 88 | } |
| 88 | 89 | ||
| 89 | int lib3270_wait_for_string(H3270 *hSession, const char *key, int seconds) { | 90 | int lib3270_wait_for_string(H3270 *hSession, const char *key, int seconds) { |
| 91 | + | ||
| 90 | FAIL_IF_NOT_ONLINE(hSession); | 92 | FAIL_IF_NOT_ONLINE(hSession); |
| 91 | 93 | ||
| 92 | int rc = 0; | 94 | int rc = 0; |
| @@ -180,6 +182,37 @@ LIB3270_EXPORT int lib3270_wait_for_string_at(H3270 *hSession, unsigned int row, | @@ -180,6 +182,37 @@ LIB3270_EXPORT int lib3270_wait_for_string_at(H3270 *hSession, unsigned int row, | ||
| 180 | return lib3270_wait_for_string_at_address(hSession,baddr,key,seconds); | 182 | return lib3270_wait_for_string_at_address(hSession,baddr,key,seconds); |
| 181 | } | 183 | } |
| 182 | 184 | ||
| 185 | +LIB3270_EXPORT int lib3270_wait_for_connected(H3270 *hSession, int seconds) { | ||
| 186 | + | ||
| 187 | + int rc = -1; | ||
| 188 | + int timeout = 0; | ||
| 189 | + void * timer = AddTimer(seconds * 1000, hSession, timer_expired, &timeout); | ||
| 190 | + | ||
| 191 | + while(rc == -1) { | ||
| 192 | + if(timeout) { | ||
| 193 | + // Timeout! The timer was destroyed. | ||
| 194 | + return errno = ETIMEDOUT; | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + if(hSession->connection.state == LIB3270_NOT_CONNECTED) { | ||
| 198 | + rc = ENOTCONN; | ||
| 199 | + break; | ||
| 200 | + } | ||
| 201 | + | ||
| 202 | + if(!hSession->starting && hSession->connection.state >= (int)LIB3270_CONNECTED_INITIAL) { | ||
| 203 | + rc = 0; | ||
| 204 | + break; | ||
| 205 | + } | ||
| 206 | + | ||
| 207 | + lib3270_main_iterate(hSession,1); | ||
| 208 | + | ||
| 209 | + } | ||
| 210 | + RemoveTimer(hSession,timer); | ||
| 211 | + | ||
| 212 | + return errno = rc; | ||
| 213 | +} | ||
| 214 | + | ||
| 215 | + | ||
| 183 | LIB3270_EXPORT int lib3270_wait_for_cstate(H3270 *hSession, LIB3270_CSTATE cstate, int seconds) { | 216 | LIB3270_EXPORT int lib3270_wait_for_cstate(H3270 *hSession, LIB3270_CSTATE cstate, int seconds) { |
| 184 | 217 | ||
| 185 | int rc = -1; | 218 | int rc = -1; |
src/include/lib3270.h
| @@ -1061,6 +1061,20 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds); | @@ -1061,6 +1061,20 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds); | ||
| 1061 | LIB3270_EXPORT int lib3270_wait_for_cstate(H3270 *hSession, LIB3270_CSTATE cstate, int seconds); | 1061 | LIB3270_EXPORT int lib3270_wait_for_cstate(H3270 *hSession, LIB3270_CSTATE cstate, int seconds); |
| 1062 | 1062 | ||
| 1063 | /** | 1063 | /** |
| 1064 | + * @brief Wait "N" seconds for connected state. | ||
| 1065 | + * | ||
| 1066 | + * @param seconds Number of seconds to wait. | ||
| 1067 | + * | ||
| 1068 | + * @return 0 if ok, errno code if not. | ||
| 1069 | + * | ||
| 1070 | + * @retval ETIMEDOUT Timeout waiting. | ||
| 1071 | + * @retval ENOTCONN Not connected to host. | ||
| 1072 | + * @retval 0 Session is online and in required state. | ||
| 1073 | + * | ||
| 1074 | + */ | ||
| 1075 | +LIB3270_EXPORT int lib3270_wait_for_connected(H3270 *hSession, int seconds); | ||
| 1076 | + | ||
| 1077 | +/** | ||
| 1064 | * "beep" to notify user. | 1078 | * "beep" to notify user. |
| 1065 | * | 1079 | * |
| 1066 | * If available play a sound signal do alert user. | 1080 | * If available play a sound signal do alert user. |