You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kvirc/src/kvilib/ext/kvi_proxydb.cpp

193 lines
4.9 KiB

//
// File : kvi_proxydb.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) 1999-2000 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 opinion) 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.
//
#define __KVILIB__
#include "kvi_proxydb.h"
#include "kvi_config.h"
KviProxy::KviProxy()
{
m_szHostname = "proxy.example.net";
m_uPort = 1080;
m_protocol = Socks4;
m_bIsIpV6 = false;
}
KviProxy::KviProxy(const KviProxy &prx)
{
m_szHostname = prx.m_szHostname;
m_szIp = prx.m_szIp;
m_szUser = prx.m_szUser;
m_szPass = prx.m_szPass;
m_uPort = prx.m_uPort;
m_protocol = prx.m_protocol;
m_bIsIpV6 = prx.m_bIsIpV6;
}
KviProxy::~KviProxy()
{
}
static const char * proxy_protocols_table[3]= { "SOCKSv4", "SOCKSv5", "HTTP" };
const char * KviProxy::protocolName() const
{
switch(m_protocol)
{
case Socks5: return proxy_protocols_table[1]; break;
case Http: return proxy_protocols_table[2]; break;
default: return proxy_protocols_table[0]; break;
}
return proxy_protocols_table[0];
}
void KviProxy::setNamedProtocol(const char * proto)
{
if(kvi_strEqualCI(proto,"SOCKSv5"))m_protocol = KviProxy::Socks5;
else if(kvi_strEqualCI(proto,"HTTP"))m_protocol = KviProxy::Http;
else m_protocol = KviProxy::Socks4;
}
void KviProxy::getSupportedProtocolNames(TQStringList & buf)
{
for(int i=0;i<3;i++)buf.append(TQString(proxy_protocols_table[i]));
}
void KviProxy::normalizeUserAndPass()
{
m_szUser.stripWhiteSpace();
m_szPass.stripWhiteSpace();
}
KviProxyDataBase::KviProxyDataBase()
{
m_pProxyList = new KviPointerList<KviProxy>;
m_pProxyList->setAutoDelete(true);
m_pCurrentProxy = 0;
}
KviProxyDataBase::~KviProxyDataBase()
{
delete m_pProxyList;
}
void KviProxyDataBase::updateProxyIp(const char * proxy,const char * ip)
{
for(KviProxy * prx = m_pProxyList->first();prx;prx = m_pProxyList->next())
{
if(kvi_strEqualCI(proxy,prx->m_szHostname.ptr()))
{
prx->m_szIp = ip;
return;
}
}
}
void KviProxyDataBase::clear()
{
delete m_pProxyList;
m_pProxyList = new KviPointerList<KviProxy>;
m_pProxyList->setAutoDelete(true);
m_pCurrentProxy = 0;
}
void KviProxyDataBase::load(const char * filename)
{
clear();
KviConfig cfg(filename,KviConfig::Read);
unsigned int nEntries = cfg.readUIntEntry("Entries",0);
for(unsigned int i=0;i<nEntries;i++)
{
KviProxy * p = new KviProxy();
KviStr tmp(KviStr::Format,"%u_Hostname",i);
p->m_szHostname = cfg.readEntry(tmp.ptr(),"proxy.example.net");
tmp.sprintf("%u_Port",i);
p->m_uPort = cfg.readUIntEntry(tmp.ptr(),7000);
tmp.sprintf("%u_Ip",i);
p->m_szIp = cfg.readEntry(tmp.ptr(),"");
tmp.sprintf("%u_User",i);
p->m_szUser = cfg.readEntry(tmp.ptr(),"");
tmp.sprintf("%u_Pass",i);
p->m_szPass = cfg.readEntry(tmp.ptr(),"");
tmp.sprintf("%u_Protocol",i);
KviStr type = cfg.readEntry(tmp.ptr(),"SOCKSv4");
p->setNamedProtocol(type.ptr());
tmp.sprintf("%u_IsIpV6",i);
p->m_bIsIpV6 = cfg.readBoolEntry(tmp.ptr(),false);
tmp.sprintf("%u_Current",i);
if(cfg.readBoolEntry(tmp.ptr(),false))m_pCurrentProxy = p;
m_pProxyList->append(p);
}
if(!m_pCurrentProxy)m_pCurrentProxy = m_pProxyList->first();
}
void KviProxyDataBase::save(const char * filename)
{
KviConfig cfg(filename,KviConfig::Write);
cfg.clear();
cfg.writeEntry("Entries",m_pProxyList->count());
int i=0;
for(KviProxy * p=m_pProxyList->first();p;p=m_pProxyList->next())
{
KviStr tmp(KviStr::Format,"%u_Hostname",i);
cfg.writeEntry(tmp.ptr(),p->m_szHostname.ptr());
tmp.sprintf("%u_Port",i);
cfg.writeEntry(tmp.ptr(),p->m_uPort);
tmp.sprintf("%u_Ip",i);
cfg.writeEntry(tmp.ptr(),p->m_szIp.ptr());
tmp.sprintf("%u_User",i);
cfg.writeEntry(tmp.ptr(),p->m_szUser.ptr());
tmp.sprintf("%u_Pass",i);
cfg.writeEntry(tmp.ptr(),p->m_szPass.ptr());
tmp.sprintf("%u_Protocol",i);
KviStr type;
switch(p->m_protocol)
{
case KviProxy::Socks5: type = "SOCKSv5"; break;
case KviProxy::Http: type = "HTTP"; break;
default: type = "SOCKSv4"; break;
}
cfg.writeEntry(tmp.ptr(),type.ptr());
tmp.sprintf("%u_IsIpV6",i);
cfg.writeEntry(tmp.ptr(),p->m_bIsIpV6);
tmp.sprintf("%u_Current",i);
if(m_pCurrentProxy == p)cfg.writeEntry(tmp.ptr(),true);
i++;
}
}