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.
kmyfirewall/kmyfirewall/genericinterface/kmfgenericinterfacenat.cpp

201 lines
7.0 KiB

//
//
// C++ Implementation: $MODULE$
//
// Description:
//
//
// Author: Christian Hubinger <chubinger@irrsinnig.org>, (C) 2003
//
// Copyright: See COPYING file that comes with this distribution
//
//
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include "kmfgenericinterfacenat.h"
// QT includes
#include <tqstring.h>
#include <tqstringlist.h>
#include <tqcheckbox.h>
#include <tqlistview.h>
// KDE includes
#include <kdebug.h>
#include <tdelocale.h>
#include <kcombobox.h>
#include <knuminput.h>
#include <tdelistview.h>
// Project includes
#include "../core/kmfnetwork.h"
#include "../core/kmftarget.h"
#include "../core/kmftargetconfig.h"
#include "../core/kmfgenericdoc.h"
#include "../core/kmfconfig.h"
namespace KMF {
KMFGenericInterfaceNat::KMFGenericInterfaceNat( TQWidget *parent, const char *name, WFlags f )
: KMyFirewallGenericInterfaceNATWidget( parent, name, f ) {
connect( m_c_enable_nat, TQ_SIGNAL( toggled( bool ) ),
this, TQ_SLOT( slotNatEnabled( bool ) ) );
connect( m_c_use_masquerade, TQ_SIGNAL( toggled( bool ) ),
this, TQ_SLOT( slotMasqueradeEnabled( bool ) ) );
connect( m_sb_addr_1, TQ_SIGNAL( valueChanged( const TQString& ) ),
this, TQ_SLOT( slotAddressChanged( const TQString& ) ) );
connect( m_sb_addr_2, TQ_SIGNAL( valueChanged( const TQString& ) ),
this, TQ_SLOT( slotAddressChanged( const TQString& ) ) );
connect( m_sb_addr_3, TQ_SIGNAL( valueChanged( const TQString& ) ),
this, TQ_SLOT( slotAddressChanged( const TQString& ) ) );
connect( m_sb_addr_4, TQ_SIGNAL( valueChanged( const TQString& ) ),
this, TQ_SLOT( slotAddressChanged( const TQString& ) ) );
connect( m_cb_external_interface, TQ_SIGNAL( activated( const TQString& ) ),
this, TQ_SLOT( slotExternalInterfaceChanged( const TQString& ) ) );
}
KMFGenericInterfaceNat::~KMFGenericInterfaceNat() {}
void KMFGenericInterfaceNat::slotUpdateView( NetfilterObject* ) {
kdDebug() << "KMFGenericInterfaceNat::slotUpdateView( NetfilterObject* )" << endl;
if ( ! m_doc ) {
kdDebug() << "WRINING: m_doc == 0" << endl;
return;
}
slotUpdateView();
}
void KMFGenericInterfaceNat::slotUpdateView() {
kdDebug() << "void KMFGenericInterfaceNat::slotUpdateView()" << endl;
if ( ! m_doc ) {
kdDebug() << "WRINING: m_doc == 0" << endl;
return;
}
m_c_enable_nat->setChecked( m_doc->currentDocAsGenericDoc()->useNat() );
m_c_use_masquerade->setChecked( m_doc->currentDocAsGenericDoc()->useMasquerade() );
// m_c_restrict_nat->setChecked( m_doc->restrictNat() );
m_sb_addr_1->blockSignals( true );
m_sb_addr_2->blockSignals( true );
m_sb_addr_3->blockSignals( true );
m_sb_addr_4->blockSignals( true );
m_sb_addr_1->setValue( m_doc->currentDocAsGenericDoc()->natAddress()->getDigit( 0 ) );
m_sb_addr_2->setValue( m_doc->currentDocAsGenericDoc()->natAddress()->getDigit( 1 ) );
m_sb_addr_3->setValue( m_doc->currentDocAsGenericDoc()->natAddress()->getDigit( 2 ) );
m_sb_addr_4->setValue( m_doc->currentDocAsGenericDoc()->natAddress()->getDigit( 3 ) );
kdDebug() << "Setting Address Fields to: " << m_doc->currentDocAsGenericDoc()->natAddress()->getDigit( 0 ) << "." <<
m_doc->currentDocAsGenericDoc()->natAddress()->getDigit( 1 ) << "." << m_doc->currentDocAsGenericDoc()->natAddress()->getDigit( 2 ) << "." <<
m_doc->currentDocAsGenericDoc()->natAddress()->getDigit( 3 ) << endl;
m_sb_addr_1->blockSignals( false );
m_sb_addr_2->blockSignals( false );
m_sb_addr_3->blockSignals( false );
m_sb_addr_4->blockSignals( false );
TQStringList interfaces = m_doc->currentTarget()->config()->interfaces();
m_cb_external_interface->clear();
m_cb_external_interface->insertStringList( interfaces );
TQString interf = m_doc->currentDocAsGenericDoc()->outgoingInterface();
interf = m_doc->currentDocAsGenericDoc()->outgoingInterface();
bool found = false;
int i = 0;
for ( TQStringList::Iterator it = interfaces.begin(); it != interfaces.end() && ! found; ++it ) {
if ( *it == interf ) {
m_cb_external_interface->setCurrentItem( i );
}
i++;
}
}
/*!
\fn KMFGenericInterfaceNat::loadDoc( KMFGenericDoc* )
*/
void KMFGenericInterfaceNat::loadDoc( KMFNetwork* doc ) {
kdDebug() << "void KMFGenericInterfaceNat::loadDoc( KMFGenericDoc* )" << endl;
m_doc = doc;
slotUpdateView();
}
/*!
\fn KMFGenericInterfaceNat::slotNatEnabled( bool )
*/
void KMFGenericInterfaceNat::slotNatEnabled( bool onoff ) {
KMFUndoEngine::instance()->startTransaction(
m_doc->currentDocAsGenericDoc(),
i18n( "%1 NAT." ).arg( onoff ? i18n( "Enable" ) : i18n( "Disable" ) )
);
m_doc->currentDocAsGenericDoc()->setUseNat( onoff );
m_doc->currentDocAsGenericDoc()->setOutgoingInterface( m_cb_external_interface->currentText () );
KMFUndoEngine::instance()->endTransaction();
}
/*!
\fn KMFGenericInterfaceNat::slotMasqueradeEnabled( bool )
*/
void KMFGenericInterfaceNat::slotMasqueradeEnabled( bool onoff ) {
if ( m_doc->currentDocAsGenericDoc()->useMasquerade() == onoff ) {
return;
}
KMFUndoEngine::instance()->startTransaction(
m_doc->currentDocAsGenericDoc(),
i18n( "%1 MASQUERADE target for NAT." ).arg( onoff ? i18n( "Enable" ) : i18n( "Disable" ) )
);
m_doc->currentDocAsGenericDoc()->setUseMasquerade( onoff );
KMFUndoEngine::instance()->endTransaction();
}
/*!
\fn KMFGenericInterfaceNat::slotAddressChanged( const TQString& )
*/
void KMFGenericInterfaceNat::slotAddressChanged( const TQString& ) {
TQString address = "" + m_sb_addr_1->text() + "." + m_sb_addr_2->text() + "." + m_sb_addr_3->text() + "." + m_sb_addr_4->text();
if ( address == m_doc->currentDocAsGenericDoc()->natAddress()->toString() ) {
return;
}
kdDebug() << "Updating NAT external address to: " << address << endl;
KMFUndoEngine::instance()->startTransaction(
m_doc->currentDocAsGenericDoc(),
i18n( "Set NAT adddress to %1." ).arg( address )
);
m_doc->currentDocAsGenericDoc()->natAddress()->setAddress( m_sb_addr_1->value(),
m_sb_addr_2->value(),
m_sb_addr_3->value(),
m_sb_addr_4->value() );
KMFUndoEngine::instance()->endTransaction();
}
/*!
\fn KMFGenericInterfaceNat::slotOutgoingInterfaceChanged( const TQString& )
*/
void KMFGenericInterfaceNat::slotExternalInterfaceChanged( const TQString& str ) {
if ( m_doc->currentDocAsGenericDoc()->outgoingInterface() == str ) {
return;
}
KMFUndoEngine::instance()->startTransaction(
m_doc->currentDocAsGenericDoc(),
i18n( "Change NAT outgoing interface to %1." ).arg( str )
);
m_doc->currentDocAsGenericDoc()->setOutgoingInterface( str );
KMFUndoEngine::instance()->endTransaction();
slotUpdateView();
}
}
#include "kmfgenericinterfacenat.moc"