Commit 08e1c4dd3fb62a4751f3328ae711e1b87acef760
1 parent
bfcf5f04
Exists in
master
and in
5 other branches
Implementando novo mecanismo de conexao
Showing
7 changed files
with
59 additions
and
16 deletions
Show diff stats
src/classlib/remote.cc
| @@ -653,31 +653,64 @@ | @@ -653,31 +653,64 @@ | ||
| 653 | 653 | ||
| 654 | int connect(bool wait) | 654 | int connect(bool wait) |
| 655 | { | 655 | { |
| 656 | + int rc; | ||
| 657 | + | ||
| 656 | #if defined(WIN32) | 658 | #if defined(WIN32) |
| 657 | 659 | ||
| 658 | - size_t cbSize = sizeof(struct hllapi_packet_connect)+strlen(uri); | 660 | + size_t cbSize = sizeof(struct hllapi_packet_connect); |
| 659 | struct hllapi_packet_connect * pkt = (struct hllapi_packet_connect *) malloc(cbSize); | 661 | struct hllapi_packet_connect * pkt = (struct hllapi_packet_connect *) malloc(cbSize); |
| 660 | 662 | ||
| 661 | pkt->packet_id = HLLAPI_PACKET_CONNECT; | 663 | pkt->packet_id = HLLAPI_PACKET_CONNECT; |
| 662 | pkt->wait = (unsigned char) wait; | 664 | pkt->wait = (unsigned char) wait; |
| 663 | 665 | ||
| 664 | - return query_intval((void *) pkt,cbSize,true); | 666 | + rc = query_intval((void *) pkt,cbSize,true); |
| 665 | 667 | ||
| 666 | #elif defined(HAVE_DBUS) | 668 | #elif defined(HAVE_DBUS) |
| 667 | 669 | ||
| 668 | int rc = query_intval("connect", DBUS_TYPE_STRING, &uri, DBUS_TYPE_INVALID); | 670 | int rc = query_intval("connect", DBUS_TYPE_STRING, &uri, DBUS_TYPE_INVALID); |
| 669 | 671 | ||
| 672 | +#else | ||
| 673 | + rc = -1; | ||
| 674 | + | ||
| 675 | +#endif | ||
| 676 | + | ||
| 670 | if(!rc && wait) | 677 | if(!rc && wait) |
| 671 | return wait_for_ready(120); | 678 | return wait_for_ready(120); |
| 672 | 679 | ||
| 673 | return rc; | 680 | return rc; |
| 674 | 681 | ||
| 675 | -#else | 682 | + } |
| 683 | + | ||
| 684 | + int set_host(const char *uri) | ||
| 685 | + { | ||
| 686 | + int rc; | ||
| 687 | + | ||
| 688 | +#if defined(WIN32) | ||
| 689 | + | ||
| 690 | + size_t cbSize = sizeof(struct hllapi_packet_text)+strlen(uri); | ||
| 691 | + struct hllapi_packet_text * pkt = (struct hllapi_packet_text *) malloc(cbSize); | ||
| 692 | + | ||
| 693 | + pkt->packet_id = HLLAPI_PACKET_SET_HOST; | ||
| 694 | + strcpy(pkt->text,uri); | ||
| 695 | + | ||
| 696 | + rc = query_intval((void *) pkt,cbSize,true); | ||
| 697 | + | ||
| 698 | +#elif defined(HAVE_DBUS) | ||
| 699 | + | ||
| 700 | + #warning Implementar | ||
| 676 | return -1; | 701 | return -1; |
| 677 | 702 | ||
| 703 | +#else | ||
| 704 | + | ||
| 705 | + rc = -1; | ||
| 706 | + | ||
| 678 | #endif | 707 | #endif |
| 708 | + | ||
| 709 | + return rc; | ||
| 710 | + | ||
| 679 | } | 711 | } |
| 680 | 712 | ||
| 713 | + | ||
| 681 | int wait_for_ready(int seconds) | 714 | int wait_for_ready(int seconds) |
| 682 | { | 715 | { |
| 683 | #if defined(WIN32) | 716 | #if defined(WIN32) |
src/classlib/session.cc
| @@ -469,6 +469,19 @@ | @@ -469,6 +469,19 @@ | ||
| 469 | return EINVAL; | 469 | return EINVAL; |
| 470 | } | 470 | } |
| 471 | 471 | ||
| 472 | + int session::connect(const char *host, bool wait) | ||
| 473 | + { | ||
| 474 | + int rc = 0; | ||
| 475 | + | ||
| 476 | + if(host && *host) | ||
| 477 | + rc = set_host(host); | ||
| 478 | + | ||
| 479 | + if(!rc) | ||
| 480 | + rc = connect(wait); | ||
| 481 | + | ||
| 482 | + return rc; | ||
| 483 | + } | ||
| 484 | + | ||
| 472 | #ifdef WIN32 | 485 | #ifdef WIN32 |
| 473 | string session::win32_strerror(int e) | 486 | string session::win32_strerror(int e) |
| 474 | { | 487 | { |
src/include/pw3270/class.h
| @@ -128,6 +128,7 @@ | @@ -128,6 +128,7 @@ | ||
| 128 | virtual string * get_display_charset(void); | 128 | virtual string * get_display_charset(void); |
| 129 | 129 | ||
| 130 | // Connection & Network | 130 | // Connection & Network |
| 131 | + int connect(const char *host, bool wait = true); | ||
| 131 | virtual int connect(bool wait = true) = 0; | 132 | virtual int connect(bool wait = true) = 0; |
| 132 | virtual int set_host(const char *hostname) = 0; | 133 | virtual int set_host(const char *hostname) = 0; |
| 133 | virtual int disconnect(void) = 0; | 134 | virtual int disconnect(void) = 0; |
src/plugins/hllapi/calls.cc
| @@ -100,9 +100,7 @@ | @@ -100,9 +100,7 @@ | ||
| 100 | 100 | ||
| 101 | try | 101 | try |
| 102 | { | 102 | { |
| 103 | - if(uri && *uri) | ||
| 104 | - session::get_default()->set_host(uri); | ||
| 105 | - rc = session::get_default()->connect(wait); | 103 | + rc = session::get_default()->connect(uri,wait); |
| 106 | } | 104 | } |
| 107 | catch(std::exception &e) | 105 | catch(std::exception &e) |
| 108 | { | 106 | { |
src/plugins/rx3270/pluginmain.cc
| @@ -89,6 +89,7 @@ | @@ -89,6 +89,7 @@ | ||
| 89 | const string get_version(void); | 89 | const string get_version(void); |
| 90 | LIB3270_CSTATE get_cstate(void); | 90 | LIB3270_CSTATE get_cstate(void); |
| 91 | int disconnect(void); | 91 | int disconnect(void); |
| 92 | + int set_host(const char *uri); | ||
| 92 | int connect(bool wait = true); | 93 | int connect(bool wait = true); |
| 93 | bool is_connected(void); | 94 | bool is_connected(void); |
| 94 | bool is_ready(void); | 95 | bool is_ready(void); |
| @@ -778,6 +779,11 @@ const char * plugin::asc2ebc(unsigned char *str, int sz) | @@ -778,6 +779,11 @@ const char * plugin::asc2ebc(unsigned char *str, int sz) | ||
| 778 | return lib3270_asc2ebc(hSession,str,sz); | 779 | return lib3270_asc2ebc(hSession,str,sz); |
| 779 | } | 780 | } |
| 780 | 781 | ||
| 782 | +int plugin::set_host(const char *uri) | ||
| 783 | +{ | ||
| 784 | + return lib3270_set_host(hSession,uri) != NULL; | ||
| 785 | +} | ||
| 786 | + | ||
| 781 | const char * plugin::ebc2asc(unsigned char *str, int sz) | 787 | const char * plugin::ebc2asc(unsigned char *str, int sz) |
| 782 | { | 788 | { |
| 783 | return lib3270_ebc2asc(hSession,str,sz); | 789 | return lib3270_ebc2asc(hSession,str,sz); |
src/plugins/rx3270/rexx_methods.cc
| @@ -101,10 +101,7 @@ RexxMethod3(int, rx3270_method_connect, CSELF, sessionPtr, CSTRING, uri, OPTIONA | @@ -101,10 +101,7 @@ RexxMethod3(int, rx3270_method_connect, CSELF, sessionPtr, CSTRING, uri, OPTIONA | ||
| 101 | if(!hSession) | 101 | if(!hSession) |
| 102 | return -1; | 102 | return -1; |
| 103 | 103 | ||
| 104 | - if(uri) | ||
| 105 | - hSession->set_hostname(uri); | ||
| 106 | - | ||
| 107 | - return hSession->connect(wait != 0); | 104 | + return hSession->connect(uri,wait != 0); |
| 108 | } | 105 | } |
| 109 | 106 | ||
| 110 | RexxMethod1(int, rx3270_method_disconnect, CSELF, sessionPtr) | 107 | RexxMethod1(int, rx3270_method_disconnect, CSELF, sessionPtr) |
src/plugins/rx3270/typed_routines.cc
| @@ -93,12 +93,7 @@ RexxRoutine0(int, rx3270Disconnect) | @@ -93,12 +93,7 @@ RexxRoutine0(int, rx3270Disconnect) | ||
| 93 | 93 | ||
| 94 | RexxRoutine2(int, rx3270Connect, CSTRING, hostname, int, wait) | 94 | RexxRoutine2(int, rx3270Connect, CSTRING, hostname, int, wait) |
| 95 | { | 95 | { |
| 96 | - session * hSession = session::get_default(); | ||
| 97 | - | ||
| 98 | - if(hostname && *hostname) | ||
| 99 | - hSession->set_hostname(hostname); | ||
| 100 | - | ||
| 101 | - return hSession->connect(wait); | 96 | + return session::get_default()->connect(hostname,wait); |
| 102 | } | 97 | } |
| 103 | 98 | ||
| 104 | RexxRoutine0(int, rx3270isConnected) | 99 | RexxRoutine0(int, rx3270isConnected) |