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 | 653 | |
654 | 654 | int connect(bool wait) |
655 | 655 | { |
656 | + int rc; | |
657 | + | |
656 | 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 | 661 | struct hllapi_packet_connect * pkt = (struct hllapi_packet_connect *) malloc(cbSize); |
660 | 662 | |
661 | 663 | pkt->packet_id = HLLAPI_PACKET_CONNECT; |
662 | 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 | 668 | #elif defined(HAVE_DBUS) |
667 | 669 | |
668 | 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 | 677 | if(!rc && wait) |
671 | 678 | return wait_for_ready(120); |
672 | 679 | |
673 | 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 | 701 | return -1; |
677 | 702 | |
703 | +#else | |
704 | + | |
705 | + rc = -1; | |
706 | + | |
678 | 707 | #endif |
708 | + | |
709 | + return rc; | |
710 | + | |
679 | 711 | } |
680 | 712 | |
713 | + | |
681 | 714 | int wait_for_ready(int seconds) |
682 | 715 | { |
683 | 716 | #if defined(WIN32) | ... | ... |
src/classlib/session.cc
... | ... | @@ -469,6 +469,19 @@ |
469 | 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 | 485 | #ifdef WIN32 |
473 | 486 | string session::win32_strerror(int e) |
474 | 487 | { | ... | ... |
src/include/pw3270/class.h
... | ... | @@ -128,6 +128,7 @@ |
128 | 128 | virtual string * get_display_charset(void); |
129 | 129 | |
130 | 130 | // Connection & Network |
131 | + int connect(const char *host, bool wait = true); | |
131 | 132 | virtual int connect(bool wait = true) = 0; |
132 | 133 | virtual int set_host(const char *hostname) = 0; |
133 | 134 | virtual int disconnect(void) = 0; | ... | ... |
src/plugins/hllapi/calls.cc
src/plugins/rx3270/pluginmain.cc
... | ... | @@ -89,6 +89,7 @@ |
89 | 89 | const string get_version(void); |
90 | 90 | LIB3270_CSTATE get_cstate(void); |
91 | 91 | int disconnect(void); |
92 | + int set_host(const char *uri); | |
92 | 93 | int connect(bool wait = true); |
93 | 94 | bool is_connected(void); |
94 | 95 | bool is_ready(void); |
... | ... | @@ -778,6 +779,11 @@ const char * plugin::asc2ebc(unsigned char *str, int sz) |
778 | 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 | 787 | const char * plugin::ebc2asc(unsigned char *str, int sz) |
782 | 788 | { |
783 | 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 | 101 | if(!hSession) |
102 | 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 | 107 | RexxMethod1(int, rx3270_method_disconnect, CSELF, sessionPtr) | ... | ... |
src/plugins/rx3270/typed_routines.cc
... | ... | @@ -93,12 +93,7 @@ RexxRoutine0(int, rx3270Disconnect) |
93 | 93 | |
94 | 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 | 99 | RexxRoutine0(int, rx3270isConnected) | ... | ... |