#ifndef PROXIFIER_CONFIG #define PROXIFIER_CONFIG #include #include #include #include using namespace std; class QDomDocument; class Proxifier { public: /** * @brief class representing Proxifier's proxy setting */ class Proxy { public: string login; string password; string host; string type; short port; // proxifier-specific fields int id; short option; bool useAuth; // whether to authenticate on server bool emptyAuth; // self-closing auth (for Proxifier it means to use current login+pass) Proxy(); }; /** * @brief class representing Proxifier's proxy chain */ class Chain { public: /** * @brief chain id */ int id; /** * @brief chain name */ string name; /** * @brief associative array of proxies in the chain - [id: isEnabled] */ map proxies; Chain(); }; class Rule { public: /** * @brief indicates if the rule is enabled */ bool isEnabled; /** * @brief rule name */ string name; /** * @brief list of applications the rule affects */ string apps; /** * @brief rule targets (list of hosts separeted w ';') */ string targets; /** * @brief rule ports (e.g.: 80; 8000-9000; 8080) */ string ports; /** * @brief rule action (one of: 'Direct', 'Block', 'Chain', 'Proxy') */ string action; /** * @brief action parameter (applicable only to 'Chain' and 'Proxy' actions) */ int actId; Rule(); }; static Proxifier* GetInstance(); /** * @brief Chack if the current config is valid * @return true if the config is valid or false otherwise * @note you may wish to try ReadConfig() before but if it doesn't help */ bool IsValid(); /** * @brief read Proxifier config from file and parse it * @note you should check IsValid() method to get to know if the config is valid */ void ReadConfig(); private: /** * @brief XML indentation level */ static const int indent = 4; /** * @brief pointer to sigleton instance */ static Proxifier *instance; /** * @brief XML file name to read data from */ QString filename; bool valid; vector proxyList; vector chainList; vector ruleList; Proxifier(); bool ReadProxyList(QDomElement& root); bool ReadChainList(QDomElement& root); bool ReadRuleList(QDomElement& root); /** * @brief gets the next valid ID fo proxy/chain * @note this ID numbers are shared among chains and proxies * @return next valid ID number */ int GetNextId(); /** * @brief add new proxy record to Proxifier config * @param proxy proxy class representing Proxifier's proxy entry * id new proxy id will be set there * @return true on success or false otherwise */ bool AddProxy(Proxy& proxy, int* id); /** * @brief add new chain to proxifier config * @param name the name of the chain * id new chain id * @return true on success or false otherwise */ bool AddChain(string& name, int *id); /** * @brief add proxy to proxy chain * @param proxyId proxy ID to add to proxy chain * chainId chain ID to add proxy to * @return true on success or false otherwise */ bool AddChainProxy(int proxyId, int chainId); /** * @brief remove proxy from proxy chain * @param proxyId proxy ID to remove to proxy chain * chainId chain ID to remove proxy from * @return true on success or false otherwise */ bool RemoveChainProxy(int proxyId, int chainId); /** * @brief add new rule to Proxifier config * @param rule rule class representing Proxifier's rule entry * @return true on success or false otherwise */ bool AddRule(Rule& rule); /** * @brief remove rule to Proxifier config * @param name name of the rule to remove from Rule list * @return true on success or false otherwise */ bool RemoveRule(string name); }; #endif