// // C++ Implementation: kmfgenericinterfaceeditprotocol // // Description: // // // Author: Christian Hubinger , (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 "kmfgenericinterfaceeditprotocol.h" // TQt includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // KDE includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Project includes #include "kmflistviewitem.h" #include "../version.h" #include "../core/kmfgenericdoc.h" #include "../core/kmfnetwork.h" #include "../core/kmfprotocol.h" #include "../core/kmfprotocollibrary.h" #include "../core/kmfprotocolcategory.h" #include "../core/kmferror.h" #include "../core/kmferrorhandler.h" namespace KMF { KMFGenericInterfaceEditProtocol::KMFGenericInterfaceEditProtocol( TQWidget *parent, const char *name, WFlags f ) : KMyFirewallGenericInterfaceEditProtocolWidget( parent, name, f ) { // m_protocolsLoaded = false; // m_protocols.clear(); connect( m_lv_protocols, TQ_SIGNAL( pressed( TQListViewItem* ) ) , this, TQ_SLOT( slotNewItemSelected( TQListViewItem* ) ) ); connect( m_lb_tcpPorts, TQ_SIGNAL( currentChanged ( TQListBoxItem * ) ), this, TQ_SLOT( slotCurrentTCPPortChanged( TQListBoxItem * ) ) ); connect( m_lb_udpPorts, TQ_SIGNAL( currentChanged ( TQListBoxItem * ) ), this, TQ_SLOT( slotCurrentUDPPortChanged( TQListBoxItem * ) ) ); // connect( m_sb_port_num, TQ_SIGNAL( valueChanged( int ) ), this, TQ_SLOT( slotPortVauleChanged( int ) ) ); connect( m_te_desc, TQ_SIGNAL( textChanged() ), this, TQ_SLOT( slotNameDescritionChanged() ) ); connect( m_le_protocolName , TQ_SIGNAL( textChanged( const TQString& ) ), this, TQ_SLOT( slotNameDescritionChanged() ) ); connect( m_rb_tcp, TQ_SIGNAL( clicked() ), this, TQ_SLOT( slotProtocolTypeChanged() ) ); connect( m_rb_udp, TQ_SIGNAL( clicked() ), this, TQ_SLOT( slotProtocolTypeChanged() ) ); connect( m_b_add_port, TQ_SIGNAL( clicked() ), this, TQ_SLOT( slotAddPort() ) ); connect( m_b_del_port, TQ_SIGNAL( clicked() ), this, TQ_SLOT( slotDelPort() ) ); connect( m_b_new_protocol, TQ_SIGNAL( clicked() ), this, TQ_SLOT( slotAddProtocol() ) ); connect( m_b_del_protocol, TQ_SIGNAL( clicked() ), this, TQ_SLOT( slotDelProtocol() ) ); connect( m_cb_showAll,TQ_SIGNAL( toggled( bool ) ), this , TQ_SLOT( slotUpdateView() ) ); } KMFGenericInterfaceEditProtocol::~KMFGenericInterfaceEditProtocol() {} void KMFGenericInterfaceEditProtocol::slotNewItemSelected( TQListViewItem* qit ) { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotNewItemSelected(...)" << endl; KMFListViewItem *item = dynamic_cast ( qit ); if ( ! item ) { kdDebug() << "Item was no KMFListViewItem!" << endl; m_gb_edit->setEnabled( false ); m_b_del_protocol->setEnabled( false ); return; } if ( m_protocol && item->type() == NetfilterObject::PROTOCOL && m_protocol->uuid() == item->protocol()->uuid() ) { kdDebug() << "Selected Same Protocal again" << endl; m_gb_edit->setEnabled( m_protocol->customProtocol() ); m_b_del_protocol->setEnabled( m_protocol->customProtocol() ); return; } if ( item->type() != NetfilterObject::PROTOCOL ) { return; } m_gb_edit->setEnabled( true ); m_b_del_protocol->setEnabled( true ); m_protocol = item->protocol(); updateEdit(); } void KMFGenericInterfaceEditProtocol::slotCurrentTCPPortChanged( TQListBoxItem * item ) { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotCurrentTCPPortChanged()" << endl; if ( ! item ) { return; } m_lb_udpPorts->clearSelection(); // m_sb_port_num->setValue( item->text().toInt() ); m_rb_tcp->setChecked( true ); } void KMFGenericInterfaceEditProtocol::slotCurrentUDPPortChanged( TQListBoxItem * item ) { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotCurrentUDPPortChanged()" << endl; if ( ! item ) { return; } m_lb_tcpPorts->clearSelection(); /* m_sb_port_num->blockSignals( true ); m_sb_port_num->setValue( item->text().toInt() ); m_sb_port_num->blockSignals( false );*/ m_rb_udp->setChecked( true ); } void KMFGenericInterfaceEditProtocol::slotProtocolTypeChanged() { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotProtocolTypeChanged()" << endl; if ( ! m_protocol ) { kdDebug() << "\n\nWARNING: No Protocol Object to save Changes in Memory!!\n\n" << endl; return; } m_lb_udpPorts->clearSelection(); m_lb_tcpPorts->clearSelection(); } void KMFGenericInterfaceEditProtocol::slotAddPort() { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotAddPort()" << endl; if ( ! m_protocol ) { kdDebug() << "\n\nWARNING: No Protocol Object to save Changes in Memory!!\n\n" << endl; return; } m_lb_udpPorts->clearSelection(); m_lb_tcpPorts->clearSelection(); if ( m_rb_tcp->isChecked() ) { m_protocol->addPort( m_sb_port_num->text(), KMFProtocol::TCP ); m_lb_tcpPorts->blockSignals( true ); m_lb_tcpPorts->clear(); // TQStringList l = TQStringList::split( ",", m_protocol->tcpPortsList() ); m_lb_tcpPorts->insertStringList( TQStringList::split( ",", m_protocol->tcpPortsList() ) ); m_lb_tcpPorts->blockSignals( false ); for( uint i= 0; i< m_lb_tcpPorts->count(); i++ ) { if ( m_lb_tcpPorts->text( i ) == m_sb_port_num->text() ) { m_lb_tcpPorts->setSelected( i, true ); } } slotProtocolChanged(); } else if ( m_rb_udp->isChecked() ) { m_protocol->addPort( m_sb_port_num->text(), KMFProtocol::UDP ); m_lb_udpPorts->blockSignals( true ); m_lb_udpPorts->clear(); // for( uint i= 0; i< m_protocol->udpPorts()->count(); i++ ) { // m_lb_udpPorts->insert( *m_protocol->udpPorts().at( i ) ); // } m_lb_udpPorts->insertStringList( TQStringList::split( ",", m_protocol->udpPortsList() ) ); m_lb_udpPorts->blockSignals( false ); for( uint i= 0; i< m_lb_udpPorts->count(); i++ ) { if ( m_lb_udpPorts->text( i ) == m_sb_port_num->text() ) { m_lb_udpPorts->setSelected( i, true ); } } slotProtocolChanged(); } } void KMFGenericInterfaceEditProtocol::slotDelPort() { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotDelPort()" << endl; if ( m_lb_tcpPorts->selectedItem() ) { m_protocol->delPort( m_lb_tcpPorts->selectedItem()->text(), KMFProtocol::TCP ); m_lb_tcpPorts->blockSignals( true ); m_lb_tcpPorts->clear(); m_lb_tcpPorts->insertStringList( TQStringList::split( ",", m_protocol->tcpPortsList() ) ); m_lb_tcpPorts->blockSignals( false ); if ( m_lb_tcpPorts->count() > 0 ) { m_lb_tcpPorts->setSelected( 0, true ); } slotProtocolChanged(); } else if ( m_lb_udpPorts->selectedItem() ) { m_protocol->delPort( m_lb_udpPorts->selectedItem()->text(), KMFProtocol::UDP ); m_lb_udpPorts->blockSignals( true ); m_lb_udpPorts->clear(); m_lb_udpPorts->insertStringList( TQStringList::split( ",", m_protocol->udpPortsList() ) ); m_lb_udpPorts->blockSignals( false ); if ( m_lb_udpPorts->count() > 0 ) { m_lb_udpPorts->setSelected( 0, true ); } slotProtocolChanged(); } } void KMFGenericInterfaceEditProtocol::slotAddProtocol() { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotAddProtocol()" << endl; // KMFProtocolCategory* catCustom = KMFProtocol::findCategory( KMFProtocolCategory::customCategoryUuid() ); // if ( ! catCustom ) { // catCustom = KMFProtocolCategory::createCategory( i18n("Custom Protocols") ); // catCustom->setUuid( KMFProtocolCategory::customCategoryUuid().toString() ); // } KMFProtocol *p = KMFProtocolCategory::getCustomCategory()->createProtocol( i18n("New Protocol") ); p->setName( i18n("New Protocol") ); p->setCustomProtocol( true ); m_protocol = p; slotUpdateView(); // KMFListViewItem *item = new KMFListViewItem( m_lv_protocols, p ); // item->loadNetfilterObject( p ); // item->setupProtocolView(); // // m_lv_protocols->setSelected( item, true ); // slotNewItemSelected( item ); } void KMFGenericInterfaceEditProtocol::slotDelProtocol() { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotDelProtocol()" << endl; if ( ! m_protocol ) { return; kdDebug() << "\n\nWARNING: No Protocol Object to save Changes in Memory!!\n\n" << endl; } int doit = KMessageBox::questionYesNo ( this , i18n( "

Are you sure that you want to delete " "the protocol: %1?

").arg( m_protocol->name() ), i18n( "Delete Protocol" ), KStdGuiItem::yes(), KStdGuiItem::no() /*, "protocol_edit_delete_protocol"*/ ); // kdDebug() << "Got Answer: " << doit << endl; if ( doit != 3 ) { return; } // FIXME: Casees Mem0ry Leak, but app crashed othwise! m_protocol->category()->delProtocol( m_protocol, false ); m_protocol = 0; slotNewItemSelected( 0 ); slotUpdateView(); } void KMFGenericInterfaceEditProtocol::slotOnProtocolDeleleted( TQObject* ) { m_protocol = 0; slotUpdateView(); slotNewItemSelected( 0 ); } void KMFGenericInterfaceEditProtocol::slotPortVauleChanged( int val ) { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotPortVauleChanged()" << endl; if ( ! m_protocol ) { kdDebug() << "\n\nWARNING: No Protocol Object to save Changes in Memory!!\n\n" << endl; return; } TQString s = ""; s.setNum( val ); if ( m_rb_udp->isChecked() ) { TQListBoxItem *i = m_lb_udpPorts->selectedItem(); if ( ! i ) { return; } TQString strVal = ""; strVal.setNum( val ); if ( m_protocol->replaceUDPPort( i->text().toInt(), val ) ) { m_lb_udpPorts->blockSignals( true ); m_lb_udpPorts->clear(); m_lb_udpPorts->insertStringList( TQStringList::split( ",", m_protocol->udpPortsList() ) ); for( uint i= 0; i< m_lb_udpPorts->count(); i++ ) { if ( m_lb_udpPorts->text( i ) == strVal ) { m_lb_udpPorts->setSelected( i, true ); break; } } m_lb_udpPorts->blockSignals( false ); slotProtocolChanged(); } } else if ( m_rb_tcp->isChecked() ) { TQListBoxItem *i = m_lb_tcpPorts->selectedItem(); if ( ! i ) { return; } TQString strVal = ""; strVal.setNum( val ); if( m_protocol->replaceTCPPort( i->text().toInt(), val ) ) { m_lb_tcpPorts->blockSignals( true ); m_lb_tcpPorts->clear(); m_lb_tcpPorts->insertStringList( TQStringList::split( ",", m_protocol->tcpPortsList() ) ); for( uint i= 0; i< m_lb_tcpPorts->count(); i++ ) { if ( m_lb_tcpPorts->text( i ) == strVal ) { m_lb_tcpPorts->setSelected( i, true ); break; } } m_lb_tcpPorts->blockSignals( false ); slotProtocolChanged(); } } } void KMFGenericInterfaceEditProtocol::slotNameDescritionChanged() { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotNameDescritionChanged()" << endl; if ( ! m_protocol ) { kdDebug() << "\n\nWARNING: No Protocol Object to save Changes in Memory!!\n\n" << endl; return; } if ( ! m_le_protocolName->text().isEmpty() ) { m_protocol->setName( m_le_protocolName->text().stripWhiteSpace().simplifyWhiteSpace() ); } m_protocol->setDescription( m_te_desc->text().stripWhiteSpace().simplifyWhiteSpace() ); // m_protocol->setCategory( m_cob_ slotProtocolChanged(); } void KMFGenericInterfaceEditProtocol::slotProtocolChanged() { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotProtocolChanged()" << endl; TQListViewItemIterator it( m_lv_protocols ); while ( it.current() ) { KMFListViewItem *kit = dynamic_cast ( it.current() ); if ( kit->type() == NetfilterObject::PROTOCOL && kit->protocol()->uuid() == m_protocol->uuid() ) { kit->setupProtocolView(); kit->setOpen( true ); return; } ++it; } } void KMFGenericInterfaceEditProtocol::updateEdit() { kdDebug() << "void KMFGenericInterfaceEditProtocol::updateEdit()" << endl; if ( ! m_protocol ) { kdDebug() << "\n\nWARNING: No Protocol Object to save Changes in Memory!!\n\n" << endl; m_gb_edit->setEnabled( false ); m_b_del_protocol->setEnabled( false ); return; } m_gb_edit->setEnabled( m_protocol->customProtocol() ); m_b_del_protocol->setEnabled( m_protocol->customProtocol() ); m_le_protocolName->blockSignals( true ); m_te_desc->blockSignals( true ); m_le_protocolName->setText( m_protocol->name() ); m_te_desc->setText( m_protocol->description() ); m_le_protocolName->blockSignals( false ); m_te_desc->blockSignals( false ); m_lb_tcpPorts->clear(); m_lb_udpPorts->clear(); m_lb_tcpPorts->insertStringList( TQStringList::split( ",", m_protocol->tcpPortsList() ) ); m_lb_udpPorts->insertStringList( TQStringList::split( ",", m_protocol->udpPortsList() ) ); } void KMFGenericInterfaceEditProtocol::slotUpdateView() { kdDebug() << "void KMFGenericInterfaceEditProtocol::slotUpdateView()" << endl; m_lv_protocols->clear(); KMFProtocolCategory::getCustomCategory(); if ( m_cb_showAll->isChecked() ) { TQValueList& protCats = KMFProtocolLibrary::instance()->protocolCategories(); TQValueList::iterator it; for( it = protCats.begin(); it != protCats.end(); ++it ) { KMFProtocolCategory* cat = *it; kdDebug() << "\nSetup Category: Item" << cat->name() << endl; KMFListViewItem *item = new KMFListViewItem( m_lv_protocols, cat ); item->loadNetfilterObject( cat ); item->setupProtocolCategoryView(); if ( cat == KMFProtocolCategory::getCustomCategory() ) { item->setOpen( true ); } } } else { KMFProtocolCategory* customCat = KMFProtocolCategory::getCustomCategory(); KMFListViewItem *item = new KMFListViewItem( m_lv_protocols, customCat ); item->loadNetfilterObject( customCat ); item->setupProtocolCategoryView(); item->setOpen( true ); } TQValueList< KMFProtocol* >& prots = KMFProtocolCategory::getCustomCategory()->protocols(); TQValueList< KMFProtocol* >::iterator it; for( it = prots.begin(); it != prots.end(); ++it ) { KMFProtocol* p= *it; disconnect( p, TQ_SIGNAL( destroyed( TQObject* ) ), this, TQ_SLOT( slotOnProtocolDeleleted( TQObject* ) ) ); connect( p, TQ_SIGNAL( destroyed( TQObject* ) ), this, TQ_SLOT( slotOnProtocolDeleleted( TQObject* ) ) ); } setEnabled( true ); } void KMFGenericInterfaceEditProtocol::loadDoc( KMFNetwork* doc ) { kdDebug() << "void KMFGenericInterfaceLogging::loadDoc( KMFGenericDoc* )" << endl; m_network = doc; slotUpdateView(); } void KMFGenericInterfaceEditProtocol::saveProtocols() { kdDebug() << "KMFGenericInterfaceEditProtocol::saveProtocols()" << endl; KMFErrorHandler *errH = new KMFErrorHandler( "KMFErrorHandler" ); errH->showError( KMFProtocolLibrary::instance()->saveProtocolLibrary() ); } } #include "kmfgenericinterfaceeditprotocol.moc"