Commit 7e8147aadfcf7a5117195f0902c2e9c5945d0092

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

+ Implementing IPC methods for linux.

Showing 1 changed file with 42 additions and 3 deletions   Show diff stats
src/linux/methods.c
@@ -49,7 +49,18 @@ ipc3270_method_call (GDBusConnection *connection, @@ -49,7 +49,18 @@ ipc3270_method_call (GDBusConnection *connection,
49 GDBusMethodInvocation *invocation, 49 GDBusMethodInvocation *invocation,
50 gpointer user_data) 50 gpointer user_data)
51 { 51 {
  52 +
  53 + static const struct
  54 + {
  55 + const gchar *name;
  56 + int (*call)(H3270 *hSession, int keycode);
  57 + } int_methods[] = {
  58 + { "pfkey", lib3270_pfkey },
  59 + { "pakey", lib3270_pakey }
  60 + };
  61 +
52 size_t ix; 62 size_t ix;
  63 + g_autoptr (GError) error = NULL;
53 64
54 // Check action table. 65 // Check action table.
55 const LIB3270_ACTION_ENTRY * actions = lib3270_get_action_table(); 66 const LIB3270_ACTION_ENTRY * actions = lib3270_get_action_table();
@@ -57,13 +68,11 @@ ipc3270_method_call (GDBusConnection *connection, @@ -57,13 +68,11 @@ ipc3270_method_call (GDBusConnection *connection,
57 { 68 {
58 if(!g_ascii_strcasecmp(actions[ix].name,method_name)) { 69 if(!g_ascii_strcasecmp(actions[ix].name,method_name)) {
59 70
60 - g_autoptr (GError) error = NULL;  
61 -  
62 int rc = actions[ix].call(IPC3270(user_data)->hSession); 71 int rc = actions[ix].call(IPC3270(user_data)->hSession);
63 if(rc) 72 if(rc)
64 { 73 {
65 // Failed 74 // Failed
66 - g_set_error(error,IPC3270(user_data)->error_domain,errno,"%s: %s",method_name,strerror(errno)); 75 + g_set_error(&error,IPC3270(user_data)->error_domain,errno,"%s: %s",method_name,strerror(errno));
67 g_dbus_method_invocation_return_gerror(invocation, error); 76 g_dbus_method_invocation_return_gerror(invocation, error);
68 } 77 }
69 else 78 else
@@ -72,9 +81,39 @@ ipc3270_method_call (GDBusConnection *connection, @@ -72,9 +81,39 @@ ipc3270_method_call (GDBusConnection *connection,
72 g_dbus_method_invocation_return_value (invocation, g_variant_new_int16((gint16) 0)); 81 g_dbus_method_invocation_return_value (invocation, g_variant_new_int16((gint16) 0));
73 82
74 } 83 }
  84 +
  85 + return;
75 } 86 }
76 } 87 }
77 88
  89 + // Check int methods
  90 + for(ix = 0; ix < G_N_ELEMENTS(int_methods); ix++)
  91 + {
  92 + if(!g_ascii_strcasecmp(int_methods[ix].name,method_name)) {
  93 +
  94 + gint value;
  95 + g_variant_get(parameters, "(i)", &value);
  96 +
  97 + int rc = int_methods[ix].call(IPC3270(user_data)->hSession, value);
  98 + if(rc)
  99 + {
  100 + // Failed
  101 + g_set_error(&error,IPC3270(user_data)->error_domain,errno,"%s: %s",method_name,strerror(errno));
  102 + g_dbus_method_invocation_return_gerror(invocation, error);
  103 + }
  104 + else
  105 + {
  106 + // Suceeded
  107 + g_dbus_method_invocation_return_value (invocation, g_variant_new_int16((gint16) 0));
  108 +
  109 + }
  110 +
  111 + return;
  112 +
  113 + }
  114 +
  115 + }
  116 +
78 g_dbus_method_invocation_return_error ( 117 g_dbus_method_invocation_return_error (
79 invocation, 118 invocation,
80 G_DBUS_ERROR, 119 G_DBUS_ERROR,