summaryrefslogtreecommitdiffstats
path: root/src/vpntypesinfodialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vpntypesinfodialog.cpp')
-rw-r--r--src/vpntypesinfodialog.cpp447
1 files changed, 447 insertions, 0 deletions
diff --git a/src/vpntypesinfodialog.cpp b/src/vpntypesinfodialog.cpp
new file mode 100644
index 0000000..afc1fb8
--- /dev/null
+++ b/src/vpntypesinfodialog.cpp
@@ -0,0 +1,447 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Christoph Thielecke *
+ * crissi99@gmx.de *
+ * *
+ * 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#include "vpntypesinfodialog.h"
+#include <klistview.h>
+//#include <qlistviewitem.h>
+#include <qpixmap.h>
+#include <kglobal.h>
+#include <qstring.h>
+#include <kiconloader.h>
+#include <iostream>
+#include <klocale.h>
+#include <qcursor.h>
+#include <qtooltip.h>
+#include <qlistview.h>
+#include <qheader.h>
+#include "utils.h"
+
+/**
+ @author Christoph Thielecke <crissi99@gmx.de>
+*/
+class VpnTypesListViewToolTip : public QToolTip
+{
+ public:
+ VpnTypesListViewToolTip ( QListView* parent );
+ protected:
+ void maybeTip ( const QPoint& p );
+ private:
+ QListView* listView;
+ public:
+
+};
+inline VpnTypesListViewToolTip::VpnTypesListViewToolTip ( QListView* parent ) : QToolTip ( parent->viewport() ), listView ( parent ) {}
+inline void VpnTypesListViewToolTip::maybeTip ( const QPoint& p )
+{
+ if ( !listView )
+ return;
+ const QListViewItem* item = listView->itemAt ( p );
+ if ( !item )
+ return;
+ const QRect itemRect = listView->itemRect ( item );
+ if ( !itemRect.isValid() )
+ return;
+ const int col = listView->header()->sectionAt ( p.x() );
+ const int row = listView->header()->sectionAt ( p.y() );
+ if ( col == -1 && row == -1 )
+ return;
+
+ const QRect headerRect = listView->header()->sectionRect ( col );
+ if ( !headerRect.isValid() )
+ return;
+// const QRect cellRect ( headerRect.left(), itemRect.top(),
+// headerRect.width(), itemRect.height() );
+ const QRect cellRect ( headerRect.left(), itemRect.top(), 400, 200 );
+ QString tipStr;
+
+
+
+ QStringList RequirementsList = QStringList::split( ",",item->text(2));
+ QString RequirementsString="<ul>";
+ for ( QStringList::Iterator it = RequirementsList.begin(); it != RequirementsList.end(); ++it )
+ RequirementsString+="<li>"+*it+"</li>";
+ RequirementsString+="</ul>";
+
+ tipStr = QString ( "<h2>"+item->text ( 0 )+"</h2><ul><li>"+i18n("Requirements:")+" "+RequirementsString+"</li><li>"+i18n("Comment:")+" "+item->text(3)+"</li></ul>");
+
+ tip ( cellRect, tipStr );
+}
+
+
+VpnTypesInfoDialog::VpnTypesInfoDialog ( KVpncConfig *GlobalConfig, QWidget *parent, const char * )
+ :KDialogBase ( parent, "Tool_information", true, "",
+ KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
+{
+ main = new ToolsInfoWidgetBase(this);
+ setMainWidget(main);
+ main->InfoListView->setMinimumSize(main->InfoListView->sizeHint());
+ main->InfoListView->removeColumn(6);
+ main->InfoListView->removeColumn(5);
+ main->InfoListView->removeColumn(4);
+
+ main->InfoListView->setColumnText(0,i18n("VPN type"));
+ main->InfoListView->setColumnText(1,i18n("State"));
+ main->InfoListView->setColumnText(2,i18n("Requirements"));
+ main->InfoListView->setColumnText(3,i18n("Comment"));
+
+ main->textLabel1->setText(i18n("The following information about the VPN tyes has been collected:"));
+
+ QPixmap ok_icon = KGlobal::iconLoader()->loadIcon( "button_ok", KIcon::NoGroup, 16 );
+ QPixmap wrong_icon = KGlobal::iconLoader()->loadIcon( "button_cancel", KIcon::NoGroup, 16 );
+ ToolInfo *tool=0;
+ main->InfoListView->setSorting(1);
+
+ VpnTypesInfoList = new QPtrList<VpnTypeInfo>();
+ VpnTypesInfoList->setAutoDelete( TRUE ); // the list owns the objects
+
+ VpnTypeInfo *it;
+
+ GlobalConfig->appPointer->setOverrideCursor( QCursor(Qt::WaitCursor) );
+
+ Utils UtilsInstance(GlobalConfig);
+
+ it = new VpnTypeInfo();
+ it->VpnType = "cisco";
+ it->Name= i18n("Cisco VPN");
+ it->Requirements.append("vpnc / vpnclient");
+
+ bool vpnc_found = UtilsInstance.getToolInfo("vpnc")->found;
+ bool vpnclient_found = UtilsInstance.getToolInfo("vpnclient")->found;
+
+ if (vpnc_found || vpnclient_found)
+ {
+ it->VpnState=true;
+ it->state=i18n("%1 found").arg(i18n("all tools"));
+ }
+ else
+ {
+ it->VpnState=false;
+ it->state=i18n("%1 missing").arg(i18n("some tools"));
+ }
+
+ if (vpnc_found && !vpnclient_found )
+ {
+ it->Comment+=i18n("no certificate support");
+ }
+ if (vpnc_found && vpnclient_found )
+ {
+ it->Comment+=i18n("certificate support only with vpnclient (original Cisco client)");
+ }
+ if (vpnc_found )
+ {
+ it->Comment+=", "+i18n("hybrid support only if vpnc compiled with OpenSSL support");
+ }
+
+ QListViewItem *item = new QListViewItem(main->InfoListView, it->VpnType,it->state, it->Requirements.join(" "+i18n("and")+" "), it->Comment);
+ if (it->VpnState == true)
+ item->setPixmap(1,ok_icon);
+ else
+ item->setPixmap(1,wrong_icon);
+
+ main->InfoListView->insertItem(item);
+ VpnTypesInfoList->append(it);
+
+ it = new VpnTypeInfo();
+ it->VpnType = "ipsec";
+ it->Name= i18n("IPsec VPN");
+ it->Requirements.append("Openswan / strongSwan / FreeS/Wan / ipsec-tools");
+
+ bool ipsec_found = UtilsInstance.getToolInfo("ipsec")->found;
+ bool racoon_found = UtilsInstance.getToolInfo("racoon")->found;
+
+
+ if (ipsec_found || racoon_found)
+ {
+ it->VpnState=true;
+ it->state=i18n("%1 found").arg(i18n("all tools"));
+ }
+ else
+ {
+ it->VpnState=false;
+ it->state=i18n("%1 missing").arg(i18n("some tools"));
+ }
+
+ if (ipsec_found && ( !UtilsInstance.getToolInfo("ipsec")->Version.contains ( "Openswan" ) && !UtilsInstance.getToolInfo("ipsec")->Version.contains ( "strongswan" ) ))
+ {
+ it->Comment+=i18n("FreeS/WAN detected, please upgrade to Openswan/strongSwan");
+ }
+ if (ipsec_found &&UtilsInstance.getToolInfo("ipsec")->Version.contains ( "Openswan" ) )
+ {
+ it->Comment+=i18n("Openswan detected, no smartcard support");
+ }
+ if (ipsec_found &&UtilsInstance.getToolInfo("ipsec")->Version.contains ( "strongswan" ) )
+ {
+ it->Comment+=i18n("%1 detected").arg(i18n("strongSwan"));
+ }
+
+ item = new QListViewItem(main->InfoListView, it->VpnType,it->state, it->Requirements.join(" "+i18n("and")+" "), it->Comment);
+ if (it->VpnState == true)
+ item->setPixmap(1,ok_icon);
+ else
+ item->setPixmap(1,wrong_icon);
+
+ main->InfoListView->insertItem(item);
+ VpnTypesInfoList->append(it);
+
+ it = new VpnTypeInfo();
+ it->VpnType = "pptp";
+ it->Name= i18n("Microsoft PPTP VPN");
+ it->Requirements.append("pptpclient");
+ it->Requirements.append("pppd");
+ it->Requirements.append(i18n("MPPE extensions in kernel"));
+ bool pptpd_found = UtilsInstance.getToolInfo("pptp")->found;
+ bool pppd_found = UtilsInstance.getToolInfo("pppd")->found;
+
+ Utils::PppdCapabilities pppdcap = UtilsInstance.checkPppdCapabilities();
+
+ if (pppd_found && pptpd_found && (pppdcap.pppdHasMppeRequiredSupport || pppdcap.pppdHasRequireMppeSupport))
+ {
+ it->VpnState=true;
+ it->state=i18n("%1 found").arg(i18n("all tools"));
+ }
+ else
+ {
+ it->VpnState=false;
+ it->state=i18n("%1 missing").arg(i18n("some tools"));
+ }
+
+ if (pptpd_found && !pppd_found )
+ {
+ it->Comment+=i18n("%1 is missing").arg("pppd");
+ }
+ if (!pptpd_found && pppd_found)
+ {
+ it->Comment+=i18n("%1 is missing").arg("pptpclient");
+ }
+
+ if (!pptpd_found && !pppd_found)
+ {
+ it->Comment+=i18n("%1 are missing").arg(i18n("pptpclient and pppd"));
+ }
+
+ if (!it->Comment.isEmpty())
+ it->Comment+=", ";
+ if (!pppdcap.pppdHasMppeRequiredSupport && !pppdcap.pppdHasRequireMppeSupport )
+ it->Comment+=i18n("%1 are missing").arg(i18n("MPPE support"));
+
+ item = new QListViewItem(main->InfoListView, it->VpnType,it->state, it->Requirements.join(" "+i18n("and")+" "), it->Comment);
+ if (it->VpnState == true)
+ item->setPixmap(1,ok_icon);
+ else
+ item->setPixmap(1,wrong_icon);
+
+ main->InfoListView->insertItem(item);
+ VpnTypesInfoList->append(it);
+
+ it = new VpnTypeInfo();
+ it->VpnType = "openvpn";
+ it->Name= i18n("OpenVPN SSL-VPN");
+ it->Requirements.append("openvpn");
+ it->Requirements.append("openssl");
+
+ bool openvpn_found = UtilsInstance.getToolInfo("openvpn")->found;
+ bool openssl_found = UtilsInstance.getToolInfo("openvpn")->found;
+
+ if (openvpn_found && openssl_found)
+ {
+ it->VpnState=true;
+ it->state=i18n("%1 found").arg(i18n("all tools"));
+ }
+ else
+ {
+ it->VpnState=false;
+ it->state=i18n("%1 missing").arg(i18n("some tools"));
+ }
+
+ if (!openvpn_found && openssl_found )
+ {
+ it->Comment+=i18n("%1 is missing").arg("openvpn");
+ }
+ if (openvpn_found && !openssl_found )
+ {
+ it->Comment+=i18n("%1 is missing").arg("openssl");
+ }
+ if (!openvpn_found && !openssl_found)
+ {
+ it->Comment+=i18n("%1 are missing").arg(i18n("openvpn and openssl"));
+ }
+
+ item = new QListViewItem(main->InfoListView, it->VpnType,it->state, it->Requirements.join(" "+i18n("and")+" "), it->Comment);
+ if (it->VpnState == true)
+ item->setPixmap(1,ok_icon);
+ else
+ item->setPixmap(1,wrong_icon);
+
+ main->InfoListView->insertItem(item);
+ VpnTypesInfoList->append(it);
+
+ it = new VpnTypeInfo();
+ it->VpnType = "l2tpd_ipsec";
+ it->Name= i18n("L2TP over IPSec");
+ it->Requirements.append("Openswan / strongSwan / FreeS/Wan / ipsec-tools");
+ it->Requirements.append("l2tpd / xl2tpd / openl2tp");
+
+ ipsec_found = UtilsInstance.getToolInfo("ipsec")->found;
+ racoon_found = UtilsInstance.getToolInfo("racoon")->found;
+ bool l2tpd_found = UtilsInstance.getToolInfo("l2tpd")->found;
+ bool xl2tpd_found = UtilsInstance.getToolInfo("xl2tpd")->found;
+ bool openl2tp_found = UtilsInstance.getToolInfo("openl2tpd")->found;
+
+
+ if ((ipsec_found || racoon_found) && (l2tpd_found || xl2tpd_found || openl2tp_found))
+ {
+ it->VpnState=true;
+ it->state=i18n("%1 found").arg(i18n("all tools"));
+ }
+ else
+ {
+ it->VpnState=false;
+ it->state=i18n("%1 missing").arg(i18n("some tools"));
+ }
+
+ if (ipsec_found && ( !UtilsInstance.getToolInfo("ipsec")->Version.contains ( "Openswan" ) && !UtilsInstance.getToolInfo("ipsec")->Version.contains ( "strongswan" ) ))
+ {
+ it->Comment+=i18n("FreeS/WAN detected, please upgrade to Openswan/strongSwan");
+ }
+ if (ipsec_found && UtilsInstance.getToolInfo("ipsec")->Version.contains ( "Openswan" ) )
+ {
+ it->Comment+=i18n("Openswan detected, no smartcard support");
+ }
+ if (ipsec_found && UtilsInstance.getToolInfo("ipsec")->Version.contains ( "strongswan" ) )
+ {
+ it->Comment+=i18n("%1 detected").arg(i18n("strongSwan"));
+ }
+
+ if (l2tpd_found)
+ {
+ it->Comment+=", ";
+ it->Comment+=i18n("%1 detected").arg(i18n("l2tpd"));
+ }
+ if (xl2tpd_found)
+ {
+ it->Comment+=", ";
+ it->Comment+=i18n("%1 detected").arg(i18n("xl2tpd"));
+ }
+ if (openl2tp_found)
+ {
+ it->Comment+=", ";
+ it->Comment+=i18n("%1 detected").arg(i18n("openl2tp"));
+ }
+
+ item = new QListViewItem(main->InfoListView, it->VpnType,it->state, it->Requirements.join(" "+i18n("and")+" "), it->Comment);
+ if (it->VpnState == true)
+ item->setPixmap(1,ok_icon);
+ else
+ item->setPixmap(1,wrong_icon);
+
+ main->InfoListView->insertItem(item);
+ VpnTypesInfoList->append(it);
+
+ it = new VpnTypeInfo();
+ it->VpnType = "vtun";
+ it->Name= i18n("Vtun VPN");
+ it->Requirements.append("vtund");
+ it->Requirements.append("pppd");
+
+ bool vtund_found = UtilsInstance.getToolInfo("vtund")->found;
+ pppd_found = UtilsInstance.getToolInfo("pppd")->found;
+
+ if (vtund_found && pppd_found)
+ {
+ it->VpnState=true;
+ it->state=i18n("%1 found").arg(i18n("all tools"));
+ }
+ else
+ {
+ it->VpnState=false;
+ it->state=i18n("%1 are missing").arg(i18n("some tools"));
+ }
+
+ if (vtund_found && !pppd_found)
+ {
+ it->Comment+=i18n("%1 is missing").arg("pppd");
+ }
+ if (!vtund_found && pppd_found )
+ {
+ it->Comment+=i18n("%1 is missing").arg("vtun");
+ }
+
+ item = new QListViewItem(main->InfoListView, it->VpnType,it->state, it->Requirements.join(" "+i18n("and")+" "), it->Comment);
+ if (it->VpnState == true)
+ item->setPixmap(1,ok_icon);
+ else
+ item->setPixmap(1,wrong_icon);
+
+ main->InfoListView->insertItem(item);
+ VpnTypesInfoList->append(it);
+
+ it = new VpnTypeInfo();
+ it->VpnType = "ssh";
+ it->Name= i18n("SSH VPN");
+ it->Requirements.append("ssh");
+ it->Requirements.append("ksshaskpass / gnome-ssh-askpass");
+
+ bool ssh_found = UtilsInstance.getToolInfo("ssh")->found;
+ bool ksshaskpass_found = UtilsInstance.getToolInfo("ksshaskpass")->found;
+ bool sshaskpassgnome_found = UtilsInstance.getToolInfo("gnome-ssh-askpass")->found;
+
+ if (ssh_found && (ksshaskpass_found || sshaskpassgnome_found))
+ {
+ it->VpnState=true;
+ it->state=i18n("%1 found").arg(i18n("all tools"));
+ }
+ else
+ {
+ it->VpnState=false;
+ if (!ssh_found && (ksshaskpass_found || sshaskpassgnome_found) )
+ it->Comment+=i18n("%1 is missing").arg("ssh");
+ else
+ it->Comment+=i18n("%1 is missing").arg(i18n("Password entry tool"));
+
+ }
+
+ item = new QListViewItem(main->InfoListView, it->VpnType,it->state, it->Requirements.join(" "+i18n("and")+" "), it->Comment);
+ if (it->VpnState == true)
+ item->setPixmap(1,ok_icon);
+ else
+ item->setPixmap(1,wrong_icon);
+
+ main->InfoListView->insertItem(item);
+ VpnTypesInfoList->append(it);
+
+ main->InfoListView->setResizeMode(QListView::NoColumn);
+// main->InfoListView->setColumnWidthMode(0,QListView::Manual);
+// main->InfoListView->setColumnWidthMode(1,QListView::Manual);
+// main->InfoListView->setColumnWidthMode(2,QListView::Manual);
+// main->InfoListView->setColumnWidthMode(3,QListView::Maximum);
+// main->InfoListView->setColumnWidthMode(4,QListView::Maximum);
+ resize(800,600);
+
+ QToolTip::remove( main->InfoListView );
+ new VpnTypesListViewToolTip( main->InfoListView );
+
+ GlobalConfig->appPointer->restoreOverrideCursor();
+}
+
+
+VpnTypesInfoDialog::~VpnTypesInfoDialog()
+{
+}
+
+