Commit bfcf5f04d3153e05874abeabec7ae3bf869246a6

Authored by perry.werneck@gmail.com
1 parent e295905b

Implementando novo mecanismo de conexao

src/classlib/local.cc
... ... @@ -279,7 +279,8 @@
279 279 const char * (*_get_version)(void);
280 280 LIB3270_CSTATE (*_get_connection_state)(H3270 *h);
281 281 int (*_disconnect)(H3270 *h);
282   - int (*_connect)(H3270 *h,const char *n, int wait);
  282 + int (*_connect)(H3270 *h,int wait);
  283 + const char (*_set_host)(H3270 *h, const char *n);
283 284 int (*_is_connected)(H3270 *h);
284 285 void (*_main_iterate)(H3270 *h, int wait);
285 286 int (*_wait)(H3270 *hSession, int seconds);
... ... @@ -334,6 +335,7 @@
334 335 { (void **) & _get_version, "lib3270_get_version" },
335 336 { (void **) & _disconnect, "lib3270_disconnect" },
336 337 { (void **) & _connect, "lib3270_connect" },
  338 + { (void **) & _set_host, "lib3270_set_host" },
337 339 { (void **) & _main_iterate, "lib3270_main_iterate" },
338 340 { (void **) & _wait, "lib3270_wait" },
339 341 { (void **) & _enter, "lib3270_enter" },
... ... @@ -416,9 +418,14 @@
416 418 return _get_connection_state(hSession);
417 419 }
418 420  
419   - int connect(const char *uri, bool wait)
  421 + int connect(bool wait)
420 422 {
421   - return _connect(hSession,uri,(int) wait);
  423 + return _connect(hSession,(int) wait);
  424 + }
  425 +
  426 + int set_host(const char *uri)
  427 + {
  428 + return _set_host(hSession,uri) != NULL;
422 429 }
423 430  
424 431 int disconnect(void)
... ...
src/classlib/remote.cc
... ... @@ -651,7 +651,7 @@
651 651 return (LIB3270_CSTATE) query_intval(HLLAPI_PACKET_GET_CSTATE);
652 652 }
653 653  
654   - int connect(const char *uri, bool wait)
  654 + int connect(bool wait)
655 655 {
656 656 #if defined(WIN32)
657 657  
... ... @@ -660,9 +660,6 @@
660 660  
661 661 pkt->packet_id = HLLAPI_PACKET_CONNECT;
662 662 pkt->wait = (unsigned char) wait;
663   - strcpy(pkt->hostname,uri);
664   -
665   - trace("Sending %s",pkt->hostname);
666 663  
667 664 return query_intval((void *) pkt,cbSize,true);
668 665  
... ...
src/include/lib3270.h
... ... @@ -421,17 +421,13 @@
421 421 /**
422 422 * Network connect operation, keep main loop running
423 423 *
424   - * Sets 'reconnect_host', 'current_host' and 'full_current_host' as
425   - * side-effects.
426   - *
427 424 * @param h Session handle.
428   - * @param n Host ID (NULL to use the last one)
429 425 * @param wait Non zero to wait for connection to be ok.
430 426 *
431 427 * @return 0 for success, EAGAIN if auto-reconnect is in progress, EBUSY if connected, ENOTCONN if connection has failed, -1 on unexpected failure.
432 428 *
433 429 */
434   - LIB3270_EXPORT int lib3270_connect(H3270 *h,const char *n, int wait);
  430 + LIB3270_EXPORT int lib3270_connect(H3270 *h,int wait);
435 431  
436 432 /**
437 433 * Connect to defined host, keep main loop running.
... ... @@ -456,14 +452,6 @@
456 452 LIB3270_EXPORT int lib3270_disconnect(H3270 *h);
457 453  
458 454 /**
459   - * Reconnect.
460   - *
461   - * @param h Session handle.
462   - * @param wait Non zero to wait for connection to be ok.
463   - */
464   - LIB3270_EXPORT int lib3270_reconnect(H3270 *h,int wait);
465   -
466   - /**
467 455 * Get connection state.
468 456 *
469 457 * @param h Session handle.
... ...
src/include/pw3270/class.h
... ... @@ -128,7 +128,8 @@
128 128 virtual string * get_display_charset(void);
129 129  
130 130 // Connection & Network
131   - virtual int connect(const char *uri, bool wait = true) = 0;
  131 + virtual int connect(bool wait = true) = 0;
  132 + virtual int set_host(const char *hostname) = 0;
132 133 virtual int disconnect(void) = 0;
133 134 virtual int wait_for_ready(int seconds) = 0;
134 135 virtual int wait(int seconds) = 0;
... ...
src/include/pw3270/ipcpackets.h
... ... @@ -30,6 +30,7 @@
30 30 typedef enum _hllapi_packet
31 31 {
32 32 HLLAPI_PACKET_CONNECT,
  33 + HLLAPI_PACKET_SET_HOST,
33 34 HLLAPI_PACKET_DISCONNECT,
34 35 HLLAPI_PACKET_GET_PROGRAM_MESSAGE,
35 36 HLLAPI_PACKET_GET_TEXT_AT_OFFSET,
... ... @@ -90,7 +91,6 @@ struct hllapi_packet_connect
90 91 {
91 92 unsigned char packet_id;
92 93 unsigned char wait;
93   - char hostname[1];
94 94 };
95 95  
96 96 struct hllapi_packet_keycode
... ...
src/lib3270/api.h
... ... @@ -324,8 +324,8 @@
324 324  
325 325 #include <lib3270/actions.h>
326 326  
327   - #define host_connect(n,wait) lib3270_connect(NULL,n,wait)
328   - #define host_reconnect(w) lib3270_reconnect(NULL,w)
  327 + // #define host_connect(n,wait) lib3270_connect(NULL,n,wait)
  328 + // #define host_reconnect(w) lib3270_reconnect(NULL,w)
329 329  
330 330  
331 331 #ifdef __cplusplus
... ...
src/lib3270/connect.c
... ... @@ -201,7 +201,7 @@ static void net_connected(H3270 *hSession)
201 201 sockstart(hSession);
202 202 #endif
203 203  
204   - hSession->host.opt = opt;
  204 + hSession->host.opt = opt & ~LIB3270_CONNECT_OPTION_WAIT;
205 205 Replace(hSession->host.current,strdup(hostname));
206 206  
207 207 Replace(hSession->host.full,
... ...
src/lib3270/host.c
... ... @@ -457,17 +457,7 @@ static int do_connect(H3270 *hSession)
457 457 return 0;
458 458 }
459 459  
460   -/**
461   - * Connect to selected host.
462   - *
463   - * @param h Session handle.
464   - * @param n Hostname (null to reconnect to the last one;
465   - * @param wait Wait for connection ok before return.
466   - *
467   - * @return 0 if the connection was ok, non zero on error.
468   - *
469   - */
470   -int lib3270_connect(H3270 *hSession, const char *n, int wait)
  460 +int lib3270_connect(H3270 *hSession, int wait)
471 461 {
472 462 int rc;
473 463  
... ... @@ -475,18 +465,18 @@ int lib3270_connect(H3270 *hSession, const char *n, int wait)
475 465  
476 466 lib3270_main_iterate(hSession,0);
477 467  
478   - if(hSession->auto_reconnect_inprogress)
479   - return EAGAIN;
480   -
481   - if(PCONNECTED)
  468 + if (CONNECTED || HALF_CONNECTED)
482 469 return EBUSY;
483 470  
484   - if(n)
485   - lib3270_set_host(hSession,n);
486   -
487 471 if(!hSession->host.full)
488 472 return EINVAL;
489 473  
  474 + if (hSession->auto_reconnect_inprogress)
  475 + return EBUSY;
  476 +
  477 + if(PCONNECTED)
  478 + return EBUSY;
  479 +
490 480 rc = do_connect(hSession);
491 481 if(rc)
492 482 return rc;
... ... @@ -514,7 +504,7 @@ static void try_reconnect(H3270 *session)
514 504 {
515 505 lib3270_write_log(session,"3270","Starting auto-reconnect (Host: %s)",session->host.full ? session->host.full : "-");
516 506 session->auto_reconnect_inprogress = 0;
517   - lib3270_reconnect(session,0);
  507 + lib3270_connect(session,0);
518 508 }
519 509  
520 510 LIB3270_EXPORT int lib3270_disconnect(H3270 *h)
... ... @@ -689,8 +679,6 @@ LIB3270_EXPORT const char * lib3270_set_host(H3270 *h, const char *n)
689 679 }
690 680 }
691 681  
692   - trace("SRVC=[%s]",srvc);
693   -
694 682 if(!*hostname)
695 683 return h->host.current;
696 684  
... ... @@ -709,18 +697,22 @@ LIB3270_EXPORT const char * lib3270_set_host(H3270 *h, const char *n)
709 697 query = "";
710 698 }
711 699  
  700 + trace("SRVC=[%s]",srvc);
  701 +
712 702 Replace(h->host.current,strdup(hostname));
713 703 Replace(h->host.srvc,strdup(srvc));
714 704 Replace(h->host.full,
715 705 lib3270_strdup_printf(
716 706 "%s%s:%s%s%s",
717   - h->host.opt&LIB3270_CONNECT_OPTION_SSL ? "tn3270s://" : "",
  707 + h->host.opt&LIB3270_CONNECT_OPTION_SSL ? "tn3270s://" : "tn3270://",
718 708 hostname,
719 709 srvc,
720 710 *query ? "?" : "",
721 711 query
722 712 ));
723 713  
  714 + trace("hosturl=[%s]",h->host.full);
  715 +
724 716 free(str);
725 717 }
726 718  
... ... @@ -733,6 +725,7 @@ LIB3270_EXPORT const char * lib3270_get_hostname(H3270 *h)
733 725 return h->host.current;
734 726 }
735 727  
  728 +/*
736 729 LIB3270_EXPORT int lib3270_reconnect(H3270 *hSession,int wait)
737 730 {
738 731 int rc;
... ... @@ -742,13 +735,13 @@ LIB3270_EXPORT int lib3270_reconnect(H3270 *hSession,int wait)
742 735 if (CONNECTED || HALF_CONNECTED)
743 736 return EBUSY;
744 737  
745   - if (hSession->host.full == CN)
  738 + if (!hSession->host.full)
746 739 return EINVAL;
747 740  
748 741 if (hSession->auto_reconnect_inprogress)
749 742 return EBUSY;
750 743  
751   - rc = lib3270_connect(hSession,hSession->host.full,wait);
  744 + rc = lib3270_connect(hSession,wait);
752 745  
753 746 if(rc)
754 747 {
... ... @@ -758,6 +751,7 @@ LIB3270_EXPORT int lib3270_reconnect(H3270 *hSession,int wait)
758 751  
759 752 return 0;
760 753 }
  754 +*/
761 755  
762 756 LIB3270_EXPORT const char * lib3270_get_luname(H3270 *h)
763 757 {
... ...
src/lib3270/macros.c
... ... @@ -254,15 +254,17 @@
254 254 switch(argc)
255 255 {
256 256 case 1:
257   - rc = lib3270_reconnect(hSession,0);
  257 + rc = lib3270_connect(hSession,0);
258 258 break;
259 259  
260 260 case 2:
261   - rc = lib3270_connect(hSession,argv[1],0);
  261 + lib3270_set_host(hSession,argv[1]);
  262 + rc = lib3270_connect(hSession,0);
262 263 break;
263 264  
264 265 case 3:
265   - rc = lib3270_connect(hSession,argv[1],atoi(argv[2]));
  266 + lib3270_set_host(hSession,argv[1]);
  267 + rc = lib3270_connect(hSession,atoi(argv[2]));
266 268 break;
267 269  
268 270 default:
... ...
src/plugins/hllapi/calls.cc
... ... @@ -100,7 +100,9 @@
100 100  
101 101 try
102 102 {
103   - rc = session::get_default()->connect(uri,wait);
  103 + if(uri && *uri)
  104 + session::get_default()->set_host(uri);
  105 + rc = session::get_default()->connect(wait);
104 106 }
105 107 catch(std::exception &e)
106 108 {
... ...
src/plugins/hllapi/pluginmain.c
... ... @@ -197,7 +197,6 @@
197 197 {
198 198 case HLLAPI_PACKET_CONNECT:
199 199 send_result(source,lib3270_connect( lib3270_get_default_session_handle(),
200   - ((struct hllapi_packet_connect *) source->buffer)->hostname,
201 200 ((struct hllapi_packet_connect *) source->buffer)->wait));
202 201 break;
203 202  
... ...
src/plugins/rx3270/pluginmain.cc
... ... @@ -89,7 +89,7 @@
89 89 const string get_version(void);
90 90 LIB3270_CSTATE get_cstate(void);
91 91 int disconnect(void);
92   - int connect(const char *uri, bool wait = true);
  92 + int connect(bool wait = true);
93 93 bool is_connected(void);
94 94 bool is_ready(void);
95 95  
... ... @@ -542,9 +542,9 @@ extern &quot;C&quot;
542 542 return 0;
543 543 }
544 544  
545   - int plugin::connect(const char *uri, bool wait)
  545 + int plugin::connect(bool wait)
546 546 {
547   - return lib3270_connect(hSession,uri,wait);
  547 + return lib3270_connect(hSession,wait);
548 548 }
549 549  
550 550 bool plugin::is_connected(void)
... ...
src/plugins/rx3270/rexx_methods.cc
... ... @@ -100,7 +100,11 @@ RexxMethod3(int, rx3270_method_connect, CSELF, sessionPtr, CSTRING, uri, OPTIONA
100 100 session *hSession = (session *) sessionPtr;
101 101 if(!hSession)
102 102 return -1;
103   - return hSession->connect(uri,wait != 0);
  103 +
  104 + if(uri)
  105 + hSession->set_hostname(uri);
  106 +
  107 + return hSession->connect(wait != 0);
104 108 }
105 109  
106 110 RexxMethod1(int, rx3270_method_disconnect, CSELF, sessionPtr)
... ...
src/plugins/rx3270/typed_routines.cc
... ... @@ -93,7 +93,12 @@ RexxRoutine0(int, rx3270Disconnect)
93 93  
94 94 RexxRoutine2(int, rx3270Connect, CSTRING, hostname, int, wait)
95 95 {
96   - return session::get_default()->connect(hostname,wait);
  96 + session * hSession = session::get_default();
  97 +
  98 + if(hostname && *hostname)
  99 + hSession->set_hostname(hostname);
  100 +
  101 + return hSession->connect(wait);
97 102 }
98 103  
99 104 RexxRoutine0(int, rx3270isConnected)
... ...
src/pw3270/hostdialog.c
... ... @@ -393,12 +393,14 @@
393 393 case GTK_RESPONSE_ACCEPT:
394 394 gtk_widget_set_sensitive(dialog,FALSE);
395 395  
  396 + /*
396 397 hostname = g_strconcat( gtk_toggle_button_get_active(sslcheck) ? "L:" : "",
397 398 gtk_entry_get_text(host),
398 399 ":",
399 400 gtk_entry_get_text(port),
400 401 NULL
401 402 );
  403 + */
402 404  
403 405 #if GTK_CHECK_VERSION(2,18,0)
404 406 gtk_widget_set_visible(dialog,FALSE);
... ... @@ -411,7 +413,11 @@
411 413 v3270_set_session_options(widget,host_type[iHostType].option);
412 414 v3270_set_session_color_type(widget,colortable[iColorTable].colors);
413 415  
414   - if(!lib3270_connect(v3270_get_session(widget),hostname,1))
  416 +// if(!lib3270_connect(v3270_get_session(widget),hostname,1))
  417 + if(!lib3270_connect_host( v3270_get_session(widget),
  418 + gtk_entry_get_text(host),
  419 + gtk_entry_get_text(port),
  420 + gtk_toggle_button_get_active(sslcheck) ? LIB3270_CONNECT_OPTION_SSL : LIB3270_CONNECT_OPTION_DEFAULTS))
415 421 {
416 422 again = FALSE;
417 423 }
... ...
src/pw3270/v3270/widget.c
... ... @@ -1400,64 +1400,14 @@ int v3270_connect(GtkWidget *widget, const gchar *uri)
1400 1400  
1401 1401 terminal = GTK_V3270(widget);
1402 1402  
1403   -#ifdef DEBUG
1404 1403 if(uri)
1405 1404 {
1406   - LIB3270_CONNECT_OPTION opt = LIB3270_CONNECT_OPTION_DEFAULTS;
1407   - gchar * scheme = g_uri_unescape_string(uri,NULL);
1408   - gchar * hostname = strchr(scheme,':');
1409   - gchar * srvc;
1410   - gchar * query;
1411   -
1412   - if(hostname)
1413   - {
1414   - *(hostname++) = 0;
1415   -
1416   - while(*hostname && !g_ascii_isalnum(*hostname))
1417   - hostname++;
1418   -
1419   - if(*hostname)
1420   - {
1421   - if( ! (g_ascii_strcasecmp(scheme,"l") && g_ascii_strcasecmp(scheme,"ssl")) )
1422   - opt |= LIB3270_CONNECT_OPTION_SSL;
1423   -
1424   - srvc = strchr(hostname,':');
1425   - if(srvc)
1426   - {
1427   - *(srvc++) = 0;
1428   - query = strchr(srvc,'?');
1429   - if(query)
1430   - *(query++) = 0;
1431   - else
1432   - query = "";
1433   - }
1434   - else
1435   - {
1436   - srvc = "telnet";
1437   - }
1438   -
1439   - rc = lib3270_connect_host(terminal->host,hostname,srvc,opt);
1440   -
1441   - }
1442   -
1443   - }
1444   -
1445   -
1446   - g_free(scheme);
1447   -
1448   - }
1449   - else
1450   - {
1451   - rc = lib3270_connect(terminal->host,uri,0);
  1405 + trace("%s(%s)",__FUNCTION__,uri);
  1406 + lib3270_set_host(terminal->host,uri);
1452 1407 }
1453 1408  
1454   -#else
1455   - rc = lib3270_connect(terminal->host,uri,0);
1456   -#endif // DEBUG
1457   -
1458   - trace("%s exits with rc=%d (%s)",__FUNCTION__,rc,strerror(rc));
  1409 + return lib3270_connect(terminal->host,0);
1459 1410  
1460   - return rc;
1461 1411 }
1462 1412  
1463 1413 static gboolean notify_focus(GtkWidget *widget, GdkEventFocus *event)
... ...