Index: nxcl-0.9/lib/nxclientlib.cpp =================================================================== --- nxcl-0.9.orig/lib/nxclientlib.cpp 2008-10-15 15:09:17.000000000 +0200 +++ nxcl-0.9/lib/nxclientlib.cpp 2008-10-15 15:30:33.000000000 +0200 @@ -27,6 +27,8 @@ #include "../config.h" #include +#include +#include extern "C" { #include @@ -966,4 +968,68 @@ free (buf); return path; } + +int NXClientLib::fmatch(const struct dirent *direntry) +{ + if (strncmp(direntry->d_name, "S", 1) == 0){ + return 1; + } + return 0; +} + + +bool NXClientLib::deleteAllSessionfiles() +{ + struct dirent **filelist; + DIR *Directory; + int filescount = 0; + int i; + ifstream sessionfile; + string line, rmsesdir; + + char * home; + stringstream ss; + string nxdir; + + home = getenv ("HOME"); + + ss << home; + + nxdir = ss.str() + "/.nx"; + + Directory = opendir(nxdir.c_str()); + + if( Directory ) + { + filescount = scandir(nxdir.c_str(), &filelist, fmatch, alphasort); + + for (i=0; i < filescount; i++) + { + rmsesdir = nxdir + "/" + string(filelist[i]->d_name) + "/"; + sessionfile.open((rmsesdir + "session").c_str()); + + if ( sessionfile.is_open() ) + { + while( !sessionfile.eof() ) + { + getline(sessionfile,line); + if ( (line.find("Session terminated") != string::npos) || + (line.find("Exiting keeper") != string::npos) ) + { + // lazy deletion but it works + remove( (rmsesdir + "errors").c_str() ); + remove( (rmsesdir + "options").c_str() ); + remove( (rmsesdir + "session").c_str() ); + remove( (rmsesdir + "stats").c_str() ); + remove(rmsesdir.c_str()); + break; + } + } + } + } + return true; + } + return false; +} + //@} Index: nxcl-0.9/lib/nxclientlib.h =================================================================== --- nxcl-0.9.orig/lib/nxclientlib.h 2008-10-15 15:09:17.000000000 +0200 +++ nxcl-0.9/lib/nxclientlib.h 2008-10-15 15:09:17.000000000 +0200 @@ -25,10 +25,14 @@ #define _NXCLIENTLIB_H_ #include -#include "nxsession.h" #include + +#include "nxsession.h" #include "notQt.h" +extern "C" { + #include +} using namespace std; @@ -375,6 +379,11 @@ { return this->sessionRunning; } + + // static function so we do not need an explicit object + // for deleting the session files + static bool deleteAllSessionfiles(void); + //@} private: @@ -493,6 +502,7 @@ */ int httpProxyPort; + static int fmatch(const struct dirent *direntry); }; } // namespace Index: nxcl-0.9/lib/nxdata.h =================================================================== --- nxcl-0.9.orig/lib/nxdata.h 2008-10-15 15:09:17.000000000 +0200 +++ nxcl-0.9/lib/nxdata.h 2008-10-15 15:09:17.000000000 +0200 @@ -77,6 +77,9 @@ bool proxyAuthenticated; string proxyUser; string proxyPass; + // small hack for storing this + // easier than workaround in the client + bool delSessionfiles; }; struct NXSessionData {