diff --git a/pw3270.spec.in b/pw3270.spec.in index a49bee7..1c1427e 100644 --- a/pw3270.spec.in +++ b/pw3270.spec.in @@ -51,7 +51,7 @@ %endif %if %{?suse_version} >= 1310 - %define _office 1 + %define _office 0 %define _bldreq gtk3-devel libopenssl-devel %endif %endif diff --git a/src/classlib/local.cc b/src/classlib/local.cc index aa53613..3c7df3b 100644 --- a/src/classlib/local.cc +++ b/src/classlib/local.cc @@ -163,6 +163,7 @@ int (*_erase_eol)(H3270 *hSession); int (*_erase_input)(H3270 *hSession); int (*_action)(H3270 *hSession, const char *name); + int (*_set_unlock_delay)(H3270 *hSession, unsigned short ms); const char * (*_ebc2asc)(H3270 *hSession, unsigned char *buffer, int sz); const char * (*_asc2ebc)(H3270 *hSession, unsigned char *buffer, int sz); @@ -231,6 +232,8 @@ { (void **) & _asc2ebc, "lib3270_asc2ebc" }, { (void **) & _action, "lib3270_action" }, + { (void **) & _set_unlock_delay, "lib3270_set_unlock_delay" }, + }; for(unsigned int f = 0; f < (sizeof (call) / sizeof ((call)[0]));f++) @@ -518,6 +521,11 @@ return _action(hSession,name); } + void set_unlock_delay(unsigned short ms) + { + _set_unlock_delay(hSession,ms); + } + }; session * session::create_local(void) throw (std::exception) diff --git a/src/classlib/remote.cc b/src/classlib/remote.cc index 7e1272d..4a0767d 100644 --- a/src/classlib/remote.cc +++ b/src/classlib/remote.cc @@ -65,6 +65,7 @@ #define HLLAPI_PACKET_PRINT "print" #define HLLAPI_PACKET_ASC2EBC "asc2ebc" #define HLLAPI_PACKET_EBC2ASC "ebc2asc" + #define HLLAPI_PACKET_SET_UNLOCK_DELAY "setUnlockDelay" #endif // WIN32 #include @@ -182,6 +183,25 @@ } + void set_intval(HLLAPI_PACKET id, int value) + { + struct hllapi_packet_set_int packet; + DWORD cbSize = (DWORD) sizeof(packet); + BOOL status; + + memset(&packet,0,sizeof(packet)); + packet.packet_id = id; + packet.value = value; + + status = TransactNamedPipe(hPipe,(LPVOID) &packet, cbSize, &packet, sizeof(packet), &cbSize,NULL); + + if(status) + return packet.rc; + + throw exception(GetLastError(),"%s","Transaction error"); + + } + #elif defined(HAVE_DBUS) @@ -350,6 +370,22 @@ return -1; } + void set_intval(const char *method, int value) + { + DBusMessage * outMsg = create_message(method); + + if(outMsg) + { + dbus_int32_t v = (dbus_int32_t) value; + + dbus_message_append_args(outMsg, DBUS_TYPE_INT32, &v, DBUS_TYPE_INVALID); + + DBusMessage * rspMsg = call(outMsg); + dbus_message_unref(rspMsg); + + } + } + #else @@ -1516,6 +1552,11 @@ return (const char *) text; } + void set_unlock_delay(unsigned short ms) + { + set_intval(HLLAPI_PACKET_SET_UNLOCK_DELAY,(int) ms); + } + }; session * session::create_remote(const char *session) throw (std::exception) diff --git a/src/include/pw3270/class.h b/src/include/pw3270/class.h index d5261a8..7bc7616 100644 --- a/src/include/pw3270/class.h +++ b/src/include/pw3270/class.h @@ -157,6 +157,9 @@ virtual LIB3270_MESSAGE get_program_message(void) = 0; virtual LIB3270_SSL_STATE get_secure(void) = 0; + // Misc + virtual void set_unlock_delay(unsigned short ms) = 0; + // charset #ifdef WIN32 void set_display_charset(const char *remote = 0, const char *local = "CP1252"); diff --git a/src/include/pw3270/ipcpackets.h b/src/include/pw3270/ipcpackets.h index 55ffab8..1324778 100644 --- a/src/include/pw3270/ipcpackets.h +++ b/src/include/pw3270/ipcpackets.h @@ -72,6 +72,7 @@ HLLAPI_PACKET_FILE_TRANSFER, HLLAPI_PACKET_GET_SSL_STATE, + HLLAPI_PACKET_SET_UNLOCK_DELAY, HLLAPI_PACKET_INVALID @@ -185,6 +186,13 @@ struct hllapi_packet_set_text char text[1]; }; +struct hllapi_packet_set_int +{ + unsigned char packet_id; + int rc; + int value; +}; + struct hllapi_packet_file_transfer { unsigned char packet_id; diff --git a/src/java/jni3270.cbp b/src/java/jni3270.cbp index 3a660f9..e8fc90c 100644 --- a/src/java/jni3270.cbp +++ b/src/java/jni3270.cbp @@ -47,6 +47,7 @@ + diff --git a/src/java/plugin.cc b/src/java/plugin.cc index cc05255..5f75d15 100644 --- a/src/java/plugin.cc +++ b/src/java/plugin.cc @@ -343,6 +343,11 @@ return v3270_transfer_file(v3270_get_default_widget(),options,local,remote,lrecl,blksize,primspace,secspace,dft); } + void set_unlock_delay(unsigned short ms) + { + lib3270_set_unlock_delay(hSession, ms); + } + int quit(void) { gtk_main_quit(); return 0; diff --git a/src/lib3270/kybd.c b/src/lib3270/kybd.c index a3a779c..a2d42c9 100644 --- a/src/lib3270/kybd.c +++ b/src/lib3270/kybd.c @@ -2977,5 +2977,8 @@ int kybd_prime(H3270 *hSession) LIB3270_EXPORT void lib3270_set_unlock_delay(H3270 *session, unsigned short delay) { CHECK_SESSION_HANDLE(session); + + trace("%s(%d)",__FUNCTION__,(int) delay); + session->unlock_delay_ms = delay; } diff --git a/src/plugins/dbus3270/gobject.c b/src/plugins/dbus3270/gobject.c index 4d1bdec..eaab202 100644 --- a/src/plugins/dbus3270/gobject.c +++ b/src/plugins/dbus3270/gobject.c @@ -524,6 +524,13 @@ void pw3270_dbus_print(PW3270Dbus *object, DBusGMethodInvocation *context) dbus_g_method_return(context,lib3270_print(pw3270_dbus_get_session_handle(object))); } +void pw3270_dbus_set_unlock_delay(PW3270Dbus *object, int value, DBusGMethodInvocation *context) +{ + lib3270_set_unlock_delay(pw3270_dbus_get_session_handle(object),(unsigned short) value); + dbus_g_method_return(context,0); +} + + void pw3270_dbus_ebc2asc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context) { int sz = strlen(from); diff --git a/src/plugins/dbus3270/pw3270dbus.xml b/src/plugins/dbus3270/pw3270dbus.xml index 2dbddf1..acecb5c 100644 --- a/src/plugins/dbus3270/pw3270dbus.xml +++ b/src/plugins/dbus3270/pw3270dbus.xml @@ -220,6 +220,12 @@ + + + + + + diff --git a/src/plugins/dbus3270/service.h b/src/plugins/dbus3270/service.h index 1bec395..e6059f7 100644 --- a/src/plugins/dbus3270/service.h +++ b/src/plugins/dbus3270/service.h @@ -126,6 +126,8 @@ void pw3270_dbus_filetransfer(PW3270Dbus *object, const gchar *local, const gchar *remote, int flags, int lrecl, int blksize, int primspace, int secspace, int dft, DBusGMethodInvocation *context); + void pw3270_dbus_set_unlock_delay(PW3270Dbus *object, int value, DBusGMethodInvocation *context); + G_END_DECLS #endif // _PW3270_DBUS_SERVICE_H diff --git a/src/plugins/dbus3270/test.sh b/src/plugins/dbus3270/test.sh index 9717eb4..e697995 100755 --- a/src/plugins/dbus3270/test.sh +++ b/src/plugins/dbus3270/test.sh @@ -65,6 +65,9 @@ run_command() dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.getDisplayCharset ;; + unlockdelay) + dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.setUnlockDelay int32:$2 + ;; *) echo "Comando $1 desconhecido" diff --git a/src/plugins/rx3270/pluginmain.cc b/src/plugins/rx3270/pluginmain.cc index ccdc3b4..49c7056 100644 --- a/src/plugins/rx3270/pluginmain.cc +++ b/src/plugins/rx3270/pluginmain.cc @@ -154,6 +154,8 @@ int quit(void); int action(const char *name); + void set_unlock_delay(unsigned short ms); + protected: private: @@ -836,3 +838,8 @@ int plugin::file_transfer(LIB3270_FT_OPTION options, const gchar *local, const g { return v3270_transfer_file(v3270_get_default_widget(),options,local,remote,lrecl,blksize,primspace,secspace,dft); } + +void plugin::set_unlock_delay(unsigned short ms) +{ + lib3270_set_unlock_delay(hSession, (unsigned short) ms); +} -- libgit2 0.21.2