Commit 9167ba7281d1267147ffdb7ebbf4978c6e76c551

Authored by Perry Werneck
1 parent dcf0fc2c
Exists in master and in 1 other branch develop

Adding get cursor position method.

client/src/include/lib3270/ipc.h
... ... @@ -116,27 +116,26 @@
116 116 template<typename T>
117 117 class lib3270_ptr {
118 118 private:
119   - T *data;
  119 + T *ptr;
120 120  
121 121 public:
122   - lib3270_ptr(T *data) {
123   - this->data = data;
  122 + lib3270_ptr(T *d) : ptr(d) {
124 123 }
125 124  
126 125 ~lib3270_ptr() {
127   - lib3270_free((void *) this->data);
  126 + lib3270_free((void *) this->ptr);
128 127 }
129 128  
130 129 operator bool() const noexcept {
131   - return this->data != NULL;
  130 + return this->ptr != NULL;
132 131 }
133 132  
134 133 T * operator->() {
135   - return this->data;
  134 + return this->ptr;
136 135 }
137 136  
138 137 operator T *() const noexcept {
139   - return this->data;
  138 + return this->ptr;
140 139 }
141 140  
142 141 };
... ... @@ -230,6 +229,7 @@
230 229 SSL_SECURE = LIB3270_SSL_SECURE, ///< @brief Connection secure with CA check
231 230 SSL_NEGOTIATED = LIB3270_SSL_NEGOTIATED, ///< @brief Connection secure, no CA, self-signed or expired CRL
232 231 SSL_NEGOTIATING = LIB3270_SSL_NEGOTIATING, ///< @brief Negotiating SSL
  232 + SSL_VERIFYING = LIB3270_SSL_VERIFYING, ///< @brief Verifying SSL (Getting CRL)
233 233 SSL_UNDEFINED = LIB3270_SSL_UNDEFINED ///< @brief Undefined
234 234 };
235 235  
... ... @@ -451,6 +451,15 @@
451 451  
452 452 public:
453 453  
  454 + struct Cursor {
  455 + unsigned short row;
  456 + unsigned short col;
  457 +
  458 + Cursor(unsigned short r, unsigned short c) : row(r), col(c) {
  459 + }
  460 +
  461 + };
  462 +
454 463 /// @brief Get an instance of the TN3270 session based on the supplied ID.
455 464 static Session * getInstance(const char *id = nullptr, const char *charset = nullptr);
456 465 virtual ~Session();
... ... @@ -586,6 +595,9 @@
586 595 /// @brief Get cursor address
587 596 virtual unsigned short getCursorAddress() = 0;
588 597  
  598 + /// @brief Get cursor position.
  599 + virtual struct Cursor getCursorPosition() = 0;
  600 +
589 601 /// @brief Set local charset.
590 602 virtual void setCharSet(const char *charset = NULL) = 0;
591 603  
... ... @@ -783,6 +795,10 @@
783 795 return session->getCursorAddress();
784 796 }
785 797  
  798 + inline Session::Cursor getCursorPosition() {
  799 + return session->getCursorPosition();
  800 + }
  801 +
786 802 inline void setHostURL(const char *url) {
787 803 session->setHostURL(url);
788 804 }
... ...
client/src/session/local/attribute.cc
... ... @@ -527,6 +527,18 @@
527 527 return rc;
528 528 }
529 529  
  530 + struct Session::Cursor Local::Session::getCursorPosition() {
  531 +
  532 + std::lock_guard<std::recursive_mutex> lock(sync);
  533 +
  534 + unsigned short row = 0, col = 0;
  535 +
  536 +
  537 + return Session::Cursor(row,col);
  538 +
  539 + };
  540 +
  541 +
530 542 std::string Local::Session::getVersion() const {
531 543  
532 544 std::lock_guard<std::recursive_mutex> lock(const_cast<Local::Session *>(this)->sync);
... ...
client/src/session/local/private.h
... ... @@ -161,7 +161,7 @@
161 161 unsigned short setCursor(int addr) override;
162 162 unsigned short setCursor(unsigned short row, unsigned short col) override;
163 163 unsigned short getCursorAddress() override;
164   -
  164 + Session::Cursor getCursorPosition() override;
165 165  
166 166 };
167 167  
... ...
client/src/session/remote/private.h
... ... @@ -166,6 +166,7 @@
166 166 unsigned short setCursor(int addr) override;
167 167 unsigned short setCursor(unsigned short row, unsigned short col) override;
168 168 unsigned short getCursorAddress() override;
  169 + Session::Cursor getCursorPosition() override;
169 170  
170 171 };
171 172  
... ...
client/src/testprogram/testprogram.cc
... ... @@ -103,7 +103,7 @@
103 103  
104 104 TN3270::Host host{session};
105 105  
106   - name="url";
  106 + // name="url";
107 107  
108 108 cout << endl << endl;
109 109 for(auto attribute : host.getAttributes()) {
... ...
server/pw3270-plugin-ipc.cbp
... ... @@ -68,9 +68,6 @@
68 68 <Option compilerVar="CC" />
69 69 </Unit>
70 70 <Unit filename="src/core/linux/gobject.h" />
71   - <Unit filename="src/core/linux/response.c">
72   - <Option compilerVar="CC" />
73   - </Unit>
74 71 <Unit filename="src/core/linux/start.c">
75 72 <Option compilerVar="CC" />
76 73 </Unit>
... ... @@ -102,6 +99,9 @@
102 99 <Unit filename="src/core/methods/wait.c">
103 100 <Option compilerVar="CC" />
104 101 </Unit>
  102 + <Unit filename="src/core/response.c">
  103 + <Option compilerVar="CC" />
  104 + </Unit>
105 105 <Unit filename="src/core/setproperties.c">
106 106 <Option compilerVar="CC" />
107 107 </Unit>
... ... @@ -161,9 +161,6 @@
161 161 <Option compilerVar="CC" />
162 162 </Unit>
163 163 <Extensions>
164   - <code_completion />
165   - <envvars />
166   - <debugger />
167 164 <lib_finder disable_auto="1" />
168 165 </Extensions>
169 166 </Project>
... ...
server/src/core/linux/gobject.c
... ... @@ -197,6 +197,10 @@ void ipc3270_add_terminal_introspection(GString *introspection) {
197 197 " <arg type='i' name='addr' direction='in' />" \
198 198 " <arg type='i' name='old' direction='out' />" \
199 199 " </method>" \
  200 + " <method name= 'getCursorPosition'>" \
  201 + " <arg type='u' name='row' direction='out' />" \
  202 + " <arg type='u' name='col' direction='out' />" \
  203 + " </method>" \
200 204 " <method name= 'getFieldAttribute'>" \
201 205 " <arg type='u' name='attribute' direction='out' />" \
202 206 " </method>" \
... ...
server/src/core/linux/response.c
... ... @@ -1,149 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como - e possui - linhas de código.
22   - *
23   - * Referências:
24   - *
25   - * https://github.com/joprietoe/gdbus/blob/master/gdbus-example-server.c
26   - * https://github.com/bratsche/glib/blob/master/gio/tests/gdbus-example-export.c
27   - *
28   - * Contatos:
29   - *
30   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
31   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
32   - *
33   - */
34   -
35   -#include "gobject.h"
36   -#include <lib3270.h>
37   -#include <lib3270/actions.h>
38   -#include <lib3270/properties.h>
39   -#include <lib3270/toggle.h>
40   -#include <v3270.h>
41   -
42   -#include <dbus/dbus-glib.h>
43   -#include <dbus/dbus-glib-bindings.h>
44   -
45   -/*--[ Widget definition ]----------------------------------------------------------------------------*/
46   -
47   -struct _ipc3270Response {
48   - GObject parent;
49   - GVariant * value;
50   -};
51   -
52   -struct _ipc3270ResponseClass {
53   -
54   - GObjectClass parent;
55   - int dummy;
56   -
57   -};
58   -
59   -
60   -G_DEFINE_TYPE(ipc3270Response, ipc3270Response, G_TYPE_OBJECT)
61   -
62   -/*--[ Implement ]------------------------------------------------------------------------------------*/
63   -
64   -static void ipc3270Response_finalize(GObject *object) {
65   -
66   - ipc3270Response * response = IPC3270_RESPONSE(object);
67   -
68   - debug("%s value=%p",__FUNCTION__,response->value);
69   -
70   - if(response->value)
71   - g_variant_unref(response->value);
72   -
73   -}
74   -
75   -
76   -static void ipc3270Response_class_init(ipc3270ResponseClass *klass) {
77   -
78   - debug("%s",__FUNCTION__);
79   -
80   - GObjectClass *object_class;
81   - object_class = G_OBJECT_CLASS (klass);
82   - object_class->finalize = ipc3270Response_finalize;
83   -
84   -}
85   -
86   -static void ipc3270Response_init(ipc3270Response *object) {
87   -
88   - object->value = NULL;
89   -
90   -}
91   -
92   -GObject * ipc3270_response_new() {
93   - return g_object_new(GLIB_TYPE_IPC3270_RESPONSE, NULL);
94   -}
95   -
96   -void ipc3270_response_append_int32(GObject *object, gint32 value) {
97   -
98   - ipc3270Response * response = IPC3270_RESPONSE(object);
99   -
100   - if(response->value)
101   - g_variant_unref(response->value);
102   -
103   - response->value = g_variant_new_int32(value);
104   -}
105   -
106   -void ipc3270_response_append_uint32(GObject *object, guint32 value) {
107   -
108   - ipc3270Response * response = IPC3270_RESPONSE(object);
109   -
110   - if(response->value)
111   - g_variant_unref(response->value);
112   -
113   - response->value = g_variant_new_uint32(value);
114   -}
115   -
116   -void ipc3270_response_append_string(GObject *object, const gchar *text) {
117   -
118   - ipc3270Response * response = IPC3270_RESPONSE(object);
119   -
120   - if(response->value)
121   - g_variant_unref(response->value);
122   -
123   - response->value = g_variant_new_string(text);
124   -
125   -}
126   -
127   -void ipc3270_response_append_boolean(GObject *object, gboolean value) {
128   -
129   - ipc3270Response * response = IPC3270_RESPONSE(object);
130   -
131   - if(response->value)
132   - g_variant_unref(response->value);
133   -
134   - response->value = g_variant_new_boolean(value);
135   -}
136   -
137   -GVariant * ipc3270_response_steal_value(GObject *object) {
138   -
139   - ipc3270Response * response = IPC3270_RESPONSE(object);
140   -
141   - GVariant * value = response->value;
142   - response->value = NULL;
143   -
144   - return value;
145   -}
146   -
147   -gboolean ipc3270_response_has_values(GObject *object) {
148   - return IPC3270_RESPONSE(object)->value != NULL;
149   -}
server/src/core/linux/start.c
... ... @@ -67,8 +67,16 @@ static void
67 67 // It is an error if parameters is not of the right format: it must be a tuple containing the out-parameters of the D-Bus method.
68 68 // Even if the method has a single out-parameter, it must be contained in a tuple.
69 69  
70   - GVariant *values[] = { ipc3270_response_steal_value(response) };
71   - g_dbus_method_invocation_return_value(invocation, g_variant_new_tuple(values,1));
  70 + guint ix;
  71 + guint length = ipc3270_response_length(response);
  72 +
  73 + g_autofree GVariant ** values = g_new0(GVariant *, length);
  74 +
  75 + for(ix = 0; ix < length; ix++) {
  76 + values[ix] = ipc3270_response_steal_value(response);
  77 + }
  78 +
  79 + g_dbus_method_invocation_return_value(invocation, g_variant_new_tuple(values,length));
72 80  
73 81 } else {
74 82  
... ...
server/src/core/methods/cursor.c
... ... @@ -66,3 +66,22 @@ int ipc3270_method_set_cursor(GObject *session, GVariant *request, GObject *resp
66 66 return 0;
67 67 }
68 68  
  69 +int ipc3270_method_get_cursor_position(GObject *session, GVariant G_GNUC_UNUSED(*request), GObject *response, GError **error) {
  70 +
  71 + H3270 *hSession = ipc3270_get_session(session);
  72 +
  73 + if(*error)
  74 + return 0;
  75 +
  76 + unsigned short row, col;
  77 +
  78 + int rc = lib3270_get_cursor_position(hSession,&row,&col);
  79 + if(rc)
  80 + return rc;
  81 +
  82 + ipc3270_response_append_uint32(response, (guint32) row);
  83 + ipc3270_response_append_uint32(response, (guint32) col);
  84 +
  85 + return 0;
  86 +}
  87 +
... ...
server/src/core/methods/methods.c
... ... @@ -71,6 +71,7 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req
71 71  
72 72 { "setCursorAddress", ipc3270_method_set_cursor },
73 73 { "setCursorPosition", ipc3270_method_set_cursor },
  74 + { "getCursorPosition", ipc3270_method_get_cursor_position },
74 75  
75 76 { "action", ipc3270_method_action },
76 77 { "activatable", ipc3270_method_activatable },
... ...
server/src/core/methods/private.h
... ... @@ -57,6 +57,7 @@
57 57 G_GNUC_INTERNAL int ipc3270_method_wait_for_keyboard_unlock(GObject *session, GVariant *request, GObject *response, GError **error);
58 58  
59 59 G_GNUC_INTERNAL int ipc3270_method_set_cursor(GObject *session, GVariant *request, GObject *response, GError **error);
  60 + G_GNUC_INTERNAL int ipc3270_method_get_cursor_position(GObject *session, GVariant *request, GObject *response, GError **error);
60 61  
61 62 G_GNUC_INTERNAL int ipc3270_method_action(GObject *session, GVariant *request, GObject *response, GError **error);
62 63 G_GNUC_INTERNAL int ipc3270_method_activatable(GObject *session, GVariant *request, GObject *response, GError **error);
... ...
server/src/core/response.c 0 → 100644
... ... @@ -0,0 +1,139 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Referências:
  24 + *
  25 + * https://github.com/joprietoe/gdbus/blob/master/gdbus-example-server.c
  26 + * https://github.com/bratsche/glib/blob/master/gio/tests/gdbus-example-export.c
  27 + *
  28 + * Contatos:
  29 + *
  30 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  31 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  32 + *
  33 + */
  34 +
  35 +#include <internals.h>
  36 +
  37 +#include <glib.h>
  38 +#include <gio/gio.h>
  39 +
  40 +#include <ipc-glib.h>
  41 +#include <lib3270.h>
  42 +
  43 +#include <lib3270/actions.h>
  44 +#include <lib3270/properties.h>
  45 +#include <lib3270/toggle.h>
  46 +#include <v3270.h>
  47 +
  48 +#include <dbus/dbus-glib.h>
  49 +#include <dbus/dbus-glib-bindings.h>
  50 +
  51 +/*--[ Widget definition ]----------------------------------------------------------------------------*/
  52 +
  53 +struct _ipc3270Response {
  54 + GObject parent;
  55 + GList * values;
  56 +};
  57 +
  58 +struct _ipc3270ResponseClass {
  59 +
  60 + GObjectClass parent;
  61 + int dummy;
  62 +
  63 +};
  64 +
  65 +
  66 +G_DEFINE_TYPE(ipc3270Response, ipc3270Response, G_TYPE_OBJECT)
  67 +
  68 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  69 +
  70 +static void ipc3270Response_finalize(GObject *object) {
  71 +
  72 + ipc3270Response * response = IPC3270_RESPONSE(object);
  73 +
  74 + if(response->values)
  75 + g_list_free_full(response->values,(GDestroyNotify) g_variant_unref);
  76 +
  77 +}
  78 +
  79 +
  80 +static void ipc3270Response_class_init(ipc3270ResponseClass *klass) {
  81 +
  82 + debug("%s",__FUNCTION__);
  83 +
  84 + GObjectClass *object_class;
  85 + object_class = G_OBJECT_CLASS (klass);
  86 + object_class->finalize = ipc3270Response_finalize;
  87 +
  88 +}
  89 +
  90 +static void ipc3270Response_init(ipc3270Response *object) {
  91 +
  92 + object->values = NULL;
  93 +
  94 +}
  95 +
  96 +GObject * ipc3270_response_new() {
  97 + return g_object_new(GLIB_TYPE_IPC3270_RESPONSE, NULL);
  98 +}
  99 +
  100 +void ipc3270_response_append(GObject *object, GVariant *value) {
  101 + ipc3270Response * response = IPC3270_RESPONSE(object);
  102 + response->values = g_list_append(response->values,value);
  103 +}
  104 +
  105 +void ipc3270_response_append_int32(GObject *object, gint32 value) {
  106 + ipc3270_response_append(object,g_variant_new_int32(value));
  107 +}
  108 +
  109 +void ipc3270_response_append_uint32(GObject *object, guint32 value) {
  110 + ipc3270_response_append(object,g_variant_new_uint32(value));
  111 +}
  112 +
  113 +void ipc3270_response_append_string(GObject *object, const gchar *text) {
  114 + ipc3270_response_append(object,g_variant_new_string(text));
  115 +}
  116 +
  117 +void ipc3270_response_append_boolean(GObject *object, gboolean value) {
  118 + ipc3270_response_append(object,g_variant_new_boolean(value));
  119 +}
  120 +
  121 +GVariant * ipc3270_response_steal_value(GObject *object) {
  122 +
  123 + ipc3270Response * response = IPC3270_RESPONSE(object);
  124 +
  125 + GList *first = g_list_first(response->values);
  126 + GVariant * value = first->data;
  127 +
  128 + response->values = g_list_remove(response->values,value);
  129 +
  130 + return value;
  131 +}
  132 +
  133 +guint ipc3270_response_length(GObject *object) {
  134 + return g_list_length(IPC3270_RESPONSE(object)->values);
  135 +}
  136 +
  137 +gboolean ipc3270_response_has_values(GObject *object) {
  138 + return IPC3270_RESPONSE(object)->values != NULL;
  139 +}
... ...
server/src/core/windows/response.c
... ... @@ -1,150 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como - e possui - linhas de código.
22   - *
23   - * Referências:
24   - *
25   - * https://github.com/joprietoe/gdbus/blob/master/gdbus-example-server.c
26   - * https://github.com/bratsche/glib/blob/master/gio/tests/gdbus-example-export.c
27   - *
28   - * Contatos:
29   - *
30   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
31   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
32   - *
33   - */
34   -
35   -#include "gobject.h"
36   -#include <lib3270.h>
37   -#include <lib3270/actions.h>
38   -#include <lib3270/properties.h>
39   -#include <lib3270/toggle.h>
40   -#include <lib3270/log.h>
41   -#include <v3270.h>
42   -
43   -/*--[ Widget definition ]----------------------------------------------------------------------------*/
44   -
45   -struct _ipc3270Response {
46   - GObject parent;
47   - GVariant * value;
48   -};
49   -
50   -struct _ipc3270ResponseClass {
51   -
52   - GObjectClass parent;
53   - int dummy;
54   -
55   -};
56   -
57   -
58   -G_DEFINE_TYPE(ipc3270Response, ipc3270Response, G_TYPE_OBJECT)
59   -
60   -/*--[ Implement ]------------------------------------------------------------------------------------*/
61   -
62   -static void ipc3270Response_finalize(GObject *object) {
63   -
64   - ipc3270Response * response = IPC3270_RESPONSE(object);
65   -
66   - debug("%s value=%p",__FUNCTION__,response->value);
67   -
68   - if(response->value)
69   - g_variant_unref(response->value);
70   -
71   -}
72   -
73   -
74   -static void ipc3270Response_class_init(ipc3270ResponseClass *klass) {
75   -
76   - debug("%s",__FUNCTION__);
77   -
78   - GObjectClass *object_class;
79   - object_class = G_OBJECT_CLASS (klass);
80   - object_class->finalize = ipc3270Response_finalize;
81   -
82   -}
83   -
84   -static void ipc3270Response_init(ipc3270Response *object) {
85   -
86   - object->value = NULL;
87   -
88   -}
89   -
90   -GObject * ipc3270_response_new() {
91   - return g_object_new(GLIB_TYPE_IPC3270_RESPONSE, NULL);
92   -}
93   -
94   -void ipc3270_response_append_int32(GObject *object, gint32 value) {
95   -
96   - debug("%s(%d)",__FUNCTION__,value);
97   -
98   - ipc3270Response * response = IPC3270_RESPONSE(object);
99   -
100   - if(response->value)
101   - g_variant_unref(response->value);
102   -
103   - response->value = g_variant_new_int32(value);
104   -}
105   -
106   -void ipc3270_response_append_uint32(GObject *object, guint32 value) {
107   -
108   - ipc3270Response * response = IPC3270_RESPONSE(object);
109   -
110   - if(response->value)
111   - g_variant_unref(response->value);
112   -
113   - response->value = g_variant_new_uint32(value);
114   -}
115   -
116   -void ipc3270_response_append_string(GObject *object, const gchar *text) {
117   -
118   - ipc3270Response * response = IPC3270_RESPONSE(object);
119   -
120   - if(response->value)
121   - g_variant_unref(response->value);
122   -
123   - response->value = g_variant_new_string(text);
124   -
125   -}
126   -
127   -void ipc3270_response_append_boolean(GObject *object, gboolean value) {
128   -
129   - ipc3270Response * response = IPC3270_RESPONSE(object);
130   -
131   - if(response->value)
132   - g_variant_unref(response->value);
133   -
134   - response->value = g_variant_new_boolean(value);
135   -}
136   -
137   -
138   -GVariant * ipc3270_response_steal_value(GObject *object) {
139   -
140   - ipc3270Response * response = IPC3270_RESPONSE(object);
141   -
142   - GVariant * value = response->value;
143   - response->value = NULL;
144   -
145   - return value;
146   -}
147   -
148   -gboolean ipc3270_response_has_values(GObject *object) {
149   - return IPC3270_RESPONSE(object)->value != NULL;
150   -}
server/src/include/ipc-glib.h
... ... @@ -113,6 +113,8 @@
113 113 void ipc3270_response_append_boolean(GObject *object, gboolean value);
114 114  
115 115 gboolean ipc3270_response_has_values(GObject *object);
  116 + guint ipc3270_response_length(GObject *object);
  117 +
116 118 GVariant * ipc3270_response_steal_value(GObject *object);
117 119  
118 120  
... ...
server/src/testprogram/testprogram.c
... ... @@ -43,6 +43,7 @@
43 43 #include <glib.h>
44 44 #include <glib/gstdio.h>
45 45 #include <lib3270/toggle.h>
  46 + #include <lib3270/ssl.h>
46 47  
47 48 /*---[ Globals ]------------------------------------------------------------------------------------*/
48 49  
... ... @@ -106,6 +107,9 @@
106 107 GtkWidget * notebook = gtk_notebook_new();
107 108 GModule * module = NULL;
108 109  
  110 + // Hack to speed up the tests.
  111 + lib3270_ssl_set_crl_download(v3270_get_session(terminal),0);
  112 +
109 113 gtk_widget_set_name(window,session_name);
110 114 v3270_set_session_name(terminal,session_name);
111 115  
... ...
server/testscripts/dbus.conf 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +
  2 +PRODUCT_NAME=$(pkg-config --variable=product_name lib3270)
  3 +
  4 +DBUS_DEST=br.com.bb.${PRODUCT_NAME}.a
  5 +DBUS_PATH="/br/com/bb/${PRODUCT_NAME}/a"
  6 +DBUS_INTERFACE="br.com.bb.tn3270.session"
... ...
server/testscripts/getcursorposition.sh 0 → 100755
... ... @@ -0,0 +1,14 @@
  1 +#!/bin/bash
  2 +#
  3 +# https://stackoverflow.com/questions/48648952/set-get-property-using-dbus-send
  4 +#
  5 +
  6 +. ./dbus.conf
  7 +
  8 +dbus-send \
  9 + --session \
  10 + --dest=${DBUS_DEST} \
  11 + --print-reply \
  12 + "${DBUS_PATH}" \
  13 + "${DBUS_INTERFACE}.getCursorPosition"
  14 +
... ...
server/testscripts/introspect.sh
1 1 #!/bin/bash
2 2  
3   -PRODUCT_NAME=$(pkg-config --variable=product_name lib3270)
  3 +. ./dbus.conf
4 4  
5 5 gdbus \
6 6 introspect \
7 7 --session \
8   - --dest=br.com.bb.${PRODUCT_NAME}.a \
9   - --object-path=/br/com/bb/${PRODUCT_NAME}/a
  8 + --dest=${DBUS_DEST} \
  9 + --object-path="${DBUS_PATH}"
10 10  
... ...