Commit 01859ebfbfbdf03c42f983e6e172d0221d8283be

Authored by Perry Werneck
1 parent 7d4f3364
Exists in master and in 1 other branch develop

Implementing lib3270_wait_for_connected, cleaning up code, fixing

warning.
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.