Commit 9167ba7281d1267147ffdb7ebbf4978c6e76c551
1 parent
dcf0fc2c
Exists in
master
and in
1 other branch
Adding get cursor position method.
Showing
19 changed files
with
244 additions
and
319 deletions
Show diff stats
client/src/include/lib3270/ipc.h
@@ -116,27 +116,26 @@ | @@ -116,27 +116,26 @@ | ||
116 | template<typename T> | 116 | template<typename T> |
117 | class lib3270_ptr { | 117 | class lib3270_ptr { |
118 | private: | 118 | private: |
119 | - T *data; | 119 | + T *ptr; |
120 | 120 | ||
121 | public: | 121 | public: |
122 | - lib3270_ptr(T *data) { | ||
123 | - this->data = data; | 122 | + lib3270_ptr(T *d) : ptr(d) { |
124 | } | 123 | } |
125 | 124 | ||
126 | ~lib3270_ptr() { | 125 | ~lib3270_ptr() { |
127 | - lib3270_free((void *) this->data); | 126 | + lib3270_free((void *) this->ptr); |
128 | } | 127 | } |
129 | 128 | ||
130 | operator bool() const noexcept { | 129 | operator bool() const noexcept { |
131 | - return this->data != NULL; | 130 | + return this->ptr != NULL; |
132 | } | 131 | } |
133 | 132 | ||
134 | T * operator->() { | 133 | T * operator->() { |
135 | - return this->data; | 134 | + return this->ptr; |
136 | } | 135 | } |
137 | 136 | ||
138 | operator T *() const noexcept { | 137 | operator T *() const noexcept { |
139 | - return this->data; | 138 | + return this->ptr; |
140 | } | 139 | } |
141 | 140 | ||
142 | }; | 141 | }; |
@@ -230,6 +229,7 @@ | @@ -230,6 +229,7 @@ | ||
230 | SSL_SECURE = LIB3270_SSL_SECURE, ///< @brief Connection secure with CA check | 229 | SSL_SECURE = LIB3270_SSL_SECURE, ///< @brief Connection secure with CA check |
231 | SSL_NEGOTIATED = LIB3270_SSL_NEGOTIATED, ///< @brief Connection secure, no CA, self-signed or expired CRL | 230 | SSL_NEGOTIATED = LIB3270_SSL_NEGOTIATED, ///< @brief Connection secure, no CA, self-signed or expired CRL |
232 | SSL_NEGOTIATING = LIB3270_SSL_NEGOTIATING, ///< @brief Negotiating SSL | 231 | SSL_NEGOTIATING = LIB3270_SSL_NEGOTIATING, ///< @brief Negotiating SSL |
232 | + SSL_VERIFYING = LIB3270_SSL_VERIFYING, ///< @brief Verifying SSL (Getting CRL) | ||
233 | SSL_UNDEFINED = LIB3270_SSL_UNDEFINED ///< @brief Undefined | 233 | SSL_UNDEFINED = LIB3270_SSL_UNDEFINED ///< @brief Undefined |
234 | }; | 234 | }; |
235 | 235 | ||
@@ -451,6 +451,15 @@ | @@ -451,6 +451,15 @@ | ||
451 | 451 | ||
452 | public: | 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 | /// @brief Get an instance of the TN3270 session based on the supplied ID. | 463 | /// @brief Get an instance of the TN3270 session based on the supplied ID. |
455 | static Session * getInstance(const char *id = nullptr, const char *charset = nullptr); | 464 | static Session * getInstance(const char *id = nullptr, const char *charset = nullptr); |
456 | virtual ~Session(); | 465 | virtual ~Session(); |
@@ -586,6 +595,9 @@ | @@ -586,6 +595,9 @@ | ||
586 | /// @brief Get cursor address | 595 | /// @brief Get cursor address |
587 | virtual unsigned short getCursorAddress() = 0; | 596 | virtual unsigned short getCursorAddress() = 0; |
588 | 597 | ||
598 | + /// @brief Get cursor position. | ||
599 | + virtual struct Cursor getCursorPosition() = 0; | ||
600 | + | ||
589 | /// @brief Set local charset. | 601 | /// @brief Set local charset. |
590 | virtual void setCharSet(const char *charset = NULL) = 0; | 602 | virtual void setCharSet(const char *charset = NULL) = 0; |
591 | 603 | ||
@@ -783,6 +795,10 @@ | @@ -783,6 +795,10 @@ | ||
783 | return session->getCursorAddress(); | 795 | return session->getCursorAddress(); |
784 | } | 796 | } |
785 | 797 | ||
798 | + inline Session::Cursor getCursorPosition() { | ||
799 | + return session->getCursorPosition(); | ||
800 | + } | ||
801 | + | ||
786 | inline void setHostURL(const char *url) { | 802 | inline void setHostURL(const char *url) { |
787 | session->setHostURL(url); | 803 | session->setHostURL(url); |
788 | } | 804 | } |
client/src/session/local/attribute.cc
@@ -527,6 +527,18 @@ | @@ -527,6 +527,18 @@ | ||
527 | return rc; | 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 | std::string Local::Session::getVersion() const { | 542 | std::string Local::Session::getVersion() const { |
531 | 543 | ||
532 | std::lock_guard<std::recursive_mutex> lock(const_cast<Local::Session *>(this)->sync); | 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,7 +161,7 @@ | ||
161 | unsigned short setCursor(int addr) override; | 161 | unsigned short setCursor(int addr) override; |
162 | unsigned short setCursor(unsigned short row, unsigned short col) override; | 162 | unsigned short setCursor(unsigned short row, unsigned short col) override; |
163 | unsigned short getCursorAddress() override; | 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,6 +166,7 @@ | ||
166 | unsigned short setCursor(int addr) override; | 166 | unsigned short setCursor(int addr) override; |
167 | unsigned short setCursor(unsigned short row, unsigned short col) override; | 167 | unsigned short setCursor(unsigned short row, unsigned short col) override; |
168 | unsigned short getCursorAddress() override; | 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,7 +103,7 @@ | ||
103 | 103 | ||
104 | TN3270::Host host{session}; | 104 | TN3270::Host host{session}; |
105 | 105 | ||
106 | - name="url"; | 106 | + // name="url"; |
107 | 107 | ||
108 | cout << endl << endl; | 108 | cout << endl << endl; |
109 | for(auto attribute : host.getAttributes()) { | 109 | for(auto attribute : host.getAttributes()) { |
server/pw3270-plugin-ipc.cbp
@@ -68,9 +68,6 @@ | @@ -68,9 +68,6 @@ | ||
68 | <Option compilerVar="CC" /> | 68 | <Option compilerVar="CC" /> |
69 | </Unit> | 69 | </Unit> |
70 | <Unit filename="src/core/linux/gobject.h" /> | 70 | <Unit filename="src/core/linux/gobject.h" /> |
71 | - <Unit filename="src/core/linux/response.c"> | ||
72 | - <Option compilerVar="CC" /> | ||
73 | - </Unit> | ||
74 | <Unit filename="src/core/linux/start.c"> | 71 | <Unit filename="src/core/linux/start.c"> |
75 | <Option compilerVar="CC" /> | 72 | <Option compilerVar="CC" /> |
76 | </Unit> | 73 | </Unit> |
@@ -102,6 +99,9 @@ | @@ -102,6 +99,9 @@ | ||
102 | <Unit filename="src/core/methods/wait.c"> | 99 | <Unit filename="src/core/methods/wait.c"> |
103 | <Option compilerVar="CC" /> | 100 | <Option compilerVar="CC" /> |
104 | </Unit> | 101 | </Unit> |
102 | + <Unit filename="src/core/response.c"> | ||
103 | + <Option compilerVar="CC" /> | ||
104 | + </Unit> | ||
105 | <Unit filename="src/core/setproperties.c"> | 105 | <Unit filename="src/core/setproperties.c"> |
106 | <Option compilerVar="CC" /> | 106 | <Option compilerVar="CC" /> |
107 | </Unit> | 107 | </Unit> |
@@ -161,9 +161,6 @@ | @@ -161,9 +161,6 @@ | ||
161 | <Option compilerVar="CC" /> | 161 | <Option compilerVar="CC" /> |
162 | </Unit> | 162 | </Unit> |
163 | <Extensions> | 163 | <Extensions> |
164 | - <code_completion /> | ||
165 | - <envvars /> | ||
166 | - <debugger /> | ||
167 | <lib_finder disable_auto="1" /> | 164 | <lib_finder disable_auto="1" /> |
168 | </Extensions> | 165 | </Extensions> |
169 | </Project> | 166 | </Project> |
server/src/core/linux/gobject.c
@@ -197,6 +197,10 @@ void ipc3270_add_terminal_introspection(GString *introspection) { | @@ -197,6 +197,10 @@ void ipc3270_add_terminal_introspection(GString *introspection) { | ||
197 | " <arg type='i' name='addr' direction='in' />" \ | 197 | " <arg type='i' name='addr' direction='in' />" \ |
198 | " <arg type='i' name='old' direction='out' />" \ | 198 | " <arg type='i' name='old' direction='out' />" \ |
199 | " </method>" \ | 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 | " <method name= 'getFieldAttribute'>" \ | 204 | " <method name= 'getFieldAttribute'>" \ |
201 | " <arg type='u' name='attribute' direction='out' />" \ | 205 | " <arg type='u' name='attribute' direction='out' />" \ |
202 | " </method>" \ | 206 | " </method>" \ |
server/src/core/linux/response.c
@@ -1,149 +0,0 @@ | @@ -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,8 +67,16 @@ static void | ||
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. | 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 | // Even if the method has a single out-parameter, it must be contained in a tuple. | 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 | } else { | 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,3 +66,22 @@ int ipc3270_method_set_cursor(GObject *session, GVariant *request, GObject *resp | ||
66 | return 0; | 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,6 +71,7 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req | ||
71 | 71 | ||
72 | { "setCursorAddress", ipc3270_method_set_cursor }, | 72 | { "setCursorAddress", ipc3270_method_set_cursor }, |
73 | { "setCursorPosition", ipc3270_method_set_cursor }, | 73 | { "setCursorPosition", ipc3270_method_set_cursor }, |
74 | + { "getCursorPosition", ipc3270_method_get_cursor_position }, | ||
74 | 75 | ||
75 | { "action", ipc3270_method_action }, | 76 | { "action", ipc3270_method_action }, |
76 | { "activatable", ipc3270_method_activatable }, | 77 | { "activatable", ipc3270_method_activatable }, |
server/src/core/methods/private.h
@@ -57,6 +57,7 @@ | @@ -57,6 +57,7 @@ | ||
57 | G_GNUC_INTERNAL int ipc3270_method_wait_for_keyboard_unlock(GObject *session, GVariant *request, GObject *response, GError **error); | 57 | G_GNUC_INTERNAL int ipc3270_method_wait_for_keyboard_unlock(GObject *session, GVariant *request, GObject *response, GError **error); |
58 | 58 | ||
59 | G_GNUC_INTERNAL int ipc3270_method_set_cursor(GObject *session, GVariant *request, GObject *response, GError **error); | 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 | G_GNUC_INTERNAL int ipc3270_method_action(GObject *session, GVariant *request, GObject *response, GError **error); | 62 | G_GNUC_INTERNAL int ipc3270_method_action(GObject *session, GVariant *request, GObject *response, GError **error); |
62 | G_GNUC_INTERNAL int ipc3270_method_activatable(GObject *session, GVariant *request, GObject *response, GError **error); | 63 | G_GNUC_INTERNAL int ipc3270_method_activatable(GObject *session, GVariant *request, GObject *response, GError **error); |
@@ -0,0 +1,139 @@ | @@ -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,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,6 +113,8 @@ | ||
113 | void ipc3270_response_append_boolean(GObject *object, gboolean value); | 113 | void ipc3270_response_append_boolean(GObject *object, gboolean value); |
114 | 114 | ||
115 | gboolean ipc3270_response_has_values(GObject *object); | 115 | gboolean ipc3270_response_has_values(GObject *object); |
116 | + guint ipc3270_response_length(GObject *object); | ||
117 | + | ||
116 | GVariant * ipc3270_response_steal_value(GObject *object); | 118 | GVariant * ipc3270_response_steal_value(GObject *object); |
117 | 119 | ||
118 | 120 |
server/src/testprogram/testprogram.c
@@ -43,6 +43,7 @@ | @@ -43,6 +43,7 @@ | ||
43 | #include <glib.h> | 43 | #include <glib.h> |
44 | #include <glib/gstdio.h> | 44 | #include <glib/gstdio.h> |
45 | #include <lib3270/toggle.h> | 45 | #include <lib3270/toggle.h> |
46 | + #include <lib3270/ssl.h> | ||
46 | 47 | ||
47 | /*---[ Globals ]------------------------------------------------------------------------------------*/ | 48 | /*---[ Globals ]------------------------------------------------------------------------------------*/ |
48 | 49 | ||
@@ -106,6 +107,9 @@ | @@ -106,6 +107,9 @@ | ||
106 | GtkWidget * notebook = gtk_notebook_new(); | 107 | GtkWidget * notebook = gtk_notebook_new(); |
107 | GModule * module = NULL; | 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 | gtk_widget_set_name(window,session_name); | 113 | gtk_widget_set_name(window,session_name); |
110 | v3270_set_session_name(terminal,session_name); | 114 | v3270_set_session_name(terminal,session_name); |
111 | 115 |
@@ -0,0 +1,14 @@ | @@ -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 | #!/bin/bash | 1 | #!/bin/bash |
2 | 2 | ||
3 | -PRODUCT_NAME=$(pkg-config --variable=product_name lib3270) | 3 | +. ./dbus.conf |
4 | 4 | ||
5 | gdbus \ | 5 | gdbus \ |
6 | introspect \ | 6 | introspect \ |
7 | --session \ | 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 |