//============================================================================= // // File : kvi_ircserver.cpp // Creation date : Mon Jul 10 2000 03:42:59 by Szymon Stefanek // // This file is part of the KVirc irc client distribution // Copyright (C) 2000-2004 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_ircserver.h" #include "kvi_malloc.h" #include "kvi_config.h" #include "kvi_nickserv.h" #include "kvi_time.h" #include "kvi_proxydb.h" #include // This is not allowed on windows unless we force the symbol to be undefined // It works on linux since gcc allows undefined symbols by default // but it is also "theoretically" wrong: // kvilib is not linked to kvirc: it's kvirc being linked to kvilib // thus kvilib should not depend on symbols defined in the kvirc core. // We must find another way to do that (like having just the id and finding // the proxy in the kvirc core, or just passing the pointer to the db from outside). // Pragma //extern KVIRC_API KviProxyDataBase * g_pProxyDataBase; // FIXME: This should be renamed to KviServer or sth like that KviIrcServer::KviIrcServer() { m_pReconnectInfo=0; m_uFlags = 0; m_uPort = 6667; m_pChannelList = 0; m_bAutoConnect = false; m_iProxy = -1; } KviProxy* KviIrcServer::proxyServer(KviProxyDataBase * pDb) { int i=0; if(proxy()<0) return 0; KviPointerList * proxylist = pDb->proxyList(); for(KviProxy * p = proxylist->first();p;p = proxylist->next()) { if(i==proxy()) return p; i++; } return 0; } KviIrcServer::KviIrcServer(const KviIrcServer &serv) { m_pReconnectInfo = 0; m_szHostname = serv.m_szHostname; m_szIp = serv.m_szIp; m_szDescription = serv.m_szDescription; m_szUser = serv.m_szUser; m_szPass = serv.m_szPass; m_uPort = serv.m_uPort; m_szNick = serv.m_szNick; m_szRealName = serv.m_szRealName; m_szEncoding = serv.m_szEncoding; m_uFlags = serv.m_uFlags; m_szInitUMode = serv.m_szInitUMode; m_szOnConnectCommand = serv.m_szOnConnectCommand; m_szOnLoginCommand = serv.m_szOnLoginCommand; m_szLinkFilter = serv.m_szLinkFilter; m_szId = serv.m_szId; m_iProxy = serv.m_iProxy; m_szUserIdentityId = serv.m_szUserIdentityId; if(serv.m_pChannelList) m_pChannelList = new TQStringList(*(serv.m_pChannelList)); else m_pChannelList = 0; m_bAutoConnect = serv.m_bAutoConnect; } void KviIrcServer::operator=(const KviIrcServer &serv) { m_szHostname = serv.m_szHostname; m_szIp = serv.m_szIp; m_szDescription = serv.m_szDescription; m_szUser = serv.m_szUser; m_szPass = serv.m_szPass; m_uPort = serv.m_uPort; m_szNick = serv.m_szNick; m_szRealName = serv.m_szRealName; m_szEncoding = serv.m_szEncoding; m_uFlags = serv.m_uFlags; m_szInitUMode = serv.m_szInitUMode; m_szOnConnectCommand = serv.m_szOnConnectCommand; m_szOnLoginCommand = serv.m_szOnLoginCommand; m_szLinkFilter = serv.m_szLinkFilter; m_szId = serv.m_szId; m_szUserIdentityId = serv.m_szUserIdentityId; m_iProxy = serv.m_iProxy; if(m_pChannelList)delete m_pChannelList; if(serv.m_pChannelList) m_pChannelList = new TQStringList(*(serv.m_pChannelList)); else m_pChannelList = 0; m_bAutoConnect = serv.m_bAutoConnect; } KviIrcServer::~KviIrcServer() { if(m_pChannelList)delete m_pChannelList; if(m_pReconnectInfo) delete m_pReconnectInfo; } void KviIrcServer::generateUniqueId() { struct timeval tv; kvi_gettimeofday(&tv,0); KviTQString::sprintf(m_szId,"myserver%d%d%d",tv.tv_usec,rand() % 1000,rand() % 1000); } TQString KviIrcServer::ircUri() { TQString uri("irc"); if(useSSL())uri += "s"; if(isIpV6())uri += "6"; uri += "://"; uri += m_szHostname; if(m_uPort!=6667) { uri += ":"; TQString num; num.setNum(m_uPort); uri += num; } return uri; } void KviIrcServer::setAutoJoinChannelList(TQStringList * pNewChannelList) { if(m_pChannelList)delete m_pChannelList; m_pChannelList = pNewChannelList; } bool KviIrcServer::load(KviConfig * cfg,const TQString &prefix) { TQString tmp; KviTQString::sprintf(tmp,"%TQHostname",&prefix); m_szHostname = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQIp",&prefix); m_szIp = cfg->readTQStringEntry(tmp); if(m_szHostname.isEmpty() && m_szIp.isEmpty())return false; KviTQString::sprintf(tmp,"%TQDescription",&prefix); m_szDescription = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQUser",&prefix); m_szUser = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQPass",&prefix); m_szPass = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQNick",&prefix); m_szNick = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQRealName",&prefix); m_szRealName = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQInitUmode",&prefix); m_szInitUMode = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQAutoJoinChannels",&prefix); TQStringList l = cfg->readStringListEntry(tmp,TQStringList()); if(l.count() > 0)setAutoJoinChannelList(new TQStringList(l)); KviTQString::sprintf(tmp,"%TQAutoConnect",&prefix); m_bAutoConnect = cfg->readBoolEntry(tmp,false); KviTQString::sprintf(tmp,"%TQEncoding",&prefix); m_szEncoding = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQOnConnectCommand",&prefix); m_szOnConnectCommand = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQOnLoginCommand",&prefix); m_szOnLoginCommand = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQLinkFilter",&prefix); m_szLinkFilter = cfg->readTQStringEntry(tmp); KviTQString::sprintf(tmp,"%TQPort",&prefix); m_uPort = cfg->readUIntEntry(tmp,6667); KviTQString::sprintf(tmp,"%TQId",&prefix); m_szId = cfg->readTQStringEntry(tmp); if(m_szId.isEmpty())generateUniqueId(); KviTQString::sprintf(tmp,"%TQIpV6",&prefix); setIpV6(cfg->readBoolEntry(tmp,false)); KviTQString::sprintf(tmp,"%TQCacheIp",&prefix); setCacheIp(cfg->readBoolEntry(tmp,false)); // true ? KviTQString::sprintf(tmp,"%TQSSL",&prefix); setUseSSL(cfg->readBoolEntry(tmp,false)); KviTQString::sprintf(tmp,"%TQProxy",&prefix); setProxy(cfg->readIntEntry(tmp,-2)); KviTQString::sprintf(tmp,"%TQUserIdentityId",&prefix); m_szUserIdentityId = cfg->readTQStringEntry(tmp); return true; } void KviIrcServer::save(KviConfig * cfg,const TQString &prefix) { TQString tmp; KviTQString::sprintf(tmp,"%TQHostname",&prefix); cfg->writeEntry(tmp,m_szHostname); KviTQString::sprintf(tmp,"%TQId",&prefix); cfg->writeEntry(tmp,m_szId); if(!m_szIp.isEmpty()) { KviTQString::sprintf(tmp,"%TQIp",&prefix); cfg->writeEntry(tmp,m_szIp); } if(!m_szDescription.isEmpty()) { KviTQString::sprintf(tmp,"%TQDescription",&prefix); cfg->writeEntry(tmp,m_szDescription); } if(!m_szUser.isEmpty()) { KviTQString::sprintf(tmp,"%TQUser",&prefix); cfg->writeEntry(tmp,m_szUser); } if(!m_szPass.isEmpty()) { KviTQString::sprintf(tmp,"%TQPass",&prefix); cfg->writeEntry(tmp,m_szPass); } if(!m_szNick.isEmpty()) { KviTQString::sprintf(tmp,"%TQNick",&prefix); cfg->writeEntry(tmp,m_szNick); } if(!m_szRealName.isEmpty()) { KviTQString::sprintf(tmp,"%TQRealName",&prefix); cfg->writeEntry(tmp,m_szRealName); } if(!m_szInitUMode.isEmpty()) { KviTQString::sprintf(tmp,"%TQInitUMode",&prefix); cfg->writeEntry(tmp,m_szInitUMode); } if(autoJoinChannelList()) { KviTQString::sprintf(tmp,"%TQAutoJoinChannels",&prefix); cfg->writeEntry(tmp,*(autoJoinChannelList())); } if(autoConnect()) // otherwise it defaults to false anyway { KviTQString::sprintf(tmp,"%TQAutoConnect",&prefix); cfg->writeEntry(tmp,autoConnect()); } if(!m_szEncoding.isEmpty()) { KviTQString::sprintf(tmp,"%TQEncoding",&prefix); cfg->writeEntry(tmp,m_szEncoding); } if(!m_szOnConnectCommand.isEmpty()) { KviTQString::sprintf(tmp,"%TQOnConnectCommand",&prefix); cfg->writeEntry(tmp,m_szOnConnectCommand); } if(!m_szOnLoginCommand.isEmpty()) { KviTQString::sprintf(tmp,"%TQOnLoginCommand",&prefix); cfg->writeEntry(tmp,m_szOnLoginCommand); } if(!m_szLinkFilter.isEmpty()) { KviTQString::sprintf(tmp,"%TQLinkFilter",&prefix); cfg->writeEntry(tmp,m_szLinkFilter); } if(m_uPort != 6667) { KviTQString::sprintf(tmp,"%TQPort",&prefix); cfg->writeEntry(tmp,m_uPort); } if(isIpV6()) { KviTQString::sprintf(tmp,"%TQIpV6",&prefix); cfg->writeEntry(tmp,isIpV6()); } if(cacheIp()) { KviTQString::sprintf(tmp,"%TQCacheIp",&prefix); cfg->writeEntry(tmp,cacheIp()); } if(useSSL()) { KviTQString::sprintf(tmp,"%TQSSL",&prefix); cfg->writeEntry(tmp,useSSL()); } if(proxy()!=-2) { KviTQString::sprintf(tmp,"%TQProxy",&prefix); cfg->writeEntry(tmp,proxy()); } if(!m_szUserIdentityId.isEmpty()) { KviTQString::sprintf(tmp,"%TQUserIdentityId",&prefix); cfg->writeEntry(tmp,m_szUserIdentityId); } } KviIrcNetwork::KviIrcNetwork(const KviIrcNetwork &src) { m_pChannelList = 0; m_pNickServRuleSet = 0; copyFrom(src); } KviIrcNetwork::KviIrcNetwork(const TQString &name) { m_szName = name; m_pChannelList = 0; m_pNickServRuleSet = 0; m_bAutoConnect = false; // m_szEncoding = TQString(); // set by default } KviIrcNetwork::~KviIrcNetwork() { if(m_pChannelList)delete m_pChannelList; if(m_pNickServRuleSet)delete m_pNickServRuleSet; } void KviIrcNetwork::setAutoJoinChannelList(TQStringList * pNewChannelList) { if(m_pChannelList)delete m_pChannelList; m_pChannelList = pNewChannelList; } void KviIrcNetwork::setNickServRuleSet(KviNickServRuleSet * s) { if(m_pNickServRuleSet)delete m_pNickServRuleSet; m_pNickServRuleSet = s; } void KviIrcNetwork::copyFrom(const KviIrcNetwork &src) { m_szName = src.m_szName; m_szEncoding = src.m_szEncoding; m_szDescription = src.m_szDescription; m_szNickName = src.m_szNickName; m_szRealName = src.m_szRealName; m_szUserName = src.m_szUserName; m_bAutoConnect = src.m_bAutoConnect; m_szUserIdentityId = src.m_szUserIdentityId; m_szOnConnectCommand = src.m_szOnConnectCommand; m_szOnLoginCommand = src.m_szOnLoginCommand; if(m_pChannelList)delete m_pChannelList; if(src.m_pChannelList)m_pChannelList = new TQStringList(*(src.m_pChannelList)); else m_pChannelList = 0; if(m_pNickServRuleSet)delete m_pNickServRuleSet; if(src.m_pNickServRuleSet)m_pNickServRuleSet = new KviNickServRuleSet(*(src.m_pNickServRuleSet)); else m_pNickServRuleSet = 0; }