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 | ... | ... |