Commit 0c602dc52a05ff0c4deec979c4ef6ba6f3cec624
1 parent
1086160d
Exists in
master
and in
5 other branches
Updating compatibility IPC library.
Showing
7 changed files
with
115 additions
and
108 deletions
Show diff stats
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
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
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 "@PACKAGE@" 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 | ... | ... |