Commit 0c602dc52a05ff0c4deec979c4ef6ba6f3cec624

Authored by Perry Werneck
1 parent 1086160d

Updating compatibility IPC library.

configure.ac
... ... @@ -403,8 +403,6 @@ dnl ---------------------------------------------------------------------------
403 403 dnl Lib3270 flags
404 404 dnl ---------------------------------------------------------------------------
405 405  
406   -dnl AC_ARG_WITH([libname], [AS_HELP_STRING([--with-libname], [Setup library name])], [ app_cv_libname="$withval" ],[ app_cv_libname="3270" ])
407   -
408 406 PKG_CHECK_MODULES( [LIB3270], [lib3270], app_cv_3270="yes", app_cv_3270="no" )
409 407  
410 408 if test "$app_cv_3270" == "yes"; then
... ... @@ -433,8 +431,10 @@ dnl AX_SUBDIRS_CONFIGURE([modules/libv3270],[[LIB3270_CFLAGS=-I$ac_pwd/modules/l
433 431 dnl AC_SUBST(LIBV3270_INCLUDEPATH,$ac_pwd/modules/libv3270/src/include)
434 432 fi
435 433  
436   -dnl AC_DEFINE(LIB3270_NAME,$app_cv_libname)
437   -dnl AC_SUBST(LIB3270_NAME,$app_cv_libname)
  434 +AC_ARG_WITH([libname], [AS_HELP_STRING([--with-libname], [Setup library name])], [ app_cv_libname="$withval" ],[ app_cv_libname=`$PKG_CONFIG --variable=library_name lib3270` ])
  435 +
  436 +AC_DEFINE_UNQUOTED(LIB3270_NAME,$app_cv_libname)
  437 +AC_SUBST(LIB3270_NAME,$app_cv_libname)
438 438  
439 439 AC_SUBST(PW3270_CFLAGS,-I$ac_pwd/src/include)
440 440 AC_SUBST(PW3270_LIBS,-l$PACKAGE_TARNAME)
... ...
src/libpw3270cpp/Makefile.in
... ... @@ -65,6 +65,7 @@ CFLAGS= \
65 65 @CFLAGS@ \
66 66 -Wno-deprecated-declarations \
67 67 -I$(BASEDIR)/src/include \
  68 + -DLIB3270_NAME="lib@LIB3270_NAME@" \
68 69 @LIB3270_CFLAGS@ \
69 70 @DBUS_CFLAGS@ \
70 71 @GTK_CFLAGS@
... ...
src/libpw3270cpp/local.cc
... ... @@ -50,6 +50,7 @@
50 50  
51 51 #include <lib3270/log.h>
52 52 #include <lib3270/popup.h>
  53 +#include <lib3270/trace.h>
53 54 #include <string.h>
54 55 #include <stdio.h>
55 56  
... ... @@ -71,7 +72,7 @@
71 72 #endif // HAVE_SYSLOG
72 73 }
73 74  
74   - static void tracehandler(H3270 *session, const char *fmt, va_list args)
  75 + static void tracehandler(H3270 *session, void *dunno, const char *fmt, va_list args)
75 76 {
76 77 #ifdef HAVE_SYSLOG
77 78  
... ... @@ -179,7 +180,7 @@
179 180 void load_methods() {
180 181  
181 182 void (*set_log_handler)(void (*loghandler)(H3270 *, const char *, int, const char *, va_list));
182   - void (*set_trace_handler)( void (*handler)(H3270 *session, const char *fmt, va_list args) );
  183 + void (*set_trace_handler)(H3270 *hSession, LIB3270_TRACE_HANDLER handler, void *userdata);
183 184  
184 185 struct _call
185 186 {
... ... @@ -207,9 +208,11 @@
207 208 { (void **) & _pakey, "lib3270_pakey" },
208 209 { (void **) & _wait_for_ready, "lib3270_wait_for_ready" },
209 210 { (void **) & _get_text, "lib3270_get_string_at_address" },
210   - { (void **) & _get_text_at, "lib3270_get_text_at" },
  211 +
  212 + { (void **) & _get_text_at, "lib3270_get_string_at" },
211 213 { (void **) & _cmp_text_at, "lib3270_cmp_text_at" },
212 214 { (void **) & _set_text_at, "lib3270_set_string_at" },
  215 +
213 216 { (void **) & _is_ready, "lib3270_is_ready" },
214 217 { (void **) & _set_cursor_position, "lib3270_set_cursor_position" },
215 218 { (void **) & _set_toggle, "lib3270_set_toggle" },
... ... @@ -254,7 +257,7 @@
254 257  
255 258 // Get Session handle, setup base callbacks
256 259 set_log_handler(loghandler);
257   - set_trace_handler(tracehandler);
  260 + set_trace_handler(this->hSession, tracehandler, NULL);
258 261  
259 262 set_display_charset();
260 263  
... ... @@ -262,7 +265,7 @@
262 265  
263 266 public:
264 267  
265   - local() : module("lib3270",PACKAGE_VERSION)
  268 + local() : module(LIB3270_STRINGIZE_VALUE_OF(LIB3270_NAME),PACKAGE_VERSION)
266 269 {
267 270 }
268 271  
... ...
src/libpw3270cpp/module.cc
... ... @@ -172,6 +172,7 @@ namespace PW3270_NAMESPACE
172 172  
173 173 dlerror();
174 174  
  175 + trace("Loading %s",dllname.c_str());
175 176 hModule = dlopen(dllname.c_str(), RTLD_NOW);
176 177 if(!hModule)
177 178 throw exception("Can't load lib3270: %s",dllname.c_str());
... ...
src/libpw3270cpp/remote.cc
... ... @@ -611,120 +611,123 @@
611 611 char * ptr;
612 612 string busName;
613 613  
  614 +
  615 + this->path = nullptr;
  616 + this->intf = nullptr;
614 617 this->sequence = (++sq) + time(0);
615 618  
616   - trace("%s str=%p sequence=%d",__FUNCTION__,str,sequence);
  619 + try {
617 620  
618   - for(ptr=str;*ptr;ptr++)
619   - *ptr = tolower(*ptr);
  621 + trace("%s str=%p sequence=%d",__FUNCTION__,str,sequence);
620 622  
621   - ptr = strchr(str,':');
  623 + for(ptr=str;*ptr;ptr++)
  624 + *ptr = tolower(*ptr);
622 625  
623   - if(ptr)
624   - {
625   - size_t sz;
626   -
627   - *(ptr++) = 0;
628   -
629   - // Build destination
630   - sz = strlen(ptr)+strlen(str)+strlen(prefix_dest)+2;
631   - dest = (char *) malloc(sz+1);
632   - strncpy(dest,prefix_dest,sz);
633   - strncat(dest,str,sz);
634   - strncat(dest,".",sz);
635   - strncat(dest,ptr,sz);
636   -
637   - // Path and interface always use the same name.
638   - path = strdup("/br/com/bb/pw3270");
639   - intf = strdup("br.com.bb.pw3270");
640   -
641   - /*
642   - // Build path
643   - sz = strlen(str)+strlen(prefix_path);
644   - path = (char *) malloc(sz+1);
645   - strncpy(path,prefix_path,sz);
646   - strncat(path,str,sz);
647   -
648   - // Build intf
649   - sz = strlen(str)+strlen(prefix_dest)+1;
650   - intf = (char *) malloc(sz+1);
651   - strncpy(intf,prefix_dest,sz);
652   - strncat(intf,str,sz);
653   - */
  626 + ptr = strchr(str,':');
654 627  
655   - }
656   - else
657   - {
658   - size_t sz;
659   -
660   - // Build destination
661   - sz = strlen(str)+strlen(prefix_dest)+2;
662   - dest = (char *) malloc(sz+1);
663   - strncpy(dest,prefix_dest,sz);
664   - strncat(dest,str,sz);
665   -
666   - // Build path
667   - sz = strlen(str)+strlen(prefix_path);
668   - path = (char *) malloc(sz+1);
669   - strncpy(path,prefix_path,sz);
670   - strncat(path,str,sz);
671   -
672   - // Build intf
673   - sz = strlen(str)+strlen(prefix_dest)+1;
674   - intf = (char *) malloc(sz+1);
675   - strncpy(intf,prefix_dest,sz);
676   - strncat(intf,str,sz);
  628 + if(ptr)
  629 + {
  630 + size_t sz;
677 631  
678   - }
  632 + *(ptr++) = 0;
679 633  
680   - trace("DBUS:\nDestination:\t[%s]\nPath:\t\t[%s]\nInterface:\t[%s]",dest,path,intf);
  634 + // Build destination
  635 + sz = strlen(ptr)+strlen(str)+strlen(prefix_dest)+2;
  636 + dest = (char *) malloc(sz+1);
  637 + strncpy(dest,prefix_dest,sz);
  638 + strncat(dest,str,sz);
  639 + strncat(dest,".",sz);
  640 + strncat(dest,ptr,sz);
681 641  
682   - free(str);
  642 + // Path and interface always use the same name.
  643 + path = strdup("/br/com/bb/pw3270");
  644 + intf = strdup("br.com.bb.pw3270");
683 645  
684   - dbus_error_init(&err);
  646 + }
  647 + else
  648 + {
  649 + size_t sz;
  650 +
  651 + // Build destination
  652 + sz = strlen(str)+strlen(prefix_dest)+2;
  653 + dest = (char *) malloc(sz+1);
  654 + strncpy(dest,prefix_dest,sz);
  655 + strncat(dest,str,sz);
  656 +
  657 + // Build path
  658 + sz = strlen(str)+strlen(prefix_path);
  659 + path = (char *) malloc(sz+1);
  660 + strncpy(path,prefix_path,sz);
  661 + strncat(path,str,sz);
  662 +
  663 + // Build intf
  664 + sz = strlen(str)+strlen(prefix_dest)+1;
  665 + intf = (char *) malloc(sz+1);
  666 + strncpy(intf,prefix_dest,sz);
  667 + strncat(intf,str,sz);
685 668  
686   - conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
687   - trace("dbus_bus_get conn=%p",conn);
  669 + }
688 670  
689   - if (dbus_error_is_set(&err))
690   - {
691   - exception e = exception("DBUS Connection Error (%s)", err.message);
692   - dbus_error_free(&err);
693   - throw e;
694   - return;
695   - }
  671 + trace("DBUS:\nDestination:\t[%s]\nPath:\t\t[%s]\nInterface:\t[%s]",dest,path,intf);
696 672  
697   - if(!conn)
698   - {
699   - throw exception("%s", "DBUS Connection failed");
700   - return;
701   - }
  673 + free(str);
702 674  
  675 + dbus_error_init(&err);
703 676  
704   - rc = dbus_bus_request_name(conn, makeBusName(busName), DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
705   - trace("dbus_bus_request_name(%s) rc=%d",busName.c_str(),rc);
  677 + conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
  678 + trace("dbus_bus_get conn=%p",conn);
706 679  
707   - if (dbus_error_is_set(&err))
708   - {
709   - exception e = exception("Name Error (%s)", err.message);
710   - dbus_error_free(&err);
711   - throw e;
712   - return;
713   - }
  680 + if (dbus_error_is_set(&err))
  681 + {
  682 + exception e = exception("DBUS Connection Error (%s)", err.message);
  683 + dbus_error_free(&err);
  684 + throw e;
  685 + return;
  686 + }
714 687  
715   - if(rc != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
716   - {
717   - trace("%s: DBUS request for name %s failed",__FUNCTION__, busName.c_str());
718   - throw exception("DBUS request for \"%s\" failed",session);
719   - return;
720   - }
  688 + if(!conn)
  689 + {
  690 + throw exception("%s", "DBUS Connection failed");
  691 + return;
  692 + }
  693 +
  694 +
  695 + rc = dbus_bus_request_name(conn, makeBusName(busName), DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
  696 + trace("dbus_bus_request_name(%s) rc=%d",busName.c_str(),rc);
  697 +
  698 + if (dbus_error_is_set(&err))
  699 + {
  700 + exception e = exception("Name Error (%s)", err.message);
  701 + dbus_error_free(&err);
  702 + throw e;
  703 + return;
  704 + }
721 705  
722   - trace("%s: Using DBUS name %s",__FUNCTION__,busName.c_str());
  706 + if(rc != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
  707 + {
  708 + trace("%s: DBUS request for name %s failed",__FUNCTION__, busName.c_str());
  709 + throw exception("DBUS request for \"%s\" failed",session);
  710 + }
723 711  
724   - const char * id = "r";
725   - static const dbus_int32_t flag = 1;
726   - query_intval("setScript", DBUS_TYPE_STRING, &id, DBUS_TYPE_INT32, &flag, DBUS_TYPE_INVALID);
  712 + trace("%s: Using DBUS name %s",__FUNCTION__,busName.c_str());
  713 +
  714 + const char * id = "r";
  715 + static const dbus_int32_t flag = 1;
  716 + query_intval("setScript", DBUS_TYPE_STRING, &id, DBUS_TYPE_INT32, &flag, DBUS_TYPE_INVALID);
727 717  
  718 + } catch(...) {
  719 +
  720 + if(path) {
  721 + free(path);
  722 + path = nullptr;
  723 + }
  724 +
  725 + if(intf) {
  726 + free(intf);
  727 + intf = nullptr;
  728 + }
  729 +
  730 + }
728 731  
729 732 #else
730 733  
... ...
src/libpw3270cpp/testprogram.cc
... ... @@ -43,8 +43,8 @@
43 43 {
44 44 string s;
45 45 // session *session = session::start("service://?");
46   - // session *session = session::start("");
47   - session *session = session::start("pw3270:A");
  46 + session *session = session::start("");
  47 + // session *session = session::start("pw3270:A");
48 48  
49 49 string name = session->get_session_name();
50 50  
... ...
win/pw3270.nsi.in
... ... @@ -140,10 +140,9 @@ SubSection &quot;@PACKAGE@&quot; SecMain
140 140  
141 141 ${DisableX64FSRedirection}
142 142 CreateDirectory "$INSTDIR\plugins"
143   - file "/oname=$INSTDIR\plugins\ipc3270c.dll" "bin\ipc3270c.dll"
144 143  
145   - ${EnableX64FSRedirection}
146   - file "/oname=$SYSDIR\libhllapi.dll" "bin\libhllapi.dll"
  144 + file "/oname=$INSTDIR\plugins\ipc3270c.dll" "bin\ipc3270c.dll"
  145 + file "/oname=$SYSDIR\libhllapi.dll" "bin\libhllapi.dll"
147 146  
148 147 sectionEnd
149 148  
... ...