[X2Go-Commits] [nx-libs] 19/24: Save session state in file.

git-admin at x2go.org git-admin at x2go.org
Tue Feb 10 21:50:58 CET 2015


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch 3.6.x
in repository nx-libs.

commit 8c1b852abf692af4898368132292eb8c7278a7c2
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Tue Feb 10 19:43:41 2015 +0100

    Save session state in file.
    
      210_nxagent_save_session_state.full.patch
      210_nxcomp_save_session_state.full+lite.patch
    
      This patch adds a "state" option to NX (agent) which
      allows one to specify a file where nxagent will write
      its session state into.
---
 .../210_nxagent_save_session_state.full.patch      |  176 --------------------
 .../210_nxcomp_save_session_state.full+lite.patch  |   15 --
 debian/patches/series                              |    2 -
 nx-X11/programs/Xserver/hw/nxagent/Args.c          |   11 ++
 nx-X11/programs/Xserver/hw/nxagent/Init.c          |    3 +-
 nx-X11/programs/Xserver/hw/nxagent/Reconnect.c     |   33 ++++
 nx-X11/programs/Xserver/hw/nxagent/Reconnect.h     |    2 +
 nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c  |    3 +
 nxcomp/Loop.cpp                                    |    3 +-
 9 files changed, 53 insertions(+), 195 deletions(-)

diff --git a/debian/patches/210_nxagent_save_session_state.full.patch b/debian/patches/210_nxagent_save_session_state.full.patch
deleted file mode 100644
index 223d0bc..0000000
--- a/debian/patches/210_nxagent_save_session_state.full.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-Description: Save session state in file
-Author: Oleksandr Shneyder <o.shneyder at 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.
-@@ -1090,6 +1091,11 @@
- 
-     return;
-   }
-+  else if (!strcmp(name, "state"))
-+  {
-+    setStatePath(value);
-+    return;
-+  }
-   else if (!strcmp(name, "fullscreen"))
-   {
-     if (nxagentReconnectTrap == True)
-@@ -1369,6 +1375,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);
diff --git a/debian/patches/210_nxcomp_save_session_state.full+lite.patch b/debian/patches/210_nxcomp_save_session_state.full+lite.patch
deleted file mode 100644
index 1ef4440..0000000
--- a/debian/patches/210_nxcomp_save_session_state.full+lite.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Description: Ignore state=<statefile> option in nxproxy/nxcomp
-Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
-
---- a/nxcomp/Loop.cpp
-+++ b/nxcomp/Loop.cpp
-@@ -8872,7 +8872,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 48b9abd..9e0e647 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,5 +1,3 @@
-210_nxagent_save_session_state.full.patch
-210_nxcomp_save_session_state.full+lite.patch
 211_nxcomp_set_default_options.full+lite.patch
 212_nxcomp_build-on-Android.full+lite.patch
 220_nxproxy_bind-loopback-only.full+lite.patch
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c
index c72b9c4..7074a18 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
@@ -60,6 +60,7 @@ is" without express or implied warranty.
 #endif
 #include "Handlers.h"
 #include "Error.h"
+#include "Reconnect.h"
 
 /*
  * NX includes and definitions.
@@ -1090,6 +1091,11 @@ static void nxagentParseOptions(char *name, char *value)
 
     return;
   }
+  else if (!strcmp(name, "state"))
+  {
+    setStatePath(value);
+    return;
+  }
   else if (!strcmp(name, "fullscreen"))
   {
     if (nxagentReconnectTrap == True)
@@ -1369,6 +1375,11 @@ void nxagentProcessOptionsFile()
               validateString(nxagentOptionFile));
   #endif
 
+  /*
+   * Init statePath
+   */
+  setStatePath("");
+
   if (nxagentOptionFile == NULL)
   {
     return;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Init.c b/nx-X11/programs/Xserver/hw/nxagent/Init.c
index 1794f15..8d4eed2 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Init.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c
@@ -63,7 +63,7 @@ is" without express or implied warranty.
 
 #include "NX.h"
 #include "NXlib.h"
-
+#include "Reconnect.h"
 /*
  * Set here the required log level.
  */
@@ -233,6 +233,7 @@ void InitOutput(ScreenInfo *screenInfo, int argc, char *argv[])
     fprintf(stderr, "Info: Agent running with pid '%d'.\n", getpid());
 
     fprintf(stderr, "Session: Starting session at '%s'.\n", GetTimeAsString());
+    saveAgentState("STARTING");
   }
 
   /*
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
index 3c576c6..b26fa9c 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
@@ -118,6 +118,33 @@ void *reconnectLossyLevel[STEP_NONE];
 
 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 @@ TODO: This should be reset only when
           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 @@ TODO: This should be reset only when
         fprintf(stderr, "Session: Session suspended at '%s'.\n", GetTimeAsString());
         #endif
       }
+      saveAgentState("SUSPENDED");
 
       nxagentResetDisplayHandlers();
 
@@ -622,6 +651,7 @@ Bool nxagentReconnectSession(void)
   #else
   fprintf(stderr, "Session: Session resumed at '%s'.\n", GetTimeAsString());
   #endif
+  saveAgentState("RUNNING");
 
   nxagentRemoveSplashWindow(NULL);
 
@@ -785,12 +815,14 @@ void nxagentHandleConnectionChanges()
   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 @@ void nxagentHandleConnectionChanges()
       fprintf(stderr, "Session: Display failure detected at '%s'.\n", GetTimeAsString());
 
       fprintf(stderr, "Session: Suspending session at '%s'.\n", GetTimeAsString());
+      saveAgentState("SUSPENDING");
 
       nxagentDisconnectSession();
     }
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.h b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.h
index c321bfa..5be2928 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.h
@@ -34,6 +34,8 @@ void nxagentInitReconnector(void);
 Bool nxagentReconnectSession(void);
 int nxagentHandleConnectionStates(void);
 void nxagentHandleConnectionChanges(void);
+void setStatePath(char*);
+void saveAgentState(char*);
 
 enum SESSION_STATE
 {
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
index 69ad30d..f18c09f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
@@ -609,6 +609,7 @@ Reply   Total	Cached	Bits In			Bits Out		Bits/Reply	  Ratio
           #endif
 
           nxagentSessionState = SESSION_UP;
+          saveAgentState("RUNNING");
         }
 
         #ifdef BLOCKS
@@ -823,6 +824,7 @@ Reply   Total	Cached	Bits In			Bits Out		Bits/Reply	  Ratio
        */
   
       fprintf(stderr, "Session: Terminating session at '%s'.\n", GetTimeAsString());
+      saveAgentState("TERMINATING");
 
       nxagentWaitDisplay();
 
@@ -833,6 +835,7 @@ Reply   Total	Cached	Bits In			Bits Out		Bits/Reply	  Ratio
     {
       NXShadowDestroy();
     }
+    saveAgentState("TERMINATED");
 
     KillAllClients();
     DEALLOCATE_LOCAL(clientReady);
diff --git a/nxcomp/Loop.cpp b/nxcomp/Loop.cpp
index 7e2b990..12a858b 100644
--- a/nxcomp/Loop.cpp
+++ b/nxcomp/Loop.cpp
@@ -8872,7 +8872,8 @@ int ParseEnvironmentOptions(const char *env, int force)
     }
     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

--
Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/nx-libs.git


More information about the x2go-commits mailing list