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.
166 lines
5.6 KiB
166 lines
5.6 KiB
/*
|
|
smpppdcsprefsimpl.cpp
|
|
|
|
Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
|
|
|
|
Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
|
|
|
|
*************************************************************************
|
|
* *
|
|
* 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; version 2 of the License. *
|
|
* *
|
|
*************************************************************************
|
|
*/
|
|
|
|
#include <arpa/inet.h>
|
|
#include <netdb.h>
|
|
|
|
#include <tqradiobutton.h>
|
|
|
|
#include <kstandarddirs.h>
|
|
#include <kapplication.h>
|
|
#include <kpushbutton.h>
|
|
#include <kresolver.h>
|
|
#include <knuminput.h>
|
|
#include <klocale.h>
|
|
#include <kdebug.h>
|
|
|
|
#include "kopetepluginmanager.h"
|
|
|
|
#include "../smpppdcsplugin.h"
|
|
|
|
#include "smpppdlocationwidget.h"
|
|
#include "smpppdcsprefsimpl.h"
|
|
#include "smpppdsearcher.h"
|
|
|
|
SMPPPDCSPrefs::SMPPPDCSPrefs(TQWidget* parent, const char* name, WFlags fl)
|
|
: SMPPPDCSPrefsBase(parent, name, fl), m_plugin(NULL), m_scanProgressDlg(NULL), m_curSearcher(NULL) {
|
|
|
|
// search for our main-plugin instance
|
|
Kopete::Plugin * p = Kopete::PluginManager::self()->plugin("kopete_smpppdcs");
|
|
if(p) {
|
|
m_plugin = static_cast<SMPPPDCSPlugin *>(p);
|
|
}
|
|
|
|
// signals and slots connections
|
|
connect(useNetstat, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(disableSMPPPDSettings()));
|
|
connect(useSmpppd, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(enableSMPPPDSettings()));
|
|
connect(autoCSTest, TQT_SIGNAL(clicked()), this, TQT_SLOT(determineCSType()));
|
|
|
|
if(m_plugin) {
|
|
connect((TQObject *)SMPPPDLocation->server, TQT_SIGNAL(textChanged(const TQString&)),
|
|
m_plugin, TQT_SLOT(smpppdServerChanged(const TQString&)));
|
|
}
|
|
|
|
// if netstat is NOT available, disable the option and set to SMPPPD
|
|
if(KStandardDirs::findExe("netstat") == TQString()) {
|
|
autoCSTest->setEnabled(FALSE);
|
|
useNetstat->setEnabled(FALSE);
|
|
useNetstat->setChecked(FALSE);
|
|
useSmpppd->setChecked(TRUE);
|
|
}
|
|
}
|
|
|
|
SMPPPDCSPrefs::~SMPPPDCSPrefs() {
|
|
delete m_scanProgressDlg;
|
|
}
|
|
|
|
void SMPPPDCSPrefs::determineCSType() {
|
|
|
|
// while we search, we'll disable the button
|
|
autoCSTest->setEnabled(false);
|
|
//kapp->processEvents();
|
|
|
|
/* broadcast network for a smpppd.
|
|
If one is available set to smpppd method */
|
|
|
|
SMPPPDSearcher searcher;
|
|
m_curSearcher = &searcher;
|
|
|
|
connect(&searcher, TQT_SIGNAL(smpppdFound(const TQString&)), this, TQT_SLOT(smpppdFound(const TQString&)));
|
|
connect(&searcher, TQT_SIGNAL(smpppdNotFound()), this, TQT_SLOT(smpppdNotFound()));
|
|
connect(&searcher, TQT_SIGNAL(scanStarted(uint)), this, TQT_SLOT(scanStarted(uint)));
|
|
connect(&searcher, TQT_SIGNAL(scanProgress(uint)), this, TQT_SLOT(scanProgress(uint)));
|
|
connect(&searcher, TQT_SIGNAL(scanFinished()), this, TQT_SLOT(scanFinished()));
|
|
|
|
searcher.searchNetwork();
|
|
m_curSearcher = NULL;
|
|
}
|
|
|
|
void SMPPPDCSPrefs::scanStarted(uint total) {
|
|
kdDebug(14312) << k_funcinfo << "Scanning for a SMPPPD started. Will scan " << total << " IPs" << endl;
|
|
|
|
// setup the scanProgress Dialog
|
|
if(!m_scanProgressDlg) {
|
|
m_scanProgressDlg = new KProgressDialog(this, 0, i18n("Searching"), i18n("Searching for a SMPPPD on the local network..."), TRUE);
|
|
m_scanProgressDlg->setAutoClose(TRUE);
|
|
m_scanProgressDlg->setAllowCancel(TRUE);
|
|
m_scanProgressDlg->setMinimumDuration(2000);
|
|
|
|
connect(m_scanProgressDlg, TQT_SIGNAL(cancelClicked()), this, TQT_SLOT(cancelScanning()));
|
|
}
|
|
m_scanProgressDlg->progressBar()->setTotalSteps(total);
|
|
m_scanProgressDlg->progressBar()->setProgress(0);
|
|
m_scanProgressDlg->show();
|
|
}
|
|
|
|
void SMPPPDCSPrefs::scanProgress(uint cur) {
|
|
m_scanProgressDlg->progressBar()->setProgress(cur);
|
|
kapp->processEvents();
|
|
}
|
|
|
|
void SMPPPDCSPrefs::cancelScanning() {
|
|
kdDebug(14312) << k_funcinfo << endl;
|
|
Q_ASSERT(m_curSearcher);
|
|
m_curSearcher->cancelSearch();
|
|
}
|
|
|
|
void SMPPPDCSPrefs::smpppdFound(const TQString& host) {
|
|
kdDebug(14312) << k_funcinfo << endl;
|
|
|
|
TQString myHost = host;
|
|
|
|
// try to get the domain name
|
|
struct in_addr addr;
|
|
if(inet_aton(host.ascii(), &addr)) {
|
|
struct hostent * hostEnt = gethostbyaddr(&addr.s_addr, sizeof(addr.s_addr), AF_INET);
|
|
if(hostEnt) {
|
|
myHost = hostEnt->h_name;
|
|
} else {
|
|
#ifndef NDEBUG
|
|
switch(h_errno) {
|
|
case HOST_NOT_FOUND:
|
|
kdDebug(14312) << k_funcinfo << "No such host is known in the database." << endl;
|
|
break;
|
|
case TRY_AGAIN:
|
|
kdDebug(14312) << k_funcinfo << "Couldn't contact DNS server." << endl;
|
|
break;
|
|
case NO_RECOVERY:
|
|
kdDebug(14312) << k_funcinfo << "A non-recoverable error occurred." << endl;
|
|
break;
|
|
case NO_ADDRESS:
|
|
kdDebug(14312) << k_funcinfo << "The host database contains an entry for the name, but it doesn't have an associated Internet address." << endl;
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
}
|
|
}
|
|
|
|
SMPPPDLocation->setServer(myHost);
|
|
useNetstat->setChecked(false);
|
|
useSmpppd->setChecked(true);
|
|
autoCSTest->setEnabled(true);
|
|
}
|
|
|
|
void SMPPPDCSPrefs::smpppdNotFound() {
|
|
kdDebug(14312) << k_funcinfo << endl;
|
|
useNetstat->setChecked(true);
|
|
useSmpppd->setChecked(false);
|
|
autoCSTest->setEnabled(true);
|
|
}
|
|
|
|
#include "smpppdcsprefsimpl.moc"
|