diff --git a/client/streamconfigdialog.cpp b/client/streamconfigdialog.cpp
index a9b94ea..8752f21 100644
--- a/client/streamconfigdialog.cpp
+++ b/client/streamconfigdialog.cpp
@@ -86,7 +86,6 @@ StreamConfigDialog::StreamConfigDialog(Port &port, uint streamIndex,
connect(rbL4Other, SIGNAL(toggled(bool)), rbPayloadOther, SLOT(setChecked(bool)));
connect(rbL4Other, SIGNAL(toggled(bool)), gbPayloadProto, SLOT(setDisabled(bool)));
-#if 0 // temp mask
// Setup valid subsequent protocols for L2 to L4 protocols
for (int i = ProtoL2; i <= ProtoL4; i++)
{
@@ -133,7 +132,6 @@ StreamConfigDialog::StreamConfigDialog(Port &port, uint streamIndex,
}
}
}
-#endif
mpAvailableProtocolsModel = new QStringListModel(
OstProtocolManager->protocolDatabase(), this);
diff --git a/common/ostproto.pro b/common/ostproto.pro
index d72b21b..05024e4 100644
--- a/common/ostproto.pro
+++ b/common/ostproto.pro
@@ -46,7 +46,6 @@ HEADERS = \
HEADERS += \
mac.h \
- payload.h \
vlan.h \
svlan.h \
vlanstack.h \
@@ -71,11 +70,10 @@ HEADERS += \
udp.h \
textproto.h \
hexdump.h \
+ payload.h \
+ sample.h \
userscript.h
-HEADERS1 += \
- sample.h
-
SOURCES = \
abstractprotocol.cpp \
crc32c.cpp \
@@ -86,7 +84,6 @@ SOURCES = \
SOURCES += \
mac.cpp \
- payload.cpp \
vlan.cpp \
svlan.cpp \
eth2.cpp \
@@ -104,11 +101,10 @@ SOURCES += \
udp.cpp \
textproto.cpp \
hexdump.cpp \
+ payload.cpp \
+ sample.cpp \
userscript.cpp
-SOURCES1 += \
- sample.cpp
-
QMAKE_DISTCLEAN += object_script.*
include(../protobuf.pri)
diff --git a/common/ostprotogui.pro b/common/ostprotogui.pro
index 8be6d19..9fedf5d 100644
--- a/common/ostprotogui.pro
+++ b/common/ostprotogui.pro
@@ -10,7 +10,6 @@ FORMS = \
FORMS += \
mac.ui \
- payload.ui \
vlan.ui \
eth2.ui \
dot3.ui \
@@ -25,15 +24,14 @@ FORMS += \
udp.ui \
textproto.ui \
hexdump.ui \
+ payload.ui \
+ sample.ui \
userscript.ui
-FORMS1 += \
- sample.ui
-
PROTOS = \
fileformat.proto
-# TODO: Move fileformat related stuff into a different library
+# TODO: Move fileformat related stuff into a different library - why?
HEADERS = \
ostprotolib.h \
abstractfileformat.h \
@@ -51,7 +49,6 @@ HEADERS += \
comboprotocolconfig.h \
protocolwidgetfactory.h \
macconfig.h \
- payloadconfig.h \
vlanconfig.h \
svlanconfig.h \
vlanstackconfig.h \
@@ -73,6 +70,8 @@ HEADERS += \
udpconfig.h \
textprotoconfig.h \
hexdumpconfig.h \
+ payloadconfig.h \
+ sampleconfig.h \
userscriptconfig.h
SOURCES += \
@@ -88,7 +87,6 @@ SOURCES += \
SOURCES += \
protocolwidgetfactory.cpp \
macconfig.cpp \
- payloadconfig.cpp \
vlanconfig.cpp \
eth2config.cpp \
dot3config.cpp \
@@ -105,6 +103,8 @@ SOURCES += \
udpconfig.cpp \
textprotoconfig.cpp \
hexdumpconfig.cpp \
+ payloadconfig.cpp \
+ sampleconfig.cpp \
userscriptconfig.cpp
QMAKE_DISTCLEAN += object_script.*
diff --git a/common/protocolmanager.cpp b/common/protocolmanager.cpp
index c35dc1c..84e1e2d 100644
--- a/common/protocolmanager.cpp
+++ b/common/protocolmanager.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2010 Srivats P.
+Copyright (C) 2010, 2014 Srivats P.
This file is part of "Ostinato"
@@ -21,20 +21,20 @@ along with this program. If not, see
#include "abstractprotocol.h"
#include "protocol.pb.h"
-#if 0
-#include "sample.h"
-#else
+
#include "mac.h"
-#include "payload.h"
#include "vlan.h"
#include "svlan.h"
-#include "vlanstack.h"
+#include "vlanstack.h"
+
+// L2 Protos
#include "dot3.h"
#include "llc.h"
#include "dot2llc.h"
#include "snap.h"
#include "dot2snap.h"
#include "eth2.h"
+
// L3 Protos
#include "arp.h"
#include "ip4.h"
@@ -43,18 +43,22 @@ along with this program. If not, see
#include "ip4over6.h"
#include "ip6over4.h"
#include "ip6over6.h"
+
// L4 Protos
#include "icmp.h"
#include "igmp.h"
#include "mld.h"
#include "tcp.h"
#include "udp.h"
+
// L5 Protos
#include "textproto.h"
+
// Special Protos
#include "hexdump.h"
+#include "payload.h"
+#include "sample.h"
#include "userscript.h"
-#endif
ProtocolManager *OstProtocolManager;
@@ -63,14 +67,8 @@ ProtocolManager::ProtocolManager()
/*! \todo (LOW) calls to registerProtocol() should be done by the protocols
themselves (once this is done remove the #includes for all the protocols)
*/
-#if 0
- registerProtocol(OstProto::Protocol::kSampleFieldNumber,
- (void*) SampleProtocol::createInstance);
-#else
registerProtocol(OstProto::Protocol::kMacFieldNumber,
(void*) MacProtocol::createInstance);
- registerProtocol(OstProto::Protocol::kPayloadFieldNumber,
- (void*) PayloadProtocol::createInstance);
registerProtocol(OstProto::Protocol::kVlanFieldNumber,
(void*) VlanProtocol::createInstance);
@@ -128,10 +126,13 @@ ProtocolManager::ProtocolManager()
// Special Protocols
registerProtocol(OstProto::Protocol::kHexDumpFieldNumber,
(void*) HexDumpProtocol::createInstance);
+ registerProtocol(OstProto::Protocol::kPayloadFieldNumber,
+ (void*) PayloadProtocol::createInstance);
+ registerProtocol(OstProto::Protocol::kSampleFieldNumber,
+ (void*) SampleProtocol::createInstance);
registerProtocol(OstProto::Protocol::kUserScriptFieldNumber,
(void*) UserScriptProtocol::createInstance);
-#endif
populateNeighbourProtocols();
}
diff --git a/common/protocolwidgetfactory.cpp b/common/protocolwidgetfactory.cpp
index 78f47d1..8c8e30a 100644
--- a/common/protocolwidgetfactory.cpp
+++ b/common/protocolwidgetfactory.cpp
@@ -20,10 +20,10 @@ along with this program. If not, see
#include "protocolwidgetfactory.h"
#include "macconfig.h"
-#include "payloadconfig.h"
#include "vlanconfig.h"
#include "svlanconfig.h"
#include "vlanstackconfig.h"
+// L2 Protocol Widgets
#include "eth2config.h"
#include "dot3config.h"
#include "llcconfig.h"
@@ -48,6 +48,8 @@ along with this program. If not, see
#include "textprotoconfig.h"
// Special Protocol Widgets
#include "hexdumpconfig.h"
+#include "payloadconfig.h"
+#include "sampleconfig.h"
#include "userscriptconfig.h"
ProtocolWidgetFactory *OstProtocolWidgetFactory;
@@ -62,9 +64,6 @@ ProtocolWidgetFactory::ProtocolWidgetFactory()
OstProtocolWidgetFactory->registerProtocolConfigWidget(
OstProto::Protocol::kMacFieldNumber,
(void*) MacConfigForm::createInstance);
- OstProtocolWidgetFactory->registerProtocolConfigWidget(
- OstProto::Protocol::kPayloadFieldNumber,
- (void*) PayloadConfigForm::createInstance);
OstProtocolWidgetFactory->registerProtocolConfigWidget(
OstProto::Protocol::kVlanFieldNumber,
@@ -145,6 +144,12 @@ ProtocolWidgetFactory::ProtocolWidgetFactory()
OstProtocolWidgetFactory->registerProtocolConfigWidget(
OstProto::Protocol::kHexDumpFieldNumber,
(void*) HexDumpConfigForm::createInstance);
+ OstProtocolWidgetFactory->registerProtocolConfigWidget(
+ OstProto::Protocol::kPayloadFieldNumber,
+ (void*) PayloadConfigForm::createInstance);
+ OstProtocolWidgetFactory->registerProtocolConfigWidget(
+ OstProto::Protocol::kSampleFieldNumber,
+ (void*) SampleConfigForm::createInstance);
OstProtocolWidgetFactory->registerProtocolConfigWidget(
OstProto::Protocol::kUserScriptFieldNumber,
(void*) UserScriptConfigForm::createInstance);
diff --git a/common/sample.cpp b/common/sample.cpp
index 42f9f32..0432cf2 100644
--- a/common/sample.cpp
+++ b/common/sample.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2010 Srivats P.
+Copyright (C) 2010, 2014 Srivats P.
This file is part of "Ostinato"
@@ -17,26 +17,15 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see
*/
-#include
-
#include "sample.h"
-SampleConfigForm::SampleConfigForm(QWidget *parent)
- : QWidget(parent)
-{
- setupUi(this);
-}
-
SampleProtocol::SampleProtocol(StreamBase *stream, AbstractProtocol *parent)
: AbstractProtocol(stream, parent)
{
- /* The configWidget is created lazily */
- configForm = NULL;
}
SampleProtocol::~SampleProtocol()
{
- delete configForm;
}
AbstractProtocol* SampleProtocol::createInstance(StreamBase *stream,
@@ -97,7 +86,9 @@ quint32 SampleProtocol::protocolId(ProtocolIdType type) const
{
switch(type)
{
- case ProtocolIdIp: return 1234;
+ case ProtocolIdLlc: return 0xFFFFFF;
+ case ProtocolIdEth: return 0xFFFF;
+ case ProtocolIdIp: return 0xFF;
default:break;
}
@@ -120,7 +111,7 @@ int SampleProtocol::fieldCount() const
*/
int SampleProtocol::frameFieldCount() const
{
- return 0;
+ return AbstractProtocol::frameFieldCount();
}
/*!
@@ -384,14 +375,14 @@ bool SampleProtocol::setFieldData(int index, const QVariant &value,
{
uint a = value.toUInt(&isOk);
if (isOk)
- data.set_ab((data.ab() & 0xe000) | (a << 13));
+ data.set_ab((data.ab() & 0x1FFF) | ((a & 0x07) << 13));
break;
}
case sample_b:
{
uint b = value.toUInt(&isOk);
if (isOk)
- data.set_ab((data.ab() & 0x1FFF) | b);
+ data.set_ab((data.ab() & 0xe000) | (b & 0x1FFF));
break;
}
case sample_payloadLength:
@@ -484,63 +475,3 @@ int SampleProtocol::protocolFrameVariableCount() const
{
return 1;
}
-
-QWidget* SampleProtocol::configWidget()
-{
- /* Lazy creation of the configWidget */
- if (configForm == NULL)
- {
- configForm = new SampleConfigForm;
- loadConfigWidget();
- }
-
- return configForm;
-}
-
-/*!
-TODO: Edit this function to load each field's data into the config Widget
-
-See AbstractProtocol::loadConfigWidget() for more info
-*/
-void SampleProtocol::loadConfigWidget()
-{
- configWidget();
-
- configForm->sampleA->setText(fieldData(sample_a, FieldValue).toString());
- configForm->sampleB->setText(fieldData(sample_b, FieldValue).toString());
-
- configForm->samplePayloadLength->setText(
- fieldData(sample_payloadLength, FieldValue).toString());
-
- configForm->isChecksumOverride->setChecked(
- fieldData(sample_is_override_checksum, FieldValue).toBool());
- configForm->sampleChecksum->setText(uintToHexStr(
- fieldData(sample_checksum, FieldValue).toUInt(), 2));
-
- configForm->sampleX->setText(fieldData(sample_x, FieldValue).toString());
- configForm->sampleY->setText(fieldData(sample_y, FieldValue).toString());
-
-}
-
-/*!
-TODO: Edit this function to store each field's data from the config Widget
-
-See AbstractProtocol::storeConfigWidget() for more info
-*/
-void SampleProtocol::storeConfigWidget()
-{
- bool isOk;
-
- configWidget();
- setFieldData(sample_a, configForm->sampleA->text());
- setFieldData(sample_b, configForm->sampleB->text());
-
- setFieldData(sample_payloadLength, configForm->samplePayloadLength->text());
- setFieldData(sample_is_override_checksum,
- configForm->isChecksumOverride->isChecked());
- setFieldData(sample_checksum, configForm->sampleChecksum->text().toUInt(&isOk, BASE_HEX));
-
- setFieldData(sample_x, configForm->sampleX->text());
- setFieldData(sample_y, configForm->sampleY->text());
-}
-
diff --git a/common/sample.h b/common/sample.h
index 90b9be8..475e72f 100644
--- a/common/sample.h
+++ b/common/sample.h
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2010 Srivats P.
+Copyright (C) 2010, 2014 Srivats P.
This file is part of "Ostinato"
@@ -20,10 +20,8 @@ along with this program. If not, see
#ifndef _SAMPLE_H
#define _SAMPLE_H
-#include "sample.pb.h"
-#include "ui_sample.h"
-
#include "abstractprotocol.h"
+#include "sample.pb.h"
/*
Sample Protocol Frame Format -
@@ -34,19 +32,9 @@ Sample Protocol Frame Format -
Figures in brackets represent field width in bits
*/
-class SampleConfigForm : public QWidget, public Ui::Sample
-{
- Q_OBJECT
-public:
- SampleConfigForm(QWidget *parent = 0);
-private slots:
-};
-
class SampleProtocol : public AbstractProtocol
{
-private:
- OstProto::Sample data;
- SampleConfigForm *configForm;
+public:
enum samplefield
{
// Frame Fields
@@ -63,7 +51,6 @@ private:
sample_fieldCount
};
-public:
SampleProtocol(StreamBase *stream, AbstractProtocol *parent = 0);
virtual ~SampleProtocol();
@@ -95,9 +82,8 @@ public:
virtual bool isProtocolFrameSizeVariable() const;
virtual int protocolFrameVariableCount() const;
- virtual QWidget* configWidget();
- virtual void loadConfigWidget();
- virtual void storeConfigWidget();
+private:
+ OstProto::Sample data;
};
#endif
diff --git a/common/sampleconfig.cpp b/common/sampleconfig.cpp
new file mode 100644
index 0000000..caaf0d2
--- /dev/null
+++ b/common/sampleconfig.cpp
@@ -0,0 +1,117 @@
+/*
+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 "sampleconfig.h"
+#include "sample.h"
+
+SampleConfigForm::SampleConfigForm(QWidget *parent)
+ : AbstractProtocolConfigForm(parent)
+{
+ setupUi(this);
+}
+
+SampleConfigForm::~SampleConfigForm()
+{
+}
+
+SampleConfigForm* SampleConfigForm::createInstance()
+{
+ return new SampleConfigForm;
+}
+
+/*!
+TODO: Edit this function to load each field's data into the config Widget
+
+See AbstractProtocolConfigForm::loadWidget() for more info
+*/
+void SampleConfigForm::loadWidget(AbstractProtocol *proto)
+{
+ sampleA->setText(
+ proto->fieldData(
+ SampleProtocol::sample_a,
+ AbstractProtocol::FieldValue
+ ).toString());
+ sampleB->setText(
+ proto->fieldData(
+ SampleProtocol::sample_b,
+ AbstractProtocol::FieldValue
+ ).toString());
+
+ samplePayloadLength->setText(
+ proto->fieldData(
+ SampleProtocol::sample_payloadLength,
+ AbstractProtocol::FieldValue
+ ).toString());
+
+ isChecksumOverride->setChecked(
+ proto->fieldData(
+ SampleProtocol::sample_is_override_checksum,
+ AbstractProtocol::FieldValue
+ ).toBool());
+ sampleChecksum->setText(uintToHexStr(
+ proto->fieldData(
+ SampleProtocol::sample_checksum,
+ AbstractProtocol::FieldValue
+ ).toUInt(), 2));
+
+ sampleX->setText(
+ proto->fieldData(
+ SampleProtocol::sample_x,
+ AbstractProtocol::FieldValue
+ ).toString());
+ sampleY->setText(
+ proto->fieldData(
+ SampleProtocol::sample_y,
+ AbstractProtocol::FieldValue
+ ).toString());
+}
+
+/*!
+TODO: Edit this function to store each field's data from the config Widget
+
+See AbstractProtocolConfigForm::storeWidget() for more info
+*/
+void SampleConfigForm::storeWidget(AbstractProtocol *proto)
+{
+ proto->setFieldData(
+ SampleProtocol::sample_a,
+ sampleA->text());
+ proto->setFieldData(
+ SampleProtocol::sample_b,
+ sampleB->text());
+
+ proto->setFieldData(
+ SampleProtocol::sample_payloadLength,
+ samplePayloadLength->text());
+ proto->setFieldData(
+ SampleProtocol::sample_is_override_checksum,
+
+ isChecksumOverride->isChecked());
+ proto->setFieldData(
+ SampleProtocol::sample_checksum,
+ hexStrToUInt(sampleChecksum->text()));
+
+ proto->setFieldData(
+ SampleProtocol::sample_x,
+ sampleX->text());
+ proto->setFieldData(
+ SampleProtocol::sample_y,
+ sampleY->text());
+}
+
diff --git a/common/sampleconfig.h b/common/sampleconfig.h
new file mode 100644
index 0000000..8e85976
--- /dev/null
+++ b/common/sampleconfig.h
@@ -0,0 +1,43 @@
+/*
+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
+*/
+
+#ifndef _SAMPLE_CONFIG_H
+#define _SAMPLE_CONFIG_H
+
+#include "abstractprotocolconfig.h"
+#include "ui_sample.h"
+
+class SampleConfigForm :
+ public AbstractProtocolConfigForm,
+ private Ui::Sample
+{
+ Q_OBJECT
+public:
+ SampleConfigForm(QWidget *parent = 0);
+ virtual ~SampleConfigForm();
+
+ static SampleConfigForm* createInstance();
+
+ virtual void loadWidget(AbstractProtocol *proto);
+ virtual void storeWidget(AbstractProtocol *proto);
+
+private slots:
+};
+
+#endif