Commit 9f6eb6f7 authored by Oleksandr Shneyder's avatar Oleksandr Shneyder

Add 210_nxagent_nxcomp_save_session_state.patch. Save session state in path…

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.
parent 480a0551
......@@ -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
......
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
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment