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 | 87 | |
88 | 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 | 95 | this->interface = "br.com.bb.tn3270.session"; |
92 | 96 | |
93 | 97 | debug("D-Bus Object name=\"",this->name,"\" D-Bus Object path=\"",this->path,"\""); | ... | ... |
client/src/testprogram/testprogram.cc
... | ... | @@ -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 | 46 | |
47 | 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 | 51 | // Boolean properties |
52 | 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 | 128 | gchar *ptr; |
129 | 129 | |
130 | 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 | 133 | for(ptr=object_name;*ptr;ptr++) |
133 | 134 | *ptr = g_ascii_tolower(*ptr); |
134 | 135 | |
135 | - debug("Requesting \"%s\"",object_name); | |
136 | + debug("Requesting object \"%s\"",object_name); | |
136 | 137 | |
137 | 138 | // https://dbus.freedesktop.org/doc/dbus-specification.html |
138 | 139 | GVariant * response = |
... | ... | @@ -187,10 +188,12 @@ static gboolean register_object(ipc3270 *ipc, const char *name, char id) { |
187 | 188 | |
188 | 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 | 193 | // Register object-id |
191 | 194 | ipc->dbus.id = g_dbus_connection_register_object ( |
192 | 195 | ipc->dbus.connection, |
193 | - PW3270_IPC_SESSION_OBJECT_PATH, | |
196 | + object_path, | |
194 | 197 | introspection_data->interfaces[0], |
195 | 198 | &interface_vtable, |
196 | 199 | ipc, |
... | ... | @@ -203,7 +206,11 @@ static gboolean register_object(ipc3270 *ipc, const char *name, char id) { |
203 | 206 | |
204 | 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 | 214 | g_error_free(error); |
208 | 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 | 81 | |
82 | 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 | 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 | 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 | 55 | // Boolean properties |
56 | 56 | const LIB3270_INT_PROPERTY * boolprop = lib3270_get_boolean_properties_list(); | ... | ... |
server/src/include/ipc-glib.h
... | ... | @@ -46,8 +46,9 @@ |
46 | 46 | #else |
47 | 47 | |
48 | 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 | 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 | 53 | #define PW3270_IPC_SERVICE_BUS_NAME "br.com.bb.tn3270.service" |
53 | 54 | #define PW3270_IPC_SERVICE_INTERFACE_NAME "br.com.bb.tn3270.service" | ... | ... |
server/src/plugin/plugin.c
... | ... | @@ -98,7 +98,7 @@ |
98 | 98 | |
99 | 99 | char id = lib3270_get_session_id(v3270_get_session(terminal)); |
100 | 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 | 102 | v3270_set_session_name(terminal, widget_name); |
103 | 103 | } |
104 | 104 | ... | ... |