Commit bd5db506a79eed8551dd8acad93476e5ba49aa14
1 parent
4b0b7e0c
Exists in
master
and in
1 other branch
Fixing bug detected when using multiple sessions in the same process.
Showing
10 changed files
with
36 additions
and
11 deletions
Show diff stats
.gitignore
client/src/session/remote/linux/session.cc
| @@ -87,7 +87,11 @@ | @@ -87,7 +87,11 @@ | ||
| 87 | 87 | ||
| 88 | std::transform(this->name.begin(), this->name.end(), this->name.begin(),[](unsigned char c){ return std::tolower(c); }); | 88 | std::transform(this->name.begin(), this->name.end(), this->name.begin(),[](unsigned char c){ return std::tolower(c); }); |
| 89 | 89 | ||
| 90 | - this->path = "/br/com/bb/tn3270/session"; | 90 | + this->path = "/br/com/bb/"; |
| 91 | + this->path += string(id,(sep - id)); | ||
| 92 | + this->path += "/"; | ||
| 93 | + this->path += (sep+1); | ||
| 94 | + | ||
| 91 | this->interface = "br.com.bb.tn3270.session"; | 95 | this->interface = "br.com.bb.tn3270.session"; |
| 92 | 96 | ||
| 93 | debug("D-Bus Object name=\"",this->name,"\" D-Bus Object path=\"",this->path,"\""); | 97 | debug("D-Bus Object name=\"",this->name,"\" D-Bus Object path=\"",this->path,"\""); |
client/src/testprogram/testprogram.cc
| @@ -177,7 +177,7 @@ | @@ -177,7 +177,7 @@ | ||
| 177 | 177 | ||
| 178 | int main(int argc, char **argv) { | 178 | int main(int argc, char **argv) { |
| 179 | 179 | ||
| 180 | - const char * session = ""; // ":a"; | 180 | + const char * session = ":a"; |
| 181 | 181 | ||
| 182 | #ifndef _WIN32 | 182 | #ifndef _WIN32 |
| 183 | #pragma GCC diagnostic push | 183 | #pragma GCC diagnostic push |
| @@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
| 1 | +#!/bin/bash | ||
| 2 | + | ||
| 3 | +make clean | ||
| 4 | +if [ "$?" != "0" ]; then | ||
| 5 | + exit -1 | ||
| 6 | +fi | ||
| 7 | + | ||
| 8 | +make Debug | ||
| 9 | +if [ "$?" != "0" ]; then | ||
| 10 | + exit -1 | ||
| 11 | +fi | ||
| 12 | + | ||
| 13 | +sudo ln -sf $(readlink -f ../.bin/Debug/ipcserver.so) /usr/lib64/$(pkg-config --variable=product_name lib3270)-plugins/ipcserver.so | ||
| 14 | + |
server/src/core/getproperties.c
| @@ -46,7 +46,7 @@ GVariant * ipc3270_get_property(GObject *object, const gchar *property_name, GEr | @@ -46,7 +46,7 @@ GVariant * ipc3270_get_property(GObject *object, const gchar *property_name, GEr | ||
| 46 | 46 | ||
| 47 | errno = 0; // Just in case. | 47 | errno = 0; // Just in case. |
| 48 | 48 | ||
| 49 | - lib3270_trace_event(hSession,"GetProperty(%s) called on session %c\n",property_name,lib3270_get_session_id(hSession)); | 49 | + lib3270_write_event_trace(hSession,"GetProperty(%s) called on session %c\n",property_name,lib3270_get_session_id(hSession)); |
| 50 | 50 | ||
| 51 | // Boolean properties | 51 | // Boolean properties |
| 52 | const LIB3270_INT_PROPERTY * boolprop = lib3270_get_boolean_properties_list(); | 52 | const LIB3270_INT_PROPERTY * boolprop = lib3270_get_boolean_properties_list(); |
server/src/core/linux/start.c
| @@ -128,11 +128,12 @@ static gboolean register_object(ipc3270 *ipc, const char *name, char id) { | @@ -128,11 +128,12 @@ static gboolean register_object(ipc3270 *ipc, const char *name, char id) { | ||
| 128 | gchar *ptr; | 128 | gchar *ptr; |
| 129 | 129 | ||
| 130 | g_autofree gchar *object_name = g_strdup_printf(PW3270_IPC_SESSION_BUS_NAME,name,id); | 130 | g_autofree gchar *object_name = g_strdup_printf(PW3270_IPC_SESSION_BUS_NAME,name,id); |
| 131 | + g_autofree gchar *object_path = g_strdup_printf(PW3270_IPC_SESSION_BUS_PATH,name,id); | ||
| 131 | 132 | ||
| 132 | for(ptr=object_name;*ptr;ptr++) | 133 | for(ptr=object_name;*ptr;ptr++) |
| 133 | *ptr = g_ascii_tolower(*ptr); | 134 | *ptr = g_ascii_tolower(*ptr); |
| 134 | 135 | ||
| 135 | - debug("Requesting \"%s\"",object_name); | 136 | + debug("Requesting object \"%s\"",object_name); |
| 136 | 137 | ||
| 137 | // https://dbus.freedesktop.org/doc/dbus-specification.html | 138 | // https://dbus.freedesktop.org/doc/dbus-specification.html |
| 138 | GVariant * response = | 139 | GVariant * response = |
| @@ -187,10 +188,12 @@ static gboolean register_object(ipc3270 *ipc, const char *name, char id) { | @@ -187,10 +188,12 @@ static gboolean register_object(ipc3270 *ipc, const char *name, char id) { | ||
| 187 | 188 | ||
| 188 | GDBusNodeInfo * introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, NULL); | 189 | GDBusNodeInfo * introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, NULL); |
| 189 | 190 | ||
| 191 | + debug("interface=\"%s\" path=\"%s\"",PW3270_IPC_SESSION_INTERFACE_NAME,object_path); | ||
| 192 | + | ||
| 190 | // Register object-id | 193 | // Register object-id |
| 191 | ipc->dbus.id = g_dbus_connection_register_object ( | 194 | ipc->dbus.id = g_dbus_connection_register_object ( |
| 192 | ipc->dbus.connection, | 195 | ipc->dbus.connection, |
| 193 | - PW3270_IPC_SESSION_OBJECT_PATH, | 196 | + object_path, |
| 194 | introspection_data->interfaces[0], | 197 | introspection_data->interfaces[0], |
| 195 | &interface_vtable, | 198 | &interface_vtable, |
| 196 | ipc, | 199 | ipc, |
| @@ -203,7 +206,11 @@ static gboolean register_object(ipc3270 *ipc, const char *name, char id) { | @@ -203,7 +206,11 @@ static gboolean register_object(ipc3270 *ipc, const char *name, char id) { | ||
| 203 | 206 | ||
| 204 | if(error) { | 207 | if(error) { |
| 205 | 208 | ||
| 206 | - g_message("Can't register object \"%s\": %s",object_name,error->message); | 209 | + g_message("Can't register object \"%s\" with interface \"%s\" and path \"%s\": %s", |
| 210 | + object_name, | ||
| 211 | + PW3270_IPC_SESSION_INTERFACE_NAME, | ||
| 212 | + object_path, | ||
| 213 | + error->message); | ||
| 207 | g_error_free(error); | 214 | g_error_free(error); |
| 208 | return FALSE; | 215 | return FALSE; |
| 209 | 216 |
server/src/core/methods/methods.c
| @@ -81,7 +81,7 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req | @@ -81,7 +81,7 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req | ||
| 81 | 81 | ||
| 82 | debug("%s(%s,request=%p,response=%p)",__FUNCTION__,method_name,request,response); | 82 | debug("%s(%s,request=%p,response=%p)",__FUNCTION__,method_name,request,response); |
| 83 | 83 | ||
| 84 | - lib3270_trace_event(hSession,"Method %s called on session %c\n",method_name,lib3270_get_session_id(hSession)); | 84 | + lib3270_write_event_trace(hSession,"Method %s called on session %c\n",method_name,lib3270_get_session_id(hSession)); |
| 85 | 85 | ||
| 86 | for(ix = 0; ix < G_N_ELEMENTS(methods); ix++) { | 86 | for(ix = 0; ix < G_N_ELEMENTS(methods); ix++) { |
| 87 | 87 |
server/src/core/setproperties.c
| @@ -50,7 +50,7 @@ gboolean ipc3270_set_property(GObject *object, const gchar *property_name, GVari | @@ -50,7 +50,7 @@ gboolean ipc3270_set_property(GObject *object, const gchar *property_name, GVari | ||
| 50 | return FALSE; | 50 | return FALSE; |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | - lib3270_trace_event(hSession,"SetProperty(%s) called on session %c\n",property_name,lib3270_get_session_id(hSession)); | 53 | + lib3270_write_event_trace(hSession,"SetProperty(%s) called on session %c\n",property_name,lib3270_get_session_id(hSession)); |
| 54 | 54 | ||
| 55 | // Boolean properties | 55 | // Boolean properties |
| 56 | const LIB3270_INT_PROPERTY * boolprop = lib3270_get_boolean_properties_list(); | 56 | const LIB3270_INT_PROPERTY * boolprop = lib3270_get_boolean_properties_list(); |
server/src/include/ipc-glib.h
| @@ -46,8 +46,9 @@ | @@ -46,8 +46,9 @@ | ||
| 46 | #else | 46 | #else |
| 47 | 47 | ||
| 48 | #define PW3270_IPC_SESSION_BUS_NAME "br.com.bb.%s.%c" | 48 | #define PW3270_IPC_SESSION_BUS_NAME "br.com.bb.%s.%c" |
| 49 | + #define PW3270_IPC_SESSION_BUS_PATH "/br/com/bb/%s/%c" | ||
| 50 | + | ||
| 49 | #define PW3270_IPC_SESSION_INTERFACE_NAME "br.com.bb.tn3270.session" | 51 | #define PW3270_IPC_SESSION_INTERFACE_NAME "br.com.bb.tn3270.session" |
| 50 | - #define PW3270_IPC_SESSION_OBJECT_PATH "/br/com/bb/tn3270/session" | ||
| 51 | 52 | ||
| 52 | #define PW3270_IPC_SERVICE_BUS_NAME "br.com.bb.tn3270.service" | 53 | #define PW3270_IPC_SERVICE_BUS_NAME "br.com.bb.tn3270.service" |
| 53 | #define PW3270_IPC_SERVICE_INTERFACE_NAME "br.com.bb.tn3270.service" | 54 | #define PW3270_IPC_SERVICE_INTERFACE_NAME "br.com.bb.tn3270.service" |
server/src/plugin/plugin.c
| @@ -98,7 +98,7 @@ | @@ -98,7 +98,7 @@ | ||
| 98 | 98 | ||
| 99 | char id = lib3270_get_session_id(v3270_get_session(terminal)); | 99 | char id = lib3270_get_session_id(v3270_get_session(terminal)); |
| 100 | if(id) { | 100 | if(id) { |
| 101 | - g_autofree gchar * widget_name = g_strdup_printf("%s:%c",v3270_get_session_name(terminal),id); | 101 | + g_autofree gchar * widget_name = g_strdup_printf("%s:%c",session_name,id); |
| 102 | v3270_set_session_name(terminal, widget_name); | 102 | v3270_set_session_name(terminal, widget_name); |
| 103 | } | 103 | } |
| 104 | 104 |