Commit aa4812b80d3e6a12dae8d74e8375c94c94407bc1
1 parent
c6a08916
Exists in
master
and in
1 other branch
Adding new method to the ipc service core.
Showing
4 changed files
with
37 additions
and
0 deletions
Show diff stats
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); | ... | ... |