From 203516849d2ccd61eb3d51703a9b786c0e5a8da1 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Fri, 12 Jul 2013 12:49:05 +0000 Subject: [PATCH] Implementando método que faltava na interface dbus --- src/classlib/remote.cc | 13 +++++++++++-- src/plugins/dbus3270/gobject.c | 29 ++++++++++++++++++++++++++++- src/plugins/dbus3270/pw3270dbus.xml | 6 ++++++ src/plugins/dbus3270/service.h | 1 + 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/classlib/remote.cc b/src/classlib/remote.cc index e695184..4699486 100644 --- a/src/classlib/remote.cc +++ b/src/classlib/remote.cc @@ -780,8 +780,17 @@ struct hllapi_packet_query_offset query = { HLLAPI_PACKET_GET_TEXT_AT_OFFSET, (unsigned short) baddr, (unsigned short) len }; return query_string(&query,sizeof(query),len); #else - #warning IMPLEMENTAR - return NULL; + dbus_int32_t b = (dbus_int32_t) baddr; + dbus_int32_t l = (dbus_int32_t) len; + + DBusMessage * msg = create_message("getText"); + if(!msg) + return NULL; + + trace("%s(%d,%d)",__FUNCTION__,b,l); + dbus_message_append_args(msg, DBUS_TYPE_INT32, &b, DBUS_TYPE_INT32, &l, DBUS_TYPE_INVALID); + + return get_string(call(msg)); #endif } diff --git a/src/plugins/dbus3270/gobject.c b/src/plugins/dbus3270/gobject.c index e500fad..1be7787 100644 --- a/src/plugins/dbus3270/gobject.c +++ b/src/plugins/dbus3270/gobject.c @@ -268,9 +268,36 @@ void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBus g_free(utftext); } + } + void pw3270_dbus_get_text(PW3270Dbus *object, int offset, int len, DBusGMethodInvocation *context) + { + gchar * text; + H3270 * hSession = pw3270_dbus_get_session_handle(object); -} + trace("%s object=%p context=%p",__FUNCTION__,object,context); + if(pw3270_dbus_check_valid_state(object,context)) + return; + + text = lib3270_get_text(hSession,offset,len); + if(!text) + { + GError *error = pw3270_dbus_get_error_from_errno(errno); + dbus_g_method_return_error(context,error); + g_error_free(error); + } + else + { + gchar * utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_charset(hSession),"?",NULL,NULL,NULL); + + lib3270_free(text); + + dbus_g_method_return(context,utftext); + + g_free(utftext); + } + + } void pw3270_dbus_is_connected(PW3270Dbus *object, DBusGMethodInvocation *context) { diff --git a/src/plugins/dbus3270/pw3270dbus.xml b/src/plugins/dbus3270/pw3270dbus.xml index e627749..921eee1 100644 --- a/src/plugins/dbus3270/pw3270dbus.xml +++ b/src/plugins/dbus3270/pw3270dbus.xml @@ -61,6 +61,12 @@ + + + + + + diff --git a/src/plugins/dbus3270/service.h b/src/plugins/dbus3270/service.h index 43fc7cc..342f0b2 100644 --- a/src/plugins/dbus3270/service.h +++ b/src/plugins/dbus3270/service.h @@ -97,6 +97,7 @@ void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context); void pw3270_dbus_set_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context); void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context); + void pw3270_dbus_get_text(PW3270Dbus *object, int offset, int len, DBusGMethodInvocation *context); void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context); void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context); -- libgit2 0.21.2