#ifndef CONFIG_H #define CONFIG_H #include #include "Proxy.h" class ProxyEntryGeneric; class ProxyEntryStatic; /** * @brief Singleton class that represents client configuration
* At the first time this object is accessed config.cfg is read to * determine initial settings, server addresses, etc.
* Then retries is made to connect to server and acqire actual config, * firewall list, etc. */ class Config { public: /** * @brief Class to represent 'firewall' record in the config file */ class FirewallRecord { public: FirewallRecord(): block(false), host("127.0.0.1") { } /** * @brief Firewall action: true - to block access to the host, * false - to allow access to the host */ bool block; /** * @brief Hostname or address to allow/block access to */ std::string host; }; /** * @brief Class to represend 'server' record in the config file */ class ServerRecord { public: ServerRecord(): host("127.0.0.1"), timeout(120), retry(60) { } /** * @brief Hostname or address of server
* Note that default port is 13666 as specified in SslClient */ std::string host; /** * @brief Cumulative timeout value (in seconds)
* When this time is expired then no further attempts is made * to connect to this particular server */ unsigned timeout; /** * @brief Time (in seconds) between consecutive retries */ unsigned retry; }; /** * @brief Retrieve application-wide instance of Config class * @return Pointer to singleton instance of Config class */ static Config *CurrentConfig(); /** * @brief Update client configuration * @todo update config periodically on timer events */ void AcquireConfig(); /** * @brief Check whether current confguration is valid
* It may become invalid in case if server is not reachable. * So every time you want to access Config members or methods you should check this value * @return true if configuration is valid and false otherwise */ bool IsConfigValid(); /** * @brief Get list of country names where at least one proxy available
* (generic proxy records only) * @return Alphabetically sorted vector with unique country names */ std::vector GetCountries(); /** * @brief Get list of country states where at least one proxy available
* (generic proxy records only) * @param country name of country to get list of states for * @return Alphabetically sorted vector with unique state names.
* Resultant vector may be empty in case if there are no states in specified country */ std::vector GetStates(std::string &country); /** * @brief Get list of cities in particular country without states
* (generic proxy records only) * @param country name of country to get list of states for * @return Alphabetically sorted vector with unique city names */ std::vector GetCities(std::string &country); /** * @brief Get list of cities in particular country and state
* (generic proxy records only) * @param country name of country to get list of cities for * @param state name of state to get list of cities for * @return Alphabetically sorted vector with unique city names */ std::vector GetCities(std::string &country, std::string &state); /** * @brief Get list of proxy server addresses in particular country and city (without states)
* (generic proxy records only) * @param country name of country to get list of proxies for * @param city name of city to get list of proxies for * @return Alphabetically sorted vector with unique proxy names */ std::vector GetProxies(std::string &country, std::string &city); /** * @brief Get list of proxy server addresses in particular country, state and city
* (generic proxy records only) * @param country name of country to get list of proxies for * @param state name of state to get list of proxies for * @param city name of city to get list of proxies for * @return Alphabetically sorted vector with unique proxy names */ std::vector GetProxies(std::string &country, std::string &state, std::string &city); /** * @brief Get list of static proxy entries * @param line number of GUI line proxy list associated with * @return List of static proxy entries sorted by speed in descending order */ std::vector GetStaticProxyGuiLine(unsigned line); /** * @brief Get number of static proxy GUI lines * @return number of static proxy GUI lines or 0 if none */ unsigned GetStaticProxyGuiLines(); /** * Static proxy speed value limit.
* This value is used to determine speed label color. * All speed value below this constant will be red, higher values will be green */ const unsigned StaticProxySpeedLow; protected: Config(); private: static Config *self; bool configValid; std::vector genericProxy; std::vector staticProxy; std::vector firewallList; int ReadGenericProxy(); int ReadStaticProxy(); }; #endif