//============================================================================= // // File : KviProxyDataBase.cpp // Creation date : Sat Jul 22 2000 18:23:23 by Szymon Stefanek // // This file is part of the KVIrc IRC client distribution // Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net) // // This program 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 program 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 program. If not, write to the Free Software Foundation, // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // //============================================================================= #include "KviProxyDataBase.h" #include "KviConfigurationFile.h" #include "KviCString.h" #include "KviProxy.h" #include void KviProxyDataBase::updateProxyIp(const char * proxy, const char * ip) { for(auto & prx : m_pProxyList) { if(QString::compare(proxy, prx->hostname(), Qt::CaseInsensitive)) { prx->setIp(ip); return; } } } KviProxy * KviProxyDataBase::findProxy(const KviProxy * pProxy, bool bName) { for(auto & p : m_pProxyList) { if(bName) { if(QString::compare(p->hostname(), pProxy->hostname(), Qt::CaseInsensitive)) return p.get(); } else { if(QString::compare(p->hostname(), pProxy->hostname(), Qt::CaseInsensitive) && (p->port() == pProxy->port()) && (p->protocol() == pProxy->protocol()) && (p->isIPv6() == pProxy->isIPv6())) return p.get(); } } return nullptr; } void KviProxyDataBase::clear() { m_pProxyList.clear(); m_pCurrentProxy = nullptr; } void KviProxyDataBase::load(const QString & filename) { clear(); KviConfigurationFile cfg(filename, KviConfigurationFile::Read); unsigned int nEntries = cfg.readUIntEntry("Entries", 0); for(unsigned int i = 0; i < nEntries; i++) { std::unique_ptr p(new KviProxy()); KviCString tmp(KviCString::Format, "%u_Hostname", i); p->setHostname(cfg.readEntry(tmp.ptr(), "proxy.example.net")); tmp.sprintf("%u_Port", i); p->setPort(cfg.readUIntEntry(tmp.ptr(), 7000)); tmp.sprintf("%u_Ip", i); p->setIp(cfg.readEntry(tmp.ptr(), "")); tmp.sprintf("%u_User", i); p->setUser(cfg.readEntry(tmp.ptr(), "")); tmp.sprintf("%u_Pass", i); p->setPass(cfg.readEntry(tmp.ptr(), "")); tmp.sprintf("%u_Protocol", i); KviCString type = cfg.readEntry(tmp.ptr(), "SOCKSv4"); p->setNamedProtocol(type.ptr()); tmp.sprintf("%u_IsIPv6", i); p->setIPv6(cfg.readBoolEntry(tmp.ptr(), false)); tmp.sprintf("%u_Current", i); if(cfg.readBoolEntry(tmp.ptr(), false)) m_pCurrentProxy = p.get(); m_pProxyList.push_back(std::move(p)); } if(!m_pCurrentProxy && !m_pProxyList.empty()) m_pCurrentProxy = m_pProxyList.front().get(); } void KviProxyDataBase::save(const QString & filename) { KviConfigurationFile cfg(filename, KviConfigurationFile::Write); cfg.clear(); cfg.writeEntry("Entries", static_cast(m_pProxyList.size())); int i = 0; for(auto & p : m_pProxyList) { KviCString tmp(KviCString::Format, "%u_Hostname", i); cfg.writeEntry(tmp.ptr(), p->hostname()); tmp.sprintf("%u_Port", i); cfg.writeEntry(tmp.ptr(), p->port()); tmp.sprintf("%u_Ip", i); cfg.writeEntry(tmp.ptr(), p->ip()); tmp.sprintf("%u_User", i); cfg.writeEntry(tmp.ptr(), p->user()); tmp.sprintf("%u_Pass", i); cfg.writeEntry(tmp.ptr(), p->pass()); tmp.sprintf("%u_Protocol", i); cfg.writeEntry(tmp.ptr(), p->protocolName()); tmp.sprintf("%u_IsIPv6", i); cfg.writeEntry(tmp.ptr(), p->isIPv6()); tmp.sprintf("%u_Current", i); if(m_pCurrentProxy == p.get()) cfg.writeEntry(tmp.ptr(), true); i++; } }