// // File : utils.cpp // Creation date : Tue Jul 23 02:54:44 2002 GMT by Szymon Stefanek // // This file is part of the KVirc irc client distribution // Copyright (C) 2002 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 _UTILS_CPP_ #include "utils.h" #include "kvi_options.h" #include "kvi_locale.h" #include "kvi_netutils.h" #include "kvi_ircsocket.h" #include "kvi_qstring.h" /* bool dcc_module_get_listen_ip_address(KviCommand *c,KviConsole * pConsole,TQString &szListenIp) { // // Find an interface suitable for listening.... // Either from user options or from the current connection... // if(KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault)) { KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).stripWhiteSpace(); if(!KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).isEmpty()) { if(kvi_isValidStringIp(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data())) { if(KviTQString::equalCI(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface),"0.0.0.0")) { // Try to find the first available IpV4 interface if(!kvi_getLocalHostAddress(szListenIp)) { if(c)c->warning(__tr2qs_ctx("Can't retrieve a suitable local IPV4 address","dcc"), KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data()); return false; } } else { szListenIp = KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface); } return true; } #ifdef COMPILE_IPV6_SUPPORT if(kvi_isValidStringIp_V6(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data())) { szListenIp = KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface); } else { #endif if(!kvi_getInterfaceAddress(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data(),szListenIp)) { KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault) = false; if(c)c->warning(__tr2qs_ctx("Can't listen on default interface '%s': fix it in the options dialog, disabling the option (so the next dcc will work)","dcc"), KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data()); return false; } #ifdef COMPILE_IPV6_SUPPORT } #endif return true; } else { // the option was empty.. disable it KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault) = false; } } if(pConsole) { if(pConsole->isConnected()) { //#warning "The IPV6 choice is not OK here.... and maybe allow to bind to specified ports" pConsole->socket()->getLocalHostIp(szListenIp,pConsole->isIpV6Connection()); } else { szListenIp = "0.0.0.0"; // huh ? :) } } else { szListenIp = "0.0.0.0"; } return true; } */ bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsole * pConsole,TQString &szListenIp) { // // Find an interface suitable for listening.... // Either from user options or from the current connection... // if(KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault)) { KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).stripWhiteSpace(); if(!KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).isEmpty()) { if(kvi_isValidStringIp(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data())) { if(KviTQString::equalCI(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface),"0.0.0.0")) { // Try to find the first available IpV4 interface if(!kvi_getLocalHostAddress(szListenIp)) { if(c)c->warning(__tr2qs_ctx("Can't retrieve a suitable local IPV4 address","dcc"), KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data()); return false; } } else { szListenIp = KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface); } return true; } #ifdef COMPILE_IPV6_SUPPORT if(kvi_isValidStringIp_V6(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data())) { szListenIp = KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface); } else { #endif if(!kvi_getInterfaceAddress(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data(),szListenIp)) { KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault) = false; if(c)c->warning(__tr2qs_ctx("Can't listen on default interface '%s': fix it in the options dialog, disabling the option (so the next dcc will work)","dcc"), KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).utf8().data()); return false; } #ifdef COMPILE_IPV6_SUPPORT } #endif return true; } else { // the option was empty.. disable it KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault) = false; } } if(pConsole) { if(pConsole->isConnected()) { //#warning "The IPV6 choice is not OK here.... and maybe allow to bind to specified ports" pConsole->socket()->getLocalHostIp(szListenIp,pConsole->isIpV6Connection()); } else { szListenIp = "0.0.0.0"; // huh ? :) } } else { szListenIp = "0.0.0.0"; } return true; }