Commit aa4812b80d3e6a12dae8d74e8375c94c94407bc1

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

Adding new method to the ipc service core.

server/src/core/linux/gobject.c
... ... @@ -140,6 +140,10 @@ void ipc3270_add_terminal_introspection(GString *introspection) {
140 140 " <arg type='y' name='lf' direction='in' />" \
141 141 " <arg type='s' name='text' direction='out' />" \
142 142 " </method>" \
  143 + " <method name='setField'>" \
  144 + " <arg type='s' name='text' direction='in' />" \
  145 + " <arg type='i' name='result' direction='out' />" \
  146 + " </method>" \
143 147 " <method name='setStringAtAddress'>" \
144 148 " <arg type='i' name='addr' direction='in' />" \
145 149 " <arg type='s' name='text' direction='in' />" \
... ...
server/src/core/methods/methods.c
... ... @@ -63,6 +63,7 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req
63 63 { "waitForStringAt", ipc3270_method_wait_for_string },
64 64 { "waitForStringAtAddress", ipc3270_method_wait_for_string },
65 65  
  66 + { "setField", ipc3270_method_set_field_contents },
66 67 { "getFieldAttribute", ipc3270_method_get_field_attribute },
67 68 { "getFieldAttributeAt", ipc3270_method_get_field_attribute },
68 69 { "getFieldAttributeAtAddress", ipc3270_method_get_field_attribute },
... ...
server/src/core/methods/private.h
... ... @@ -46,6 +46,7 @@
46 46 G_GNUC_INTERNAL int ipc3270_method_get_string(GObject *session, GVariant *request, GObject *response, GError **error);
47 47  
48 48 G_GNUC_INTERNAL int ipc3270_method_set_string(GObject *session, GVariant *request, GObject *response, GError **error);
  49 + G_GNUC_INTERNAL int ipc3270_method_set_field_contents(GObject *session, GVariant *request, GObject *response, GError **error);
49 50  
50 51 G_GNUC_INTERNAL int ipc3270_method_wait_for_string(GObject *session, GVariant *request, GObject *response, GError **error);
51 52  
... ...
server/src/core/methods/set.c
... ... @@ -31,6 +31,37 @@
31 31 #include <errno.h>
32 32 #include <string.h>
33 33  
  34 +int ipc3270_method_set_field_contents(GObject *session, GVariant *request, GObject *response, GError **error)
  35 +{
  36 + H3270 *hSession = ipc3270_get_session(session);
  37 +
  38 + if(*error)
  39 + return 0;
  40 +
  41 + if(g_variant_n_children(request) != 1)
  42 + return EINVAL;
  43 +
  44 + gchar *text = NULL;
  45 + g_variant_get(request, "(&s)", &text);
  46 +
  47 + if(!text)
  48 + return EINVAL;
  49 +
  50 + g_autofree gchar * converted = g_convert_with_fallback(text,-1,lib3270_get_display_charset(hSession),"UTF-8","?",NULL,NULL,error);
  51 +
  52 + int rc = lib3270_set_field(hSession,converted,-1);
  53 +
  54 + if(rc < 0) {
  55 + debug("lib3270_set_field has failed: %s", strerror(-rc));
  56 + return -rc;
  57 + }
  58 +
  59 + ipc3270_response_append_int32(response, rc);
  60 +
  61 + return 0;
  62 +
  63 +}
  64 +
34 65 int ipc3270_method_set_string(GObject *session, GVariant *request, GObject *response, GError **error) {
35 66  
36 67 H3270 *hSession = ipc3270_get_session(session);
... ...