aboutsummaryrefslogtreecommitdiff
path: root/nxcomp/src/Keeper.h
diff options
context:
space:
mode:
Diffstat (limited to 'nxcomp/src/Keeper.h')
-rw-r--r--nxcomp/src/Keeper.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/nxcomp/src/Keeper.h b/nxcomp/src/Keeper.h
new file mode 100644
index 000000000..b440beceb
--- /dev/null
+++ b/nxcomp/src/Keeper.h
@@ -0,0 +1,199 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com) */
+/* Copyright (c) 2008-2014 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> */
+/* Copyright (c) 2014-2016 Ulrich Sibiller <uli42@gmx.de> */
+/* Copyright (c) 2014-2016 Mihai Moldovan <ionic@ionic.de> */
+/* Copyright (c) 2011-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
+/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com) */
+/* */
+/* NXCOMP, NX protocol compression and NX extensions to this software */
+/* are copyright of the aforementioned persons and companies. */
+/* */
+/* Redistribution and use of the present software is allowed according */
+/* to terms specified in the file LICENSE.nxcomp which comes in the */
+/* source distribution. */
+/* */
+/* All rights reserved. */
+/* */
+/* NOTE: This software has received contributions from various other */
+/* contributors, only the core maintainers and supporters are listed as */
+/* copyright holders. Please contact us, if you feel you should be listed */
+/* as copyright holder, as well. */
+/* */
+/**************************************************************************/
+
+#ifndef Keeper_H
+#define Keeper_H
+
+#include "Misc.h"
+#include "Types.h"
+
+//
+// Set the verbosity level.
+//
+
+#define PANIC
+#define WARNING
+#undef TEST
+#undef DEBUG
+
+//
+// Define this to check how many file
+// nodes are allocated and deallocated.
+//
+
+#undef REFERENCES
+
+class Keeper;
+
+class File
+{
+ friend class Keeper;
+
+ public:
+
+ File();
+
+ ~File();
+
+ //
+ // Allow sort by time and size. If time
+ // is the same, keep the bigger element.
+ //
+
+ bool compare(File *b) const;
+
+ private:
+
+ char *name_;
+
+ int size_;
+ time_t time_;
+
+ #ifdef REFERENCES
+
+ static int references_;
+
+ #endif
+};
+
+class Keeper
+{
+ public:
+
+ Keeper(int caches, int images, const char *root,
+ int sleep, int parent);
+
+ ~Keeper();
+
+ //
+ // Call this just once.
+ //
+
+ int cleanupCaches();
+
+ //
+ // Call this at any given interval.
+ //
+
+ int cleanupImages();
+
+ //
+ // Call this if it's time to exit.
+ //
+
+ void setSignal(int signal)
+ {
+ signal_ = signal;
+ }
+
+ int getSignal()
+ {
+ return signal_;
+ }
+
+ int getParent()
+ {
+ return parent_;
+ }
+
+ private:
+
+ //
+ // Get a list of files in directory.
+ //
+
+ int collect(const char *path);
+
+ //
+ // Sort the collected files according to
+ // last modification time and delete the
+ // older ones until disk size is below
+ // the threshold.
+ //
+
+ int cleanup(int threshold);
+
+ //
+ // Empty the files repository.
+ //
+
+ void empty();
+
+ //
+ // Size in bytes of total allowed
+ // storage for persistent caches.
+ //
+
+ int caches_;
+
+ //
+ // Size in bytes of total allowed
+ // storage for images cache.
+ //
+
+ int images_;
+
+ //
+ // Path of the NX root directory.
+ //
+
+ char *root_;
+
+ //
+ // The little delay to be introduced
+ // before reading a new entry.
+ //
+
+ int sleep_;
+
+ //
+ // Total size of files in repository.
+ //
+
+ int total_;
+
+ //
+ // The parent process, so we can exit
+ // if it is gone.
+ //
+
+ int parent_;
+
+ //
+ // Set if we need to give up because
+ // of a signal.
+ //
+
+ int signal_;
+
+ //
+ // Repository where to collect files.
+ //
+
+ T_files *files_;
+};
+
+#endif /* Keeper_H */
+