diff --git a/client/src/session/remote/actions.cc b/client/src/session/remote/actions.cc
index 1dd3307..204b4ae 100644
--- a/client/src/session/remote/actions.cc
+++ b/client/src/session/remote/actions.cc
@@ -151,6 +151,10 @@
throw std::system_error(ENOTSUP, std::system_category());
}
+ Session::Cursor IPC::Session::getCursorPosition() {
+ throw std::system_error(ENOTSUP, std::system_category());
+ }
+
}
diff --git a/client/src/testprogram/testprogram.cc b/client/src/testprogram/testprogram.cc
index 1ea8fbb..ca0f302 100644
--- a/client/src/testprogram/testprogram.cc
+++ b/client/src/testprogram/testprogram.cc
@@ -103,7 +103,7 @@
TN3270::Host host{session};
- // name="url";
+ name="url";
cout << endl << endl;
for(auto attribute : host.getAttributes()) {
@@ -257,37 +257,45 @@
};
- int long_index =0;
- int opt;
- while((opt = getopt_long(argc, argv, "s:A", options, &long_index )) != -1) {
+ try {
+
+ int long_index =0;
+ int opt;
+ while((opt = getopt_long(argc, argv, "s:A", options, &long_index )) != -1) {
- switch(opt) {
- case 's':
- session = optarg;
- cout << "Session: " << session << endl;
- break;
+ switch(opt) {
+ case 's':
+ session = optarg;
+ cout << "Session: " << session << endl;
+ break;
- case 'A':
- testAttributes(session,optarg);
- break;
+ case 'A':
+ testAttributes(session,optarg);
+ break;
- case 'U':
- url = optarg;
- cout << "URL: " << session << endl;
- break;
+ case 'U':
+ url = optarg;
+ cout << "URL: " << session << endl;
+ break;
- case 'P':
- testPerformance(session,url);
- return 0;
+ case 'P':
+ testPerformance(session,url);
+ return 0;
- case 'I':
- testHost(session,url);
- return 0;
+ case 'I':
+ testHost(session,url);
+ return 0;
+
+ }
}
- }
+ } catch(const std::exception &e) {
+ cerr << "Error:" << endl << "\t" << e.what() << endl << endl;
+ exit(-1);
+
+ }
#else
printf("\nRunning IPC Client tests\n");
diff --git a/server/pw3270-plugin-ipc.cbp b/server/pw3270-plugin-ipc.cbp
index ce6b1c0..20d5153 100644
--- a/server/pw3270-plugin-ipc.cbp
+++ b/server/pw3270-plugin-ipc.cbp
@@ -121,9 +121,6 @@
-
-
-
diff --git a/server/src/core/response.c b/server/src/core/response.c
index 9c25bc1..42cb323 100644
--- a/server/src/core/response.c
+++ b/server/src/core/response.c
@@ -45,8 +45,10 @@
#include
#include
-#include
-#include
+#ifndef _WIN32
+ #include
+ #include
+#endif // _WIN32
/*--[ Widget definition ]----------------------------------------------------------------------------*/
@@ -130,6 +132,10 @@ GVariant * ipc3270_response_steal_value(GObject *object) {
return value;
}
+const GList * ipc3270_get_values(GObject *object) {
+ IPC3270_RESPONSE(object)->values;
+}
+
guint ipc3270_response_length(GObject *object) {
return g_list_length(IPC3270_RESPONSE(object)->values);
}
diff --git a/server/src/core/windows/inout.c b/server/src/core/windows/inout.c
index b8cfd9f..a9a0c17 100644
--- a/server/src/core/windows/inout.c
+++ b/server/src/core/windows/inout.c
@@ -168,6 +168,40 @@ unsigned char * pack_value(unsigned char *txtptr, GVariant *value) {
}
+unsigned char * ipc3270_pack(const gchar *name, GObject *object, int id, size_t * szPacket) {
+
+ const GList * node;
+ size_t vCount = 0;
+
+ g_return_val_if_fail(IS_IPC3270_RESPONSE(object),NULL);
+
+ // Set packet size.
+ *szPacket =
+ strlen(name) + 1
+ + (sizeof(guint16) * 2);
+
+ for(node = ipc3270_get_values(object); node; node = g_list_next(node)) {
+ vCount++;
+ *szPacket += g_variant_get_size(node->data)+1;
+ }
+
+ unsigned char * outputBuffer = g_malloc0(*szPacket);
+ unsigned char * txtptr = setup_header(outputBuffer,name,id,vCount);
+
+ for(node = ipc3270_get_values(object); node; node = g_list_next(node)) {
+ txtptr = pack_value(txtptr, node->data);
+ if(!txtptr) {
+ g_free(outputBuffer);
+ return NULL;
+ }
+ }
+
+ debug("used=%u allocated=%u",(unsigned int) (txtptr-outputBuffer), (unsigned int) *szPacket);
+ return outputBuffer;
+
+}
+
+/*
unsigned char * ipc3270_pack_value(const gchar *name, int id, GVariant *value, size_t * szPacket) {
debug("%s(%s)",__FUNCTION__,name);
@@ -239,6 +273,7 @@ unsigned char * ipc3270_pack(const gchar * name, int id, GVariant *values, size_
return outputBuffer;
}
+*/
GVariant * ipc3270_unpack(const unsigned char *packet, int *id) {
@@ -387,3 +422,4 @@ GVariant * ipc3270_unpack(const unsigned char *packet, int *id) {
return g_variant_builder_end(&builder);
}
+
diff --git a/server/src/core/windows/pipesource.c b/server/src/core/windows/pipesource.c
index 139d568..1c8bd20 100644
--- a/server/src/core/windows/pipesource.c
+++ b/server/src/core/windows/pipesource.c
@@ -109,7 +109,7 @@ static void process_input(IPC3270_PIPE_SOURCE *source, DWORD cbRead) {
*/
g_autoptr (GError) error = NULL;
- g_autoptr (GVariant) response = NULL;
+ g_autoptr(GObject) response = ipc3270_response_new();
g_autoptr (GVariant) parameters = ipc3270_unpack(source->buffer, &request_type);
/*
@@ -123,30 +123,16 @@ static void process_input(IPC3270_PIPE_SOURCE *source, DWORD cbRead) {
// Process query
switch(request_type) {
case 1: // getProperty
- response = ipc3270_get_property(source->object, request_name, &error);
+ ipc3270_response_append(response,ipc3270_get_property(source->object, request_name, &error));
break;
case 2: // setProperty
ipc3270_set_property(source->object, request_name, parameters, &error);
- response = g_variant_new_int32(0);
+ ipc3270_response_append_int32(response,0);
break;
case 3: // method
- {
- g_autoptr(GObject) rsp = ipc3270_response_new();
-
- debug("Parameters: %p", parameters);
- debug("rsp: %p", rsp);
- debug("Error=%p",error);
-
- ipc3270_method_call(source->object, request_name, parameters, rsp, &error);
-
- debug("Error=%p",error);
-
- if(ipc3270_response_has_values(rsp))
- response = ipc3270_response_steal_value(rsp);
-
- }
+ ipc3270_method_call(source->object, request_name, parameters, response, &error);
break;
default:
@@ -177,7 +163,7 @@ static void process_input(IPC3270_PIPE_SOURCE *source, DWORD cbRead) {
} else {
- buffer = ipc3270_pack_value(request_name, 0, response, &szPacket);
+ buffer = ipc3270_pack(request_name,response,0,&szPacket);
}
diff --git a/server/src/include/ipc-glib.h b/server/src/include/ipc-glib.h
index ea6dfe2..7129972 100644
--- a/server/src/include/ipc-glib.h
+++ b/server/src/include/ipc-glib.h
@@ -106,7 +106,9 @@
typedef struct _ipc3270ResponseClass ipc3270ResponseClass;
GObject * ipc3270_response_new();
+ GType ipc3270Response_get_type(void);
+ void ipc3270_response_append(GObject *object, GVariant *value);
void ipc3270_response_append_int32(GObject *object, gint32 value);
void ipc3270_response_append_uint32(GObject *object, guint32 value);
void ipc3270_response_append_string(GObject *object, const gchar *text);
@@ -114,6 +116,7 @@
gboolean ipc3270_response_has_values(GObject *object);
guint ipc3270_response_length(GObject *object);
+ const GList * ipc3270_get_values(GObject *object);
GVariant * ipc3270_response_steal_value(GObject *object);
@@ -151,9 +154,10 @@
GVariant * ipc3270_get_property(GObject *object, const gchar *property_name, GError **error);
#ifdef _WIN32
- unsigned char * ipc3270_pack(const gchar *name, int id, GVariant *values, size_t * szPacket);
- unsigned char * ipc3270_pack_value(const gchar *name, int id, GVariant *value, size_t * szPacket);
- unsigned char * ipc3270_pack_error(const GError *error, size_t * szPacket);
+// unsigned char * ipc3270_pack(const gchar *name, int id, GVariant *values, size_t * szPacket);
+// unsigned char * ipc3270_pack_value(const gchar *name, int id, GVariant *value, size_t * szPacket);
+// unsigned char * ipc3270_pack_error(const GError *error, size_t * szPacket);
+ unsigned char * ipc3270_pack(const gchar *name, GObject *object, int id, size_t * szPacket);
GVariant * ipc3270_unpack(const unsigned char *packet, int *id);
#endif // _WIN32
--
libgit2 0.21.2