summaryrefslogtreecommitdiffstats
path: root/kmyfirewall/ruleoptionplugins/mac_option/kmfruleeditmac.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmyfirewall/ruleoptionplugins/mac_option/kmfruleeditmac.cpp')
-rw-r--r--kmyfirewall/ruleoptionplugins/mac_option/kmfruleeditmac.cpp222
1 files changed, 222 insertions, 0 deletions
diff --git a/kmyfirewall/ruleoptionplugins/mac_option/kmfruleeditmac.cpp b/kmyfirewall/ruleoptionplugins/mac_option/kmfruleeditmac.cpp
new file mode 100644
index 0000000..f741055
--- /dev/null
+++ b/kmyfirewall/ruleoptionplugins/mac_option/kmfruleeditmac.cpp
@@ -0,0 +1,222 @@
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+/*
+Author: Christian Hubinger <chubinger@irrsinnig.org>, (C) 2001-2004
+*/
+
+#include "kmfruleeditmac.h"
+
+#include <qcheckbox.h>
+#include <qframe.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qvariant.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kapplication.h>
+
+// project includes
+#include "../../core/xmlnames.h"
+#include "../../core/iptrule.h"
+#include "../../core/iptchain.h"
+#include "../../core/iptable.h"
+#include "../../core/kmfdoc.h"
+#include "../../core/kmfiptdoc.h"
+#include "../../core/kmfcheckinput.h"
+#include "../../core/kmferror.h"
+#include "../../core/kmferrorhandler.h"
+#include "../../core/kmfnetwork.h"
+#include "../../core/kmfundoengine.h"
+
+namespace KMF {
+/*
+ * Constructs a KMFRuleEditMac which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ *
+ * The dialog will by default be modeless, unless you set 'modal' to
+ * TRUE to construct a modal dialog.
+ */
+KMFRuleEditMac::KMFRuleEditMac( QWidget* parent, const char* name, WFlags fl )
+ : KMyFirewallRuleEditorMac( parent, name, fl ) {
+ m_err_handler = new KMFErrorHandler( "KMFRuleEditMac" );
+ m_check_input = new KMFCheckInput();
+ m_err = new KMFError();
+
+
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+KMFRuleEditMac::~KMFRuleEditMac() {
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Main event handler. Reimplemented to handle application
+ * font changes
+ */
+bool KMFRuleEditMac::event( QEvent* ev ) {
+ bool ret = QWidget::event( ev );
+ if ( ev->type() == QEvent::ApplicationFontChange ) {}
+ return ret;
+}
+
+void KMFRuleEditMac::loadRule( IPTRule * rule ) {
+ kdDebug() << "void KMFRuleEditMac::loadRule( IPTRule * rule )" << endl,
+ c_src_mac->setChecked( false );
+ c_inv_src_mac->setChecked( false );
+ t_src_mac1 ->clear();
+ t_src_mac2 ->clear();
+ t_src_mac3 ->clear();
+ t_src_mac4 ->clear();
+ t_src_mac5 ->clear();
+ t_src_mac6 ->clear();
+ m_rule = rule;
+ QString line = "";
+
+ IPTRuleOption* opt = 0;
+ opt = m_rule->getOptionForName("mac_opt");
+ if ( opt ) {
+ QStringList args = opt->getValues();
+ QString src, dest;
+ line = *args.at(1);
+ if ( line.isEmpty() || line == XML::Undefined_Value )
+ return;
+ if ( line.startsWith( "! " ) ) {
+ kdDebug() << "Found Invert Flag" << endl;
+ line = line.right( line.length() - 2 );
+ c_inv_src_mac->setChecked( true );
+ }
+
+ line = line.simplifyWhiteSpace();
+
+ kdDebug() << "Found Mac Address: " << line << endl;
+ if ( line == XML::BoolOff_Value ) {
+ t_src_mac1 -> setText( "" );
+ t_src_mac2 -> setText( "" );
+ t_src_mac3 -> setText( "" );
+ t_src_mac4 -> setText( "" );
+ t_src_mac5 -> setText( "" );
+ t_src_mac6 -> setText( "" );
+ c_src_mac->setChecked( false );
+ return;
+ }
+
+ int num = 1;
+ QString part = "";
+ c_src_mac->setChecked( true );
+ while ( !line.isEmpty() ) {
+ int pos = -1;
+ pos = line.find( ":" );
+ if ( pos < 0 ) {
+ part = line;
+ kdDebug() << "Found last digit: " << part << endl;
+ line = "";
+ } else {
+ kdDebug() << "found delim: " << pos << endl;
+ part = line.left( pos );
+ kdDebug() << "Token Nr." << num << ": " << part << endl;
+ line = line.right( line.length() - ( pos + 1 ) );
+ kdDebug() << "Rest: " << line << endl;
+ }
+ switch ( num ) {
+ case 1:
+ t_src_mac1 -> setText( part );
+ break;
+ case 2:
+ t_src_mac2 -> setText( part );
+ break;
+ case 3:
+ t_src_mac3 -> setText( part );
+ break;
+ case 4:
+ t_src_mac4 -> setText( part );
+ break;
+ case 5:
+ t_src_mac5 -> setText( part );
+ break;
+ case 6:
+ t_src_mac6 -> setText( part );
+ break;
+ }
+ num++;
+ }
+ }
+}
+
+
+void KMFRuleEditMac::accept() {
+ kdDebug() << "KMFRuleEditMac::accept()" << endl;
+ KMFUndoEngine::instance()->startTransaction(
+ m_rule,
+ i18n("Edit Rule: %1 MAC Option").arg( m_rule->name() )
+ );
+ QString tok1 = t_src_mac1->text().upper();
+ QString tok2 = t_src_mac2->text().upper();
+ QString tok3 = t_src_mac3->text().upper();
+ QString tok4 = t_src_mac4->text().upper();
+ QString tok5 = t_src_mac5->text().upper();
+ QString tok6 = t_src_mac6->text().upper();
+
+ if ( c_src_mac->isChecked() && ( tok1.isEmpty() || tok2.isEmpty() || tok3.isEmpty() || tok4.isEmpty() || tok5.isEmpty() || tok6.isEmpty() ) ) {
+ const QString & msg = i18n( "One ore more of the fields are empty. Please fill out all fields to define a valid MAC address." );
+ KMessageBox::error( this, msg );
+ KMFUndoEngine::instance()->abortTransaction();
+ return ;
+ }
+
+ QString mac = "";
+
+ if ( c_src_mac->isChecked() ) {
+ mac = tok1 + ":" + tok2 + ":" + tok3 + ":" + tok4 + ":" + tok5 + ":" + tok6;
+ m_check_input->checkInput( mac, "MAC", m_err );
+ if ( ! m_err_handler->showError( m_err ) ) {
+ KMFUndoEngine::instance()->endTransaction();
+ return ;
+ }
+ }
+
+ QPtrList<QString>* values = new QPtrList<QString>;
+ QString* op = new QString( "mac_opt" );
+ if ( c_src_mac->isChecked() && !mac.isEmpty() ) {
+ kdDebug() << "Add new mac option" << endl;
+ QString* src_mac = new QString( mac );
+ if ( c_inv_src_mac->isChecked() ) {
+ src_mac->prepend( "! " );
+ }
+ values->append( new QString( XML::BoolOn_Value ) );
+ values->append( src_mac );
+ } else {
+ values->append( new QString( XML::BoolOff_Value ) );
+ }
+
+ m_rule->addRuleOption( *op, *values );
+ KMFUndoEngine::instance()->endTransaction();
+ emit sigHideMe();
+}
+
+void KMFRuleEditMac::slotHelp() {
+ kdDebug() << "void KMFRuleEditMac::slotHelp()" << endl;
+ kapp->invokeHelp( "src_mac" );
+}
+void KMFRuleEditMac::reject() {
+ kdDebug() << "void KMFRuleEditMac::reject()" << endl;
+ emit sigHideMe();
+}
+
+}
+
+#include "kmfruleeditmac.moc"