From 4d99a85889712ca8b5f0428ab17bd5e89868da37 Mon Sep 17 00:00:00 2001 From: PerryWerneck Date: Sun, 11 Dec 2016 04:25:03 -0200 Subject: [PATCH] Incluindo método para obter a URL do host --- src/classlib/local.cc | 8 ++++++++ src/classlib/remote.cc | 19 ++++++++++++++++++- src/include/lib3270.h | 4 +++- src/include/pw3270/class.h | 3 +++ src/include/pw3270/ipcpackets.h | 1 + src/lib3270/host.c | 13 +++++++++++++ src/plugins/dbus3270/gobject.c | 13 ++++++++++++- src/plugins/dbus3270/pw3270dbus.xml | 6 +++++- src/plugins/dbus3270/service.h | 3 ++- src/plugins/hllapi/pluginmain.c | 5 +++++ src/pw3270/v3270/widget.c | 5 ++++- 11 files changed, 74 insertions(+), 6 deletions(-) diff --git a/src/classlib/local.cc b/src/classlib/local.cc index 4bb4e6f..8eb78ad 100644 --- a/src/classlib/local.cc +++ b/src/classlib/local.cc @@ -129,6 +129,7 @@ int (*_disconnect)(H3270 *h); int (*_connect)(H3270 *h,int wait); const char (*_set_url)(H3270 *h, const char *n); + const char * (*_get_url)(H3270 *h, char *str, int len); int (*_is_connected)(H3270 *h); void (*_main_iterate)(H3270 *h, int wait); int (*_wait)(H3270 *hSession, int seconds); @@ -198,6 +199,7 @@ { (void **) & _disconnect, "lib3270_disconnect" }, { (void **) & _connect, "lib3270_connect" }, { (void **) & _set_url, "lib3270_set_url" }, + { (void **) & _get_url, "lib3270_get_url" }, { (void **) & _main_iterate, "lib3270_main_iterate" }, { (void **) & _wait, "lib3270_wait" }, { (void **) & _enter, "lib3270_enter" }, @@ -300,6 +302,12 @@ return (_set_url(hSession,uri) == 0); } + string get_url() + { + char buffer[1024]; + return string(_get_url(hSession,buffer,sizeof(buffer))); + } + int disconnect(void) { this->lock(); diff --git a/src/classlib/remote.cc b/src/classlib/remote.cc index a9b9e73..eb32179 100644 --- a/src/classlib/remote.cc +++ b/src/classlib/remote.cc @@ -56,6 +56,8 @@ #define HLLAPI_PACKET_GET_SSL_STATE "getSecureState" #define HLLAPI_PACKET_IS_READY "isReady" #define HLLAPI_PACKET_DISCONNECT "disconnect" + #define HLLAPI_PACKET_GET_HOST "getURL" + #define HLLAPI_PACKET_SET_HOST "setURL" #define HLLAPI_PACKET_GET_CURSOR "getCursorAddress" #define HLLAPI_PACKET_GET_WIDTH "getScreenWidth" #define HLLAPI_PACKET_GET_HEIGHT "getScreenHeight" @@ -834,7 +836,7 @@ #elif defined(HAVE_DBUS) - rc = query_intval("setHost", DBUS_TYPE_STRING, &uri, DBUS_TYPE_INVALID); + rc = query_intval(HLLAPI_PACKET_SET_HOST, DBUS_TYPE_STRING, &uri, DBUS_TYPE_INVALID); #else @@ -846,6 +848,21 @@ } + string get_url() + { +#if defined(WIN32) + + struct hllapi_packet_query query = { HLLAPI_PACKET_GET_HOST }; + return query_string(&query,sizeof(query),1024); + +#elif defined(HAVE_DBUS) + + return query_string(HLLAPI_PACKET_GET_HOST); + +#else + return string(); +#endif + } int wait_for_ready(int seconds) { diff --git a/src/include/lib3270.h b/src/include/lib3270.h index 094d156..c127cc8 100644 --- a/src/include/lib3270.h +++ b/src/include/lib3270.h @@ -443,7 +443,7 @@ /** - * Get servic or port for the connect/reconnect operations. + * Get service or port for the connect/reconnect operations. * * @param h Session handle. * @@ -454,6 +454,8 @@ LIB3270_EXPORT void lib3270_set_srvcname(H3270 *h, const char *srvc); + LIB3270_EXPORT const char * lib3270_get_url(H3270 *h, char *buffer, int len); + /** * Get session options. * diff --git a/src/include/pw3270/class.h b/src/include/pw3270/class.h index 6558869..529eb53 100644 --- a/src/include/pw3270/class.h +++ b/src/include/pw3270/class.h @@ -166,7 +166,10 @@ int connect(const char *host, time_t wait = 0); int set_host(const char *host); virtual int connect(void) = 0; + virtual int set_url(const char *hostname) = 0; + virtual string get_url() = 0; + virtual int disconnect(void) = 0; virtual int wait_for_ready(int seconds) = 0; virtual int wait(int seconds) = 0; diff --git a/src/include/pw3270/ipcpackets.h b/src/include/pw3270/ipcpackets.h index 7fca79a..661166c 100644 --- a/src/include/pw3270/ipcpackets.h +++ b/src/include/pw3270/ipcpackets.h @@ -77,6 +77,7 @@ HLLAPI_PACKET_GET_WIDTH, HLLAPI_PACKET_GET_HEIGHT, HLLAPI_PACKET_GET_LENGTH, + HLLAPI_PACKET_GET_HOST, HLLAPI_PACKET_INVALID diff --git a/src/lib3270/host.c b/src/lib3270/host.c index f296d64..957e175 100644 --- a/src/lib3270/host.c +++ b/src/lib3270/host.c @@ -219,6 +219,19 @@ static void update_host(H3270 *h) } +LIB3270_EXPORT const char * lib3270_get_url(H3270 *h, char *buffer, int len) +{ + CHECK_SESSION_HANDLE(h); + + snprintf(buffer,len,"%s://%s:%s", + ((h->options & LIB3270_OPTION_SSL) == 0) ? "tn3270" : "tn3270s", + h->host.current, + h->host.srvc + ); + + return buffer; +} + LIB3270_EXPORT const char * lib3270_set_url(H3270 *h, const char *n) { CHECK_SESSION_HANDLE(h); diff --git a/src/plugins/dbus3270/gobject.c b/src/plugins/dbus3270/gobject.c index 025f338..5652932 100644 --- a/src/plugins/dbus3270/gobject.c +++ b/src/plugins/dbus3270/gobject.c @@ -103,7 +103,7 @@ void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvoca dbus_g_method_return(context,lib3270_connect(hSession,0)); } -void pw3270_dbus_set_host(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context) +void pw3270_dbus_set_ur_l(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context) { trace("%s object=%p context=%p",__FUNCTION__,object,context); @@ -112,6 +112,17 @@ void pw3270_dbus_set_host(PW3270Dbus *object, const gchar *uri, DBusGMethodInvoc dbus_g_method_return(context,lib3270_set_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri) == NULL); } +void pw3270_dbus_get_ur_l(PW3270Dbus *object, DBusGMethodInvocation *context) +{ + char buffer[1024]; + + trace("%s object=%p context=%p",__FUNCTION__,object,context); + + lib3270_get_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),buffer,sizeof(buffer)); + dbus_g_method_return(context,buffer); +} + + void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context) { trace("%s object=%p context=%p",__FUNCTION__,object,context); diff --git a/src/plugins/dbus3270/pw3270dbus.xml b/src/plugins/dbus3270/pw3270dbus.xml index 463ce9b..e5e2eea 100644 --- a/src/plugins/dbus3270/pw3270dbus.xml +++ b/src/plugins/dbus3270/pw3270dbus.xml @@ -14,11 +14,15 @@ - + + + + + diff --git a/src/plugins/dbus3270/service.h b/src/plugins/dbus3270/service.h index 86a8e57..57d8f86 100644 --- a/src/plugins/dbus3270/service.h +++ b/src/plugins/dbus3270/service.h @@ -66,7 +66,8 @@ void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context); void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context); void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context); - void pw3270_dbus_set_host(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context); + void pw3270_dbus_get_ur_l(PW3270Dbus *object, DBusGMethodInvocation *context); + void pw3270_dbus_set_ur_l(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context); void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context); void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context); diff --git a/src/plugins/hllapi/pluginmain.c b/src/plugins/hllapi/pluginmain.c index 70dfa99..f16ca7c 100644 --- a/src/plugins/hllapi/pluginmain.c +++ b/src/plugins/hllapi/pluginmain.c @@ -219,6 +219,11 @@ ((struct hllapi_packet_text *) source->buffer)->text) != NULL); break; + case HLLAPI_PACKET_GET_HOST: +// send_text(source,lib3270_get_host(lib3270_get_default_session_handle(),((struct hllapi_packet_text *) source->buffer)->text),-1); + #error Alocar buffer dinâmico + break; + case HLLAPI_PACKET_DISCONNECT: send_result(source,lib3270_disconnect(lib3270_get_default_session_handle())); break; diff --git a/src/pw3270/v3270/widget.c b/src/pw3270/v3270/widget.c index d302c29..eb1c36f 100644 --- a/src/pw3270/v3270/widget.c +++ b/src/pw3270/v3270/widget.c @@ -767,9 +767,12 @@ static void ctlr_done(H3270 *session) static void update_connect(H3270 *session, unsigned char connected) { +#ifdef DEBUG + char dbg[1024]; +#endif // DEBUG v3270 *widget = GTK_V3270(lib3270_get_user_data(session)); - trace("%s - %s",__FUNCTION__,connected ? "Connected" : "Disconnected"); + trace("%s - %s %s",__FUNCTION__,lib3270_get_url(session,dbg,sizeof(dbg)),connected ? "Connected" : "Disconnected"); if(connected) { -- libgit2 0.21.2