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