aboutsummaryrefslogtreecommitdiff
path: root/debian/patches/210_nxagent_nxcomp_save_session_state.patch
diff options
context:
space:
mode:
authorOleksandr Shneyder <o.shneyder@phoca-gmbh.de>2014-06-25 10:02:02 +0200
committerOleksandr Shneyder <o.shneyder@phoca-gmbh.de>2014-06-25 10:02:02 +0200
commit9f6eb6f796e81b00ff5b37c9abc89bb159e4e372 (patch)
treee93a81c1ade7f7f78206cc7feb6c8ba4e0e6e477 /debian/patches/210_nxagent_nxcomp_save_session_state.patch
parent480a05519b31e751474836b7a3455b0a311cdc8c (diff)
downloadnx-libs-9f6eb6f796e81b00ff5b37c9abc89bb159e4e372.tar.gz
nx-libs-9f6eb6f796e81b00ff5b37c9abc89bb159e4e372.tar.bz2
nx-libs-9f6eb6f796e81b00ff5b37c9abc89bb159e4e372.zip
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.
Diffstat (limited to 'debian/patches/210_nxagent_nxcomp_save_session_state.patch')
-rw-r--r--debian/patches/210_nxagent_nxcomp_save_session_state.patch188
1 files changed, 188 insertions, 0 deletions
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