/* Copyright (C) 2010-2014 Srivats P. This file is part of "Ostinato" This 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 3 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, see */ #include "ip6config.h" #include "ip6.h" #include "ipv6addressvalidator.h" #include Ip6ConfigForm::Ip6ConfigForm(QWidget *parent) : AbstractProtocolConfigForm(parent) { setupUi(this); version->setValidator(new QIntValidator(0, 0xF, this)); payloadLength->setValidator(new QIntValidator(0, 0xFFFF, this)); hopLimit->setValidator(new QIntValidator(0, 0xFF, this)); srcAddr->setValidator(new IPv6AddressValidator(this)); srcAddrCount->setValidator(new QIntValidator(this)); //srcAddrPrefix->setValidator(new QIntValidator(0, 128, this)); dstAddr->setValidator(new IPv6AddressValidator(this)); dstAddrCount->setValidator(new QIntValidator(this)); //dstAddrPrefix->setValidator(new QIntValidator(0, 128, this)); } AbstractProtocolConfigForm* Ip6ConfigForm::createInstance() { return new Ip6ConfigForm; } void Ip6ConfigForm::on_srcAddr_editingFinished() { srcAddr->setText(QHostAddress(srcAddr->text()).toString()); } void Ip6ConfigForm::on_dstAddr_editingFinished() { dstAddr->setText(QHostAddress(dstAddr->text()).toString()); } void Ip6ConfigForm::on_srcAddrModeCombo_currentIndexChanged(int index) { bool enabled = (index > 0); srcAddrCount->setEnabled(enabled); srcAddrPrefix->setEnabled(enabled); } void Ip6ConfigForm::on_dstAddrModeCombo_currentIndexChanged(int index) { bool enabled = (index > 0); dstAddrCount->setEnabled(enabled); dstAddrPrefix->setEnabled(enabled); } void Ip6ConfigForm::loadWidget(AbstractProtocol *ip6Proto) { isVersionOverride->setChecked( ip6Proto->fieldData( Ip6Protocol::ip6_isOverrideVersion, AbstractProtocol::FieldValue ).toBool()); version->setText( ip6Proto->fieldData( Ip6Protocol::ip6_version, AbstractProtocol::FieldValue ).toString()); tosDscp->setValue( ip6Proto->fieldData( Ip6Protocol::ip6_trafficClass, AbstractProtocol::FieldValue ).toUInt()); flowLabel->setText(QString("%1").arg( ip6Proto->fieldData( Ip6Protocol::ip6_flowLabel, AbstractProtocol::FieldValue ).toUInt(), 5, BASE_HEX, QChar('0'))); isPayloadLengthOverride->setChecked( ip6Proto->fieldData( Ip6Protocol::ip6_isOverridePayloadLength, AbstractProtocol::FieldValue ).toBool()); payloadLength->setText( ip6Proto->fieldData( Ip6Protocol::ip6_payloadLength, AbstractProtocol::FieldValue ).toString()); isNextHeaderOverride->setChecked( ip6Proto->fieldData( Ip6Protocol::ip6_isOverrideNextHeader, AbstractProtocol::FieldValue ).toBool()); nextHeader->setText(uintToHexStr( ip6Proto->fieldData( Ip6Protocol::ip6_nextHeader, AbstractProtocol::FieldValue ).toUInt(), 1)); hopLimit->setText( ip6Proto->fieldData( Ip6Protocol::ip6_hopLimit, AbstractProtocol::FieldValue ).toString()); srcAddr->setText( ip6Proto->fieldData( Ip6Protocol::ip6_srcAddress, AbstractProtocol::FieldTextValue ).toString()); srcAddrModeCombo->setCurrentIndex( ip6Proto->fieldData( Ip6Protocol::ip6_srcAddrMode, AbstractProtocol::FieldValue ).toUInt()); srcAddrCount->setText( ip6Proto->fieldData( Ip6Protocol::ip6_srcAddrCount, AbstractProtocol::FieldValue ).toString()); srcAddrPrefix->setText( ip6Proto->fieldData( Ip6Protocol::ip6_srcAddrPrefix, AbstractProtocol::FieldValue ).toString()); dstAddr->setText( ip6Proto->fieldData( Ip6Protocol::ip6_dstAddress, AbstractProtocol::FieldTextValue ).toString()); dstAddrModeCombo->setCurrentIndex( ip6Proto->fieldData( Ip6Protocol::ip6_dstAddrMode, AbstractProtocol::FieldValue ).toUInt()); dstAddrCount->setText( ip6Proto->fieldData( Ip6Protocol::ip6_dstAddrCount, AbstractProtocol::FieldValue ).toString()); dstAddrPrefix->setText( ip6Proto->fieldData( Ip6Protocol::ip6_dstAddrPrefix, AbstractProtocol::FieldValue ).toString()); } void Ip6ConfigForm::storeWidget(AbstractProtocol *ip6Proto) { bool isOk; ip6Proto->setFieldData( Ip6Protocol::ip6_isOverrideVersion, isVersionOverride->isChecked()); ip6Proto->setFieldData( Ip6Protocol::ip6_version, version->text()); ip6Proto->setFieldData( Ip6Protocol::ip6_trafficClass, tosDscp->value()); ip6Proto->setFieldData( Ip6Protocol::ip6_flowLabel, flowLabel->text().remove(QChar(' ')).toUInt(&isOk, BASE_HEX)); ip6Proto->setFieldData( Ip6Protocol::ip6_isOverridePayloadLength, isPayloadLengthOverride->isChecked()); ip6Proto->setFieldData( Ip6Protocol::ip6_payloadLength, payloadLength->text()); ip6Proto->setFieldData( Ip6Protocol::ip6_isOverrideNextHeader, isNextHeaderOverride->isChecked()); ip6Proto->setFieldData( Ip6Protocol::ip6_nextHeader, nextHeader->text().remove(QChar(' ')).toUInt(&isOk, BASE_HEX)); ip6Proto->setFieldData( Ip6Protocol::ip6_hopLimit, hopLimit->text()); ip6Proto->setFieldData( Ip6Protocol::ip6_srcAddress, srcAddr->text()); ip6Proto->setFieldData( Ip6Protocol::ip6_srcAddrMode, srcAddrModeCombo->currentIndex()); ip6Proto->setFieldData( Ip6Protocol::ip6_srcAddrCount, srcAddrCount->text()); ip6Proto->setFieldData( Ip6Protocol::ip6_srcAddrPrefix, srcAddrPrefix->text().remove('/')); ip6Proto->setFieldData( Ip6Protocol::ip6_dstAddress, dstAddr->text()); ip6Proto->setFieldData( Ip6Protocol::ip6_dstAddrMode, dstAddrModeCombo->currentIndex()); ip6Proto->setFieldData( Ip6Protocol::ip6_dstAddrCount, dstAddrCount->text()); ip6Proto->setFieldData( Ip6Protocol::ip6_dstAddrPrefix, dstAddrPrefix->text().remove('/')); }