diff options
Diffstat (limited to 'common/rfb/Configuration.h')
-rw-r--r-- | common/rfb/Configuration.h | 300 |
1 files changed, 0 insertions, 300 deletions
diff --git a/common/rfb/Configuration.h b/common/rfb/Configuration.h deleted file mode 100644 index ec8d789a..00000000 --- a/common/rfb/Configuration.h +++ /dev/null @@ -1,300 +0,0 @@ -/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. - * Copyright 2011-2022 Pierre Ossman for Cendio AB - * - * This is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -// -=- Configuration.h -// -// This header defines a set of classes used to represent configuration -// parameters of different types. Instances of the different parameter -// types are associated with instances of the Configuration class, and -// are each given a unique name. The Configuration class provides a -// generic API through which parameters may be located by name and their -// value set, thus removing the need to write platform-specific code. -// Simply defining a new parameter and associating it with a Configuration -// will allow it to be configured by the user. -// -// If no Configuration is specified when creating a Parameter, then the -// global Configuration will be assumed. -// -// Configurations can be "chained" into groups. Each group has a root -// Configuration, a pointer to which should be passed to the constructors -// of the other group members. set() and get() operations called on the -// root will iterate through all of the group's members. -// -// NB: On platforms that support Threading, locking is performed to protect -// complex parameter types from concurrent access (e.g. strings). -// NB: NO LOCKING is performed when linking Configurations to groups -// or when adding Parameters to Configurations. - -#ifndef __RFB_CONFIGURATION_H__ -#define __RFB_CONFIGURATION_H__ - -#include <limits.h> -#include <stdint.h> - -#include <string> -#include <vector> - -namespace os { class Mutex; } - -namespace rfb { - class VoidParameter; - struct ParameterIterator; - - enum ConfigurationObject { ConfGlobal, ConfServer, ConfViewer }; - - // -=- Configuration - // Class used to access parameters. - - class Configuration { - public: - // - Create a new Configuration object - Configuration(const char* name_) - : name(name_), head(nullptr), _next(nullptr) {} - - // - Return the buffer containing the Configuration's name - const char* getName() const { return name.c_str(); } - - // - Set named parameter to value - bool set(const char* param, const char* value, bool immutable=false); - - // - Set parameter to value (separated by "=") - bool set(const char* config, bool immutable=false); - - // - Set named parameter to value, with name truncated at len - bool set(const char* name, int len, - const char* val, bool immutable); - - // - Get named parameter - VoidParameter* get(const char* param); - - // - List the parameters of this Configuration group - void list(int width=79, int nameWidth=10); - - // - Remove a parameter from this Configuration group - bool remove(const char* param); - - // - readFromFile - // Read configuration parameters from the specified file. - void readFromFile(const char* filename); - - // - writeConfigToFile - // Write a new configuration parameters file, then mv it - // over the old file. - void writeToFile(const char* filename); - - - // - Get the Global Configuration object - // NB: This call does NOT lock the Configuration system. - // ALWAYS ensure that if you have ANY global Parameters, - // then they are defined as global objects, to ensure that - // global() is called when only the main thread is running. - static Configuration* global(); - - // Enable server/viewer specific parameters - static void enableServerParams() { global()->appendConfiguration(server()); } - static void enableViewerParams() { global()->appendConfiguration(viewer()); } - - // - Container for process-wide Global parameters - static bool setParam(const char* param, const char* value, bool immutable=false) { - return global()->set(param, value, immutable); - } - static bool setParam(const char* config, bool immutable=false) { - return global()->set(config, immutable); - } - static bool setParam(const char* name, int len, - const char* val, bool immutable) { - return global()->set(name, len, val, immutable); - } - static VoidParameter* getParam(const char* param) { return global()->get(param); } - static void listParams(int width=79, int nameWidth=10) { - global()->list(width, nameWidth); - } - static bool removeParam(const char* param) { - return global()->remove(param); - } - - private: - friend class VoidParameter; - friend struct ParameterIterator; - - // Name for this Configuration - std::string name; - - // - Pointer to first Parameter in this group - VoidParameter* head; - - // Pointer to next Configuration in this group - Configuration* _next; - - // The process-wide, Global Configuration object - static Configuration* global_; - - // The server only Configuration object - static Configuration* server_; - - // The viewer only Configuration object - static Configuration* viewer_; - - // Get server/viewer specific configuration object - static Configuration* server(); - static Configuration* viewer(); - - // Append configuration object to this instance. - // NOTE: conf instance can be only one configuration object - void appendConfiguration(Configuration *conf) { - conf->_next = _next; _next = conf; - } - }; - - // -=- VoidParameter - // Configuration parameter base-class. - - class VoidParameter { - public: - VoidParameter(const char* name_, const char* desc_, ConfigurationObject co=ConfGlobal); - virtual ~VoidParameter(); - const char* getName() const; - const char* getDescription() const; - - virtual bool setParam(const char* value) = 0; - virtual bool setParam(); - virtual std::string getDefaultStr() const = 0; - virtual std::string getValueStr() const = 0; - virtual bool isBool() const; - - virtual void setImmutable(); - - protected: - friend class Configuration; - friend struct ParameterIterator; - - VoidParameter* _next; - bool immutable; - const char* name; - const char* description; - - os::Mutex* mutex; - }; - - class AliasParameter : public VoidParameter { - public: - AliasParameter(const char* name_, const char* desc_,VoidParameter* param_, - ConfigurationObject co=ConfGlobal); - bool setParam(const char* value) override; - bool setParam() override; - std::string getDefaultStr() const override; - std::string getValueStr() const override; - bool isBool() const override; - void setImmutable() override; - private: - VoidParameter* param; - }; - - class BoolParameter : public VoidParameter { - public: - BoolParameter(const char* name_, const char* desc_, bool v, - ConfigurationObject co=ConfGlobal); - bool setParam(const char* value) override; - bool setParam() override; - virtual void setParam(bool b); - std::string getDefaultStr() const override; - std::string getValueStr() const override; - bool isBool() const override; - operator bool() const; - protected: - bool value; - bool def_value; - }; - - class IntParameter : public VoidParameter { - public: - IntParameter(const char* name_, const char* desc_, int v, - int minValue=INT_MIN, int maxValue=INT_MAX, - ConfigurationObject co=ConfGlobal); - using VoidParameter::setParam; - bool setParam(const char* value) override; - virtual bool setParam(int v); - std::string getDefaultStr() const override; - std::string getValueStr() const override; - operator int() const; - protected: - int value; - int def_value; - int minValue, maxValue; - }; - - class StringParameter : public VoidParameter { - public: - // StringParameter contains a null-terminated string, which CANNOT - // be Null, and so neither can the default value! - StringParameter(const char* name_, const char* desc_, const char* v, - ConfigurationObject co=ConfGlobal); - ~StringParameter() override; - bool setParam(const char* value) override; - std::string getDefaultStr() const override; - std::string getValueStr() const override; - operator const char*() const; - protected: - std::string value; - std::string def_value; - }; - - class BinaryParameter : public VoidParameter { - public: - BinaryParameter(const char* name_, const char* desc_, - const uint8_t* v, size_t l, - ConfigurationObject co=ConfGlobal); - using VoidParameter::setParam; - ~BinaryParameter() override; - bool setParam(const char* value) override; - virtual void setParam(const uint8_t* v, size_t l); - std::string getDefaultStr() const override; - std::string getValueStr() const override; - - std::vector<uint8_t> getData() const; - - protected: - uint8_t* value; - size_t length; - uint8_t* def_value; - size_t def_length; - }; - - // -=- ParameterIterator - // Iterates over all enabled parameters (global + server/viewer). - // Current Parameter is accessed via param, the current Configuration - // via config. The next() method moves on to the next Parameter. - - struct ParameterIterator { - ParameterIterator() : config(Configuration::global()), param(config->head) {} - void next() { - param = param->_next; - while (!param) { - config = config->_next; - if (!config) break; - param = config->head; - } - } - Configuration* config; - VoidParameter* param; - }; - -}; - -#endif // __RFB_CONFIGURATION_H__ |