aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog6
-rw-r--r--debian/patches/210_nxagent_nxcomp_save_session_state.patch188
-rw-r--r--debian/patches/series1
3 files changed, 195 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index f5d68e55a..93d6d7ad6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -45,6 +45,12 @@ nx-libs (2:3.5.0.25-0x2go1) UNRELEASED; urgency=low
+ 209_x2goagent_add-man-page.full.patch
+ 220_nxproxy_bind-loopback-only.full+lite.patch
+ [ Oleksandr Shneyder ]
+ * Add 210_nxagent_nxcomp_save_session_state.patch. Save session state in path
+ specified by "state" option in agent options file. If option is omitted,
+ session state will not be saved. Session states are: STARTING, RUNNING,
+ SUSPENDING, SUSPENDED, RESUMING, TERMINATING, TERMINATED.
+
-- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Wed, 07 May 2014 09:58:10 +0200
nx-libs (2:3.5.0.24-0x2go1) unstable; urgency=low
diff --git a/debian/patches/210_nxagent_nxcomp_save_session_state.patch b/debian/patches/210_nxagent_nxcomp_save_session_state.patch
new file mode 100644
index 000000000..53cfb859e
--- /dev/null
+++ b/debian/patches/210_nxagent_nxcomp_save_session_state.patch
@@ -0,0 +1,188 @@
+Description: Save session state in file
+Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de>
+
+--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
+@@ -60,6 +60,7 @@
+ #endif
+ #include "Handlers.h"
+ #include "Error.h"
++#include "Reconnect.h"
+
+ /*
+ * NX includes and definitions.
+@@ -1106,6 +1107,11 @@
+
+ return;
+ }
++ else if (!strcmp(name, "state"))
++ {
++ setStatePath(value);
++ return;
++ }
+ else if (!strcmp(name, "fullscreen"))
+ {
+ if (nxagentReconnectTrap == True)
+@@ -1362,6 +1368,11 @@
+ validateString(nxagentOptionFile));
+ #endif
+
++ /*
++ * Init statePath
++ */
++ setStatePath("");
++
+ if (nxagentOptionFile == NULL)
+ {
+ return;
+--- a/nx-X11/programs/Xserver/hw/nxagent/Init.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c
+@@ -63,7 +63,7 @@
+
+ #include "NX.h"
+ #include "NXlib.h"
+-
++#include "Reconnect.h"
+ /*
+ * Set here the required log level.
+ */
+@@ -233,6 +233,7 @@
+ fprintf(stderr, "Info: Agent running with pid '%d'.\n", getpid());
+
+ fprintf(stderr, "Session: Starting session at '%s'.\n", GetTimeAsString());
++ saveAgentState("STARTING");
+ }
+
+ /*
+--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+@@ -118,6 +118,33 @@
+
+ static enum RECONNECTION_STEP failedStep;
+
++#include <limits.h>
++
++/*
++ * Path of state File
++ */
++char stateFile[PATH_MAX];
++
++
++void setStatePath(char* path)
++{
++ strncpy(stateFile, path, PATH_MAX-1);
++}
++
++void saveAgentState(char* state)
++{
++ FILE* fptr;
++ if(strlen(stateFile))
++ {
++ fptr=fopen(stateFile, "w");
++ if(!fptr)
++ return;
++ fprintf(fptr,"%s", state);
++ fclose(fptr);
++ }
++}
++
++
+ int nxagentHandleConnectionStates(void)
+ {
+ #ifdef TEST
+@@ -211,6 +238,7 @@
+ fprintf(stderr, "Session: Display failure detected at '%s'.\n", GetTimeAsString());
+
+ fprintf(stderr, "Session: Suspending session at '%s'.\n", GetTimeAsString());
++ saveAgentState("SUSPENDING");
+ }
+
+ nxagentDisconnectSession();
+@@ -265,6 +293,7 @@
+ fprintf(stderr, "Session: Session suspended at '%s'.\n", GetTimeAsString());
+ #endif
+ }
++ saveAgentState("SUSPENDED");
+
+ nxagentResetDisplayHandlers();
+
+@@ -622,6 +651,7 @@
+ #else
+ fprintf(stderr, "Session: Session resumed at '%s'.\n", GetTimeAsString());
+ #endif
++ saveAgentState("RUNNING");
+
+ nxagentRemoveSplashWindow(NULL);
+
+@@ -785,12 +815,14 @@
+ if (nxagentSessionState == SESSION_GOING_DOWN)
+ {
+ fprintf(stderr, "Session: Suspending session at '%s'.\n", GetTimeAsString());
++ saveAgentState("SUSPENDING");
+
+ nxagentDisconnectSession();
+ }
+ else if (nxagentSessionState == SESSION_GOING_UP)
+ {
+ fprintf(stderr, "Session: Resuming session at '%s'.\n", GetTimeAsString());
++ saveAgentState("RESUMING");
+
+ if (nxagentReconnectSession())
+ {
+@@ -803,6 +835,7 @@
+ fprintf(stderr, "Session: Display failure detected at '%s'.\n", GetTimeAsString());
+
+ fprintf(stderr, "Session: Suspending session at '%s'.\n", GetTimeAsString());
++ saveAgentState("SUSPENDING");
+
+ nxagentDisconnectSession();
+ }
+--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.h
++++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.h
+@@ -34,6 +34,8 @@
+ Bool nxagentReconnectSession(void);
+ int nxagentHandleConnectionStates(void);
+ void nxagentHandleConnectionChanges(void);
++void setStatePath(char*);
++void saveAgentState(char*);
+
+ enum SESSION_STATE
+ {
+--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
+@@ -609,6 +609,7 @@
+ #endif
+
+ nxagentSessionState = SESSION_UP;
++ saveAgentState("RUNNING");
+ }
+
+ #ifdef BLOCKS
+@@ -823,6 +824,7 @@
+ */
+
+ fprintf(stderr, "Session: Terminating session at '%s'.\n", GetTimeAsString());
++ saveAgentState("TERMINATING");
+
+ nxagentWaitDisplay();
+
+@@ -833,6 +835,7 @@
+ {
+ NXShadowDestroy();
+ }
++ saveAgentState("TERMINATED");
+
+ KillAllClients();
+ DEALLOCATE_LOCAL(clientReady);
+--- a/nxcomp/Loop.cpp
++++ b/nxcomp/Loop.cpp
+@@ -8898,7 +8898,8 @@
+ }
+ else if (strcasecmp(name, "defer") == 0 ||
+ strcasecmp(name, "tile") == 0 ||
+- strcasecmp(name, "menu") == 0)
++ strcasecmp(name, "menu") == 0 ||
++ strcasecmp(name, "state") == 0 )
+ {
+ #ifdef DEBUG
+ *logofs << "Loop: Ignoring agent option '" << name
diff --git a/debian/patches/series b/debian/patches/series
index edbd38edd..25f20ddaf 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -65,3 +65,4 @@
999_nxagent_unbrand-nxagent-brand-x2goagent.full.patch
016_nx-X11_install-location.debian.patch
102_xserver-xext_set-securitypolicy-path.debian.patch
+210_nxagent_nxcomp_save_session_state.patch