#ifndef CONFIG_H #define CONFIG_H #include #include "Proxy.h" using std::vector; using std::string; /** * @brief represents client configuration
* When vreated config.cfg is read to determine basic settings, server addresses, etc.
*/ class Config { public: /** * @brief Class to represent 'firewall' record in the config file */ class FirewallEntry { public: FirewallEntry(): 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 */ string host; /** * @brief Extract and set instance variables from config line */ void Parse(string entry); }; /** * @brief class that represent file actions that should be taken: update/delete */ class FileEntry { public: /** * @enum possible file action types */ enum ActionType { /** * @brief unknown file action (default) */ UnknownAction, /** * @brief delete file from filesystem (if it exists) */ DeleteAction, /** * @brief download file to filesystem (if it isn't exists) */ DownloadAction }; FileEntry(): action(UnknownAction) {} /** * @brief action that should be taken */ ActionType action; /** * @brief file path */ string path; /** * @brief md5hash value for this file ('upload' action only) */ string md5; /** * @brief Extract and set instance variables from config line */ void Parse(string entry, ActionType _action); }; /** * @brief Time between consecutive program updates */ unsigned ClientUpdateInterval; /** * @brief Welcome message that is displayed after program start */ string WelcomeMsg; /** * @brief Message that is shown when the config.cfg downloaded/updated * successfully */ string ConfigLoadedMsg; /** * @brief Text that is displayed in as the top panel caption in the UI */ string TopPanelText; /** * @brief Text that is displayed in as the bottom panel caption in the UI */ string BottomPanelText; /** * @brief Determines whether proxy speed displayed in the UI or not */ bool IsSpeedVisible; /** * @brief Full filename of the Proxyfier's executable */ string ProxifierExeFile; /** * @brief Full filename of the Proxyfier's profile */ string ProxifierConfigFile; /** * @brief Update client configuration * @deprecated config is updated periodically on timer events now */ void AcquireConfig(); /** * @brief Get list of country names where at least one proxy available
* (generic proxy records only) * @return Alphabetically sorted vector with unique country names */ 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 */ vector GetStates(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 */ vector GetCities(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 */ vector GetCities(string &country, 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 */ vector GetProxies(string &country, 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 */ vector GetProxies(string &country, string &state, string &city); /** * @brief Get static proxy entry by name * @param name static proxy name * @return pointer to ProxyEntryStatic object on success or NULL otherwise */ ProxyEntryStatic* GetStaticProxy(string& name); /** * @brief Getgeneric proxy entry by host name and port values * @param host host name of proxy to check for * port port value of proxy to check for * @return pointer to ProxyEntryGeneric object on success or NULL otherwise */ ProxyEntryGeneric* GetGenericProxy(string host, short port); /** * @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 */ 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(); /** * @brief Get list of files to be deleted * @return List of FileEntry wrapper object that describe files that should be deleted */ vector GetDeleteList(); /** * @brief Get list of files to be downloaded * @return List of FileEntry wrapper object that describe files that should be downloaded */ vector GetDownloadList(); /** * @brief Get list of firewall rules * @return List of FirewallEntry wrapper object that describe firewall rules */ vector GetFirewallList(); /** * @brief Static proxy speed value limit.
* This value is used to determine speed label color. * All speed value below this constant will be yellow, higher values will be green */ const unsigned StaticProxySpeedLow; /** * @brief 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 yellow */ const unsigned StaticProxySpeedLowCrucial; protected: /** * @brief Class to represend 'server' record in the config file */ class ServerEntry { public: /** * @brief Initialize ServerEntry instance to default values */ ServerEntry(): host("127.0.0.1"), timeout(120), retryTimeout(60) {} /** * @brief initilize ServerEntry instance from config file entry
* @param entry config file entry value, e.g.: '8.8.8.8:8080 600 60' */ ServerEntry(string& entry); /** * @brief Hostname or address of server
* Note that default port is 13666 as specified in SslClient */ 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 retryTimeout; }; /** * @brief array of config server entries */ vector servers; /** * @brief time between subsequent config updates */ unsigned updateInterval; /** * @brief create new instance (not allowed for use by other classes and functions) */ Config(); /** * @brief parse client configuration * @param data string containing configuration parameters */ void ParseConfig(string data); /** * @brief parse list of generic proxies * @param data string containing list of ProxyEntryGeneric records */ void ParseGenericProxies(string data); /** * @brief parse list of static proxies * @param data string containing list of ProxyEntryStatic records */ void ParseStaticProxies(string data); /** * @brief parse firewall configuration * @param data string containing list of FirewallEntry records */ void ParseFirewalls(string data); /** * @brief parse list of file to be deleted * @param data string containing path to aforementioned file */ void ParseDeleteList(string data); /** * @brief parse list of files to be downloaded * @param data string containing path to new file and it's md5 hash */ void ParseDownloadList(string data); private: void ReadGenericProxy(); void ReadStaticProxy(); vector genericProxy; vector staticProxy; vector firewalls; vector fileActions; }; #endif