StreamConfigDialog "Protocol Selection" framework has been enhanced to include a L5 group. TextProtocol has been added to this L5 group. TCP/UDP protocols have been modified to get port numbers from a L5 protocol; TCP/UDP protocols have also been updated as per the "Sample" protocol recommendation
This commit is contained in:
parent
3defe905e5
commit
6ca88eb661
@ -66,6 +66,7 @@ StreamConfigDialog::StreamConfigDialog(Port &port, uint streamIndex,
|
||||
connect(rbL1None, SIGNAL(toggled(bool)), SLOT(forceProtocolNone(bool)));
|
||||
connect(rbFtNone, SIGNAL(toggled(bool)), SLOT(forceProtocolNone(bool)));
|
||||
connect(rbL3None, SIGNAL(toggled(bool)), SLOT(forceProtocolNone(bool)));
|
||||
connect(rbL4None, SIGNAL(toggled(bool)), SLOT(forceProtocolNone(bool)));
|
||||
|
||||
// If L1/L2(FT)/L3/L4 = Other, force subsequent protocol to Other and
|
||||
// disable the subsequent protocol group as well
|
||||
@ -78,8 +79,8 @@ StreamConfigDialog::StreamConfigDialog(Port &port, uint streamIndex,
|
||||
connect(rbL4Other, SIGNAL(toggled(bool)), rbPayloadOther, SLOT(setChecked(bool)));
|
||||
connect(rbL4Other, SIGNAL(toggled(bool)), gbPayloadProto, SLOT(setDisabled(bool)));
|
||||
|
||||
// Setup valid subsequent protocols for L2 and L3 protocols
|
||||
for (int i = ProtoL2; i <= ProtoL3; i++)
|
||||
// Setup valid subsequent protocols for L2 to L4 protocols
|
||||
for (int i = ProtoL2; i <= ProtoL4; i++)
|
||||
{
|
||||
foreach(QAbstractButton *btn1, bgProto[i]->buttons())
|
||||
{
|
||||
@ -207,7 +208,7 @@ void StreamConfigDialog::setupUiExtra()
|
||||
foreach(QRadioButton *btn, gbL4Proto->findChildren<QRadioButton*>())
|
||||
bgProto[ProtoL4]->addButton(btn);
|
||||
#else
|
||||
bgProto[ProtoL4]->addButton(rbL4None, 0);
|
||||
bgProto[ProtoL4]->addButton(rbL4None, ButtonIdNone);
|
||||
bgProto[ProtoL4]->addButton(rbL4Tcp, OstProto::Protocol::kTcpFieldNumber);
|
||||
bgProto[ProtoL4]->addButton(rbL4Udp, OstProto::Protocol::kUdpFieldNumber);
|
||||
bgProto[ProtoL4]->addButton(rbL4Icmp, OstProto::Protocol::kIcmpFieldNumber);
|
||||
@ -215,6 +216,17 @@ void StreamConfigDialog::setupUiExtra()
|
||||
bgProto[ProtoL4]->addButton(rbL4Other, ButtonIdOther);
|
||||
#endif
|
||||
|
||||
bgProto[ProtoL5] = new QButtonGroup();
|
||||
#if 0
|
||||
foreach(QRadioButton *btn, gbL5Proto->findChildren<QRadioButton*>())
|
||||
bgProto[ProtoL5]->addButton(btn);
|
||||
#else
|
||||
bgProto[ProtoL5]->addButton(rbL5None, ButtonIdNone);
|
||||
bgProto[ProtoL5]->addButton(rbL5Text,
|
||||
OstProto::Protocol::kTextProtocolFieldNumber);
|
||||
bgProto[ProtoL5]->addButton(rbL5Other, ButtonIdOther);
|
||||
#endif
|
||||
|
||||
bgProto[ProtoPayload] = new QButtonGroup();
|
||||
#if 0
|
||||
foreach(QRadioButton *btn, gbPayloadProto->findChildren<QRadioButton*>())
|
||||
@ -639,13 +651,19 @@ void StreamConfigDialog::forceProtocolNone(bool checked)
|
||||
bgProto[ProtoL3]->button(ButtonIdNone)->click();
|
||||
disableProtocols(bgProto[ProtoL3], checked);
|
||||
}
|
||||
else if (btn == rbL3None)
|
||||
else if (btn == rbL3None)
|
||||
{
|
||||
if (checked)
|
||||
bgProto[ProtoL4]->button(ButtonIdNone)->click();
|
||||
disableProtocols(bgProto[ProtoL4], checked);
|
||||
}
|
||||
else
|
||||
else if (btn == rbL4None)
|
||||
{
|
||||
if (checked)
|
||||
bgProto[ProtoL5]->button(ButtonIdNone)->click();
|
||||
disableProtocols(bgProto[ProtoL5], checked);
|
||||
}
|
||||
else
|
||||
{
|
||||
Q_ASSERT(1 == 0); // Unreachable code!
|
||||
}
|
||||
@ -929,6 +947,15 @@ void StreamConfigDialog::StoreCurrentStream()
|
||||
}
|
||||
}
|
||||
|
||||
void StreamConfigDialog::on_tbProtocolData_currentChanged(int /*index*/)
|
||||
{
|
||||
// Refresh protocol widgets in case there is any dependent data between
|
||||
// protocols e.g. TCP/UDP port numbers are dependent on Port/Protocol
|
||||
// selection in TextProtocol
|
||||
mpStream->storeProtocolWidgets();
|
||||
mpStream->loadProtocolWidgets();
|
||||
}
|
||||
|
||||
void StreamConfigDialog::on_pbOk_clicked()
|
||||
{
|
||||
QString log;
|
||||
|
@ -61,7 +61,8 @@ private:
|
||||
ProtoL2 = 2,
|
||||
ProtoL3 = 3,
|
||||
ProtoL4 = 4,
|
||||
ProtoPayload = 5,
|
||||
ProtoL5 = 5,
|
||||
ProtoPayload = 6,
|
||||
ProtoMax
|
||||
};
|
||||
|
||||
@ -87,7 +88,6 @@ private:
|
||||
static int lastTopLevelTabIndex;
|
||||
|
||||
void setupUiExtra();
|
||||
void updateSelectedProtocols();
|
||||
void LoadCurrentStream();
|
||||
void StoreCurrentStream();
|
||||
|
||||
@ -122,6 +122,9 @@ private slots:
|
||||
|
||||
void updateSelectProtocolsAdvancedWidget();
|
||||
|
||||
// "Protocol Data" related
|
||||
void on_tbProtocolData_currentChanged(int index);
|
||||
|
||||
void on_pbPrev_clicked();
|
||||
void on_pbNext_clicked();
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>569</width>
|
||||
<height>464</height>
|
||||
<height>481</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy" >
|
||||
@ -174,14 +174,14 @@ QLineEdit:enabled[inputMask = "HH HH HH HH HH HH; "] { background-color: #ccccff
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>527</width>
|
||||
<height>226</height>
|
||||
<height>243</height>
|
||||
</rect>
|
||||
</property>
|
||||
<attribute name="label" >
|
||||
<string>Simple</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" >
|
||||
<item row="0" column="0" >
|
||||
<item rowspan="2" row="0" column="0" >
|
||||
<widget class="QGroupBox" name="gbL1Proto" >
|
||||
<property name="title" >
|
||||
<string>L1</string>
|
||||
@ -220,7 +220,7 @@ QLineEdit:enabled[inputMask = "HH HH HH HH HH HH; "] { background-color: #ccccff
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item rowspan="3" row="0" column="1" >
|
||||
<item rowspan="4" row="0" column="1" >
|
||||
<widget class="QGroupBox" name="gbFrameType" >
|
||||
<property name="enabled" >
|
||||
<bool>true</bool>
|
||||
@ -351,7 +351,7 @@ QLineEdit:enabled[inputMask = "HH HH HH HH HH HH; "] { background-color: #ccccff
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3" >
|
||||
<item rowspan="2" row="0" column="3" >
|
||||
<widget class="QGroupBox" name="gbPayloadProto" >
|
||||
<property name="enabled" >
|
||||
<bool>true</bool>
|
||||
@ -393,49 +393,7 @@ QLineEdit:enabled[inputMask = "HH HH HH HH HH HH; "] { background-color: #ccccff
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item rowspan="2" row="1" column="0" >
|
||||
<widget class="QGroupBox" name="gbVlan" >
|
||||
<property name="enabled" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="title" >
|
||||
<string>VLAN</string>
|
||||
</property>
|
||||
<property name="checkable" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="checked" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" >
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbVlanNone" >
|
||||
<property name="text" >
|
||||
<string>Untagged</string>
|
||||
</property>
|
||||
<property name="checked" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbVlanSingle" >
|
||||
<property name="text" >
|
||||
<string>Tagged</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbVlanDouble" >
|
||||
<property name="text" >
|
||||
<string>Stacked</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2" >
|
||||
<item rowspan="2" row="1" column="2" >
|
||||
<widget class="QGroupBox" name="gbL4Proto" >
|
||||
<property name="enabled" >
|
||||
<bool>true</bool>
|
||||
@ -507,7 +465,49 @@ QLineEdit:enabled[inputMask = "HH HH HH HH HH HH; "] { background-color: #ccccff
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2" >
|
||||
<item rowspan="2" row="2" column="0" >
|
||||
<widget class="QGroupBox" name="gbVlan" >
|
||||
<property name="enabled" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="title" >
|
||||
<string>VLAN</string>
|
||||
</property>
|
||||
<property name="checkable" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="checked" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" >
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbVlanNone" >
|
||||
<property name="text" >
|
||||
<string>Untagged</string>
|
||||
</property>
|
||||
<property name="checked" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbVlanSingle" >
|
||||
<property name="text" >
|
||||
<string>Tagged</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbVlanDouble" >
|
||||
<property name="text" >
|
||||
<string>Stacked</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item rowspan="2" row="2" column="3" >
|
||||
<spacer>
|
||||
<property name="orientation" >
|
||||
<enum>Qt::Vertical</enum>
|
||||
@ -515,11 +515,53 @@ QLineEdit:enabled[inputMask = "HH HH HH HH HH HH; "] { background-color: #ccccff
|
||||
<property name="sizeHint" >
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>21</height>
|
||||
<height>71</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="2" >
|
||||
<widget class="QGroupBox" name="gbL5Proto" >
|
||||
<property name="enabled" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="title" >
|
||||
<string>L5</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" >
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbL5None" >
|
||||
<property name="text" >
|
||||
<string>None</string>
|
||||
</property>
|
||||
<property name="checked" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbL5Text" >
|
||||
<property name="enabled" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Text</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rbL5Other" >
|
||||
<property name="enabled" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Other</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="page_2" >
|
||||
|
@ -82,6 +82,7 @@ public:
|
||||
ProtocolIdLlc, //!< LLC (802.2)
|
||||
ProtocolIdEth, //!< Ethernet II
|
||||
ProtocolIdIp, //!< IP
|
||||
ProtocolIdTcpUdp, //!< TCP/UDP Port Number
|
||||
};
|
||||
|
||||
//! Supported checksum types
|
||||
|
298
common/tcp.cpp
298
common/tcp.cpp
@ -73,6 +73,11 @@ QString TcpProtocol::shortName() const
|
||||
return QString("TCP");
|
||||
}
|
||||
|
||||
AbstractProtocol::ProtocolIdType TcpProtocol::protocolIdType() const
|
||||
{
|
||||
return ProtocolIdTcpUdp;
|
||||
}
|
||||
|
||||
quint32 TcpProtocol::protocolId(ProtocolIdType type) const
|
||||
{
|
||||
switch(type)
|
||||
@ -84,7 +89,7 @@ quint32 TcpProtocol::protocolId(ProtocolIdType type) const
|
||||
return AbstractProtocol::protocolId(type);
|
||||
}
|
||||
|
||||
int TcpProtocol::fieldCount() const
|
||||
int TcpProtocol::fieldCount() const
|
||||
{
|
||||
return tcp_fieldCount;
|
||||
}
|
||||
@ -114,12 +119,16 @@ AbstractProtocol::FieldFlags TcpProtocol::fieldFlags(int index) const
|
||||
case tcp_urg_ptr:
|
||||
break;
|
||||
|
||||
case tcp_is_override_src_port:
|
||||
case tcp_is_override_dst_port:
|
||||
case tcp_is_override_hdrlen:
|
||||
case tcp_is_override_cksum:
|
||||
flags |= FieldIsMeta;
|
||||
break;
|
||||
|
||||
default:
|
||||
qFatal("%s: unimplemented case %d in switch", __PRETTY_FUNCTION__,
|
||||
index);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -132,47 +141,81 @@ QVariant TcpProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
switch (index)
|
||||
{
|
||||
case tcp_src_port:
|
||||
{
|
||||
quint16 srcPort;
|
||||
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
case FieldFrameValue:
|
||||
case FieldTextValue:
|
||||
if (data.is_override_src_port())
|
||||
srcPort = data.src_port();
|
||||
else
|
||||
srcPort = payloadProtocolId(ProtocolIdTcpUdp);
|
||||
break;
|
||||
default:
|
||||
srcPort = 0; // avoid the 'maybe used unitialized' warning
|
||||
break;
|
||||
}
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldName:
|
||||
return QString("Source Port");
|
||||
case FieldValue:
|
||||
return data.src_port();
|
||||
return srcPort;
|
||||
case FieldTextValue:
|
||||
return QString("%1").arg(data.src_port());
|
||||
return QString("%1").arg(srcPort);
|
||||
case FieldFrameValue:
|
||||
{
|
||||
QByteArray fv;
|
||||
fv.resize(2);
|
||||
qToBigEndian((quint16) data.src_port(), (uchar*) fv.data());
|
||||
qToBigEndian(srcPort, (uchar*) fv.data());
|
||||
return fv;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
case tcp_dst_port:
|
||||
{
|
||||
quint16 dstPort;
|
||||
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
case FieldFrameValue:
|
||||
case FieldTextValue:
|
||||
if (data.is_override_dst_port())
|
||||
dstPort = data.dst_port();
|
||||
else
|
||||
dstPort = payloadProtocolId(ProtocolIdTcpUdp);
|
||||
break;
|
||||
default:
|
||||
dstPort = 0; // avoid the 'maybe used unitialized' warning
|
||||
break;
|
||||
}
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldName:
|
||||
return QString("Destination Port");
|
||||
case FieldValue:
|
||||
return data.dst_port();
|
||||
return dstPort;
|
||||
case FieldTextValue:
|
||||
return QString("%1").arg(data.dst_port());
|
||||
return QString("%1").arg(dstPort);
|
||||
case FieldFrameValue:
|
||||
{
|
||||
QByteArray fv;
|
||||
fv.resize(2);
|
||||
qToBigEndian((quint16) data.dst_port(), (uchar*) fv.data());
|
||||
qToBigEndian(dstPort, (uchar*) fv.data());
|
||||
return fv;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
case tcp_seq_num:
|
||||
switch(attrib)
|
||||
{
|
||||
@ -384,19 +427,174 @@ QVariant TcpProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
break;
|
||||
|
||||
// Meta fields
|
||||
case tcp_is_override_src_port:
|
||||
{
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
return data.is_override_src_port();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case tcp_is_override_dst_port:
|
||||
{
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
return data.is_override_dst_port();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case tcp_is_override_hdrlen:
|
||||
{
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
return data.is_override_hdrlen();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case tcp_is_override_cksum:
|
||||
{
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
return data.is_override_cksum();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
qFatal("%s: unimplemented case %d in switch", __PRETTY_FUNCTION__,
|
||||
index);
|
||||
break;
|
||||
}
|
||||
|
||||
return AbstractProtocol::fieldData(index, attrib, streamIndex);
|
||||
}
|
||||
|
||||
bool TcpProtocol::setFieldData(int /*index*/, const QVariant &/*value*/,
|
||||
FieldAttrib /*attrib*/)
|
||||
bool TcpProtocol::setFieldData(int index, const QVariant &value,
|
||||
FieldAttrib attrib)
|
||||
{
|
||||
return false;
|
||||
bool isOk = false;
|
||||
|
||||
if (attrib != FieldValue)
|
||||
goto _exit;
|
||||
|
||||
switch (index)
|
||||
{
|
||||
case tcp_src_port:
|
||||
{
|
||||
uint srcPort = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_src_port(srcPort);
|
||||
break;
|
||||
}
|
||||
case tcp_dst_port:
|
||||
{
|
||||
uint dstPort = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_dst_port(dstPort);
|
||||
break;
|
||||
}
|
||||
case tcp_seq_num:
|
||||
{
|
||||
uint seqNum = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_seq_num(seqNum);
|
||||
break;
|
||||
}
|
||||
case tcp_ack_num:
|
||||
{
|
||||
uint ackNum = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_ack_num(ackNum);
|
||||
break;
|
||||
}
|
||||
case tcp_hdrlen:
|
||||
{
|
||||
uint hdrLen = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_hdrlen_rsvd(
|
||||
(data.hdrlen_rsvd() & 0x0F) | (hdrLen << 4));
|
||||
break;
|
||||
}
|
||||
case tcp_rsvd:
|
||||
{
|
||||
uint rsvd = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_hdrlen_rsvd(
|
||||
(data.hdrlen_rsvd() & 0xF0) | (rsvd & 0x0F));
|
||||
break;
|
||||
}
|
||||
case tcp_flags:
|
||||
{
|
||||
uint flags = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_flags(flags);
|
||||
break;
|
||||
}
|
||||
case tcp_window:
|
||||
{
|
||||
uint window = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_window(window);
|
||||
break;
|
||||
}
|
||||
case tcp_cksum:
|
||||
{
|
||||
uint cksum = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_cksum(cksum);
|
||||
break;
|
||||
}
|
||||
case tcp_urg_ptr:
|
||||
{
|
||||
uint urgPtr = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_urg_ptr(urgPtr);
|
||||
break;
|
||||
}
|
||||
case tcp_is_override_src_port:
|
||||
{
|
||||
data.set_is_override_src_port(value.toBool());
|
||||
isOk = true;
|
||||
break;
|
||||
}
|
||||
case tcp_is_override_dst_port:
|
||||
{
|
||||
data.set_is_override_dst_port(value.toBool());
|
||||
isOk = true;
|
||||
break;
|
||||
}
|
||||
case tcp_is_override_hdrlen:
|
||||
{
|
||||
data.set_is_override_hdrlen(value.toBool());
|
||||
isOk = true;
|
||||
break;
|
||||
}
|
||||
case tcp_is_override_cksum:
|
||||
{
|
||||
data.set_is_override_cksum(value.toBool());
|
||||
isOk = true;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
qFatal("%s: unimplemented case %d in switch", __PRETTY_FUNCTION__,
|
||||
index);
|
||||
break;
|
||||
}
|
||||
|
||||
_exit:
|
||||
return isOk;
|
||||
}
|
||||
|
||||
bool TcpProtocol::isProtocolFrameValueVariable() const
|
||||
@ -421,53 +619,73 @@ void TcpProtocol::loadConfigWidget()
|
||||
{
|
||||
configWidget();
|
||||
|
||||
configForm->leTcpSrcPort->setText(QString().setNum(data.src_port()));
|
||||
configForm->leTcpDstPort->setText(QString().setNum(data.dst_port()));
|
||||
configForm->leTcpSrcPort->setText(
|
||||
fieldData(tcp_src_port, FieldValue).toString());
|
||||
configForm->cbTcpSrcPortOverride->setChecked(
|
||||
fieldData(tcp_is_override_src_port, FieldValue).toBool());
|
||||
|
||||
configForm->leTcpSeqNum->setText(QString().setNum(data.seq_num()));
|
||||
configForm->leTcpAckNum->setText(QString().setNum(data.ack_num()));
|
||||
configForm->leTcpDstPort->setText(
|
||||
fieldData(tcp_dst_port, FieldValue).toString());
|
||||
configForm->cbTcpDstPortOverride->setChecked(
|
||||
fieldData(tcp_is_override_dst_port, FieldValue).toBool());
|
||||
|
||||
configForm->leTcpHdrLen->setText(fieldData(tcp_hdrlen, FieldValue).toString());
|
||||
configForm->cbTcpHdrLenOverride->setChecked(data.is_override_hdrlen());
|
||||
configForm->leTcpSeqNum->setText(
|
||||
fieldData(tcp_seq_num, FieldValue).toString());
|
||||
configForm->leTcpAckNum->setText(
|
||||
fieldData(tcp_ack_num, FieldValue).toString());
|
||||
|
||||
configForm->leTcpWindow->setText(QString().setNum(data.window()));
|
||||
configForm->leTcpHdrLen->setText(
|
||||
fieldData(tcp_hdrlen, FieldValue).toString());
|
||||
configForm->cbTcpHdrLenOverride->setChecked(
|
||||
fieldData(tcp_is_override_hdrlen, FieldValue).toBool());
|
||||
|
||||
configForm->leTcpWindow->setText(
|
||||
fieldData(tcp_window, FieldValue).toString());
|
||||
|
||||
configForm->leTcpCksum->setText(QString("%1").arg(
|
||||
fieldData(tcp_cksum, FieldValue).toUInt(), 4, BASE_HEX, QChar('0')));
|
||||
configForm->cbTcpCksumOverride->setChecked(data.is_override_cksum());
|
||||
configForm->cbTcpCksumOverride->setChecked(
|
||||
fieldData(tcp_is_override_cksum, FieldValue).toBool());
|
||||
|
||||
configForm->leTcpUrgentPointer->setText(QString().setNum(data.urg_ptr()));
|
||||
|
||||
configForm->cbTcpFlagsUrg->setChecked((data.flags() & TCP_FLAG_URG) > 0);
|
||||
configForm->cbTcpFlagsAck->setChecked((data.flags() & TCP_FLAG_ACK) > 0);
|
||||
configForm->cbTcpFlagsPsh->setChecked((data.flags() & TCP_FLAG_PSH) > 0);
|
||||
configForm->cbTcpFlagsRst->setChecked((data.flags() & TCP_FLAG_RST) > 0);
|
||||
configForm->cbTcpFlagsSyn->setChecked((data.flags() & TCP_FLAG_SYN) > 0);
|
||||
configForm->cbTcpFlagsFin->setChecked((data.flags() & TCP_FLAG_FIN) > 0);
|
||||
configForm->leTcpUrgentPointer->setText(
|
||||
fieldData(tcp_urg_ptr, FieldValue).toString());
|
||||
|
||||
uint flags = fieldData(tcp_flags, FieldValue).toUInt();
|
||||
configForm->cbTcpFlagsUrg->setChecked((flags & TCP_FLAG_URG) > 0);
|
||||
configForm->cbTcpFlagsAck->setChecked((flags & TCP_FLAG_ACK) > 0);
|
||||
configForm->cbTcpFlagsPsh->setChecked((flags & TCP_FLAG_PSH) > 0);
|
||||
configForm->cbTcpFlagsRst->setChecked((flags & TCP_FLAG_RST) > 0);
|
||||
configForm->cbTcpFlagsSyn->setChecked((flags & TCP_FLAG_SYN) > 0);
|
||||
configForm->cbTcpFlagsFin->setChecked((flags & TCP_FLAG_FIN) > 0);
|
||||
}
|
||||
|
||||
void TcpProtocol::storeConfigWidget()
|
||||
{
|
||||
bool isOk;
|
||||
int ff = 0;
|
||||
|
||||
configWidget();
|
||||
|
||||
data.set_src_port(configForm->leTcpSrcPort->text().toULong(&isOk));
|
||||
data.set_dst_port(configForm->leTcpDstPort->text().toULong(&isOk));
|
||||
setFieldData(tcp_src_port, configForm->leTcpSrcPort->text());
|
||||
setFieldData(tcp_is_override_src_port,
|
||||
configForm->cbTcpSrcPortOverride->isChecked());
|
||||
setFieldData(tcp_dst_port, configForm->leTcpDstPort->text());
|
||||
setFieldData(tcp_is_override_dst_port,
|
||||
configForm->cbTcpDstPortOverride->isChecked());
|
||||
|
||||
data.set_seq_num(configForm->leTcpSeqNum->text().toULong(&isOk));
|
||||
data.set_ack_num(configForm->leTcpAckNum->text().toULong(&isOk));
|
||||
setFieldData(tcp_seq_num, configForm->leTcpSeqNum->text());
|
||||
setFieldData(tcp_ack_num, configForm->leTcpAckNum->text());
|
||||
|
||||
data.set_hdrlen_rsvd((configForm->leTcpHdrLen->text().toULong(&isOk) << 4) & 0xF0);
|
||||
data.set_is_override_hdrlen(configForm->cbTcpHdrLenOverride->isChecked());
|
||||
setFieldData(tcp_hdrlen, configForm->leTcpHdrLen->text());
|
||||
setFieldData(tcp_is_override_hdrlen,
|
||||
configForm->cbTcpHdrLenOverride->isChecked());
|
||||
|
||||
data.set_window(configForm->leTcpWindow->text().toULong(&isOk));
|
||||
setFieldData(tcp_window, configForm->leTcpWindow->text());
|
||||
|
||||
data.set_cksum(configForm->leTcpCksum->text().remove(QChar(' ')).toULong(&isOk, BASE_HEX));
|
||||
data.set_is_override_cksum(configForm->cbTcpCksumOverride->isChecked());
|
||||
setFieldData(tcp_cksum, configForm->leTcpCksum->text());
|
||||
setFieldData(tcp_is_override_cksum,
|
||||
configForm->cbTcpCksumOverride->isChecked());
|
||||
|
||||
data.set_urg_ptr(configForm->leTcpUrgentPointer->text().toULong(&isOk));
|
||||
setFieldData(tcp_urg_ptr, configForm->leTcpUrgentPointer->text());
|
||||
|
||||
if (configForm->cbTcpFlagsUrg->isChecked()) ff |= TCP_FLAG_URG;
|
||||
if (configForm->cbTcpFlagsAck->isChecked()) ff |= TCP_FLAG_ACK;
|
||||
@ -475,6 +693,6 @@ void TcpProtocol::storeConfigWidget()
|
||||
if (configForm->cbTcpFlagsRst->isChecked()) ff |= TCP_FLAG_RST;
|
||||
if (configForm->cbTcpFlagsSyn->isChecked()) ff |= TCP_FLAG_SYN;
|
||||
if (configForm->cbTcpFlagsFin->isChecked()) ff |= TCP_FLAG_FIN;
|
||||
data.set_flags(ff);
|
||||
setFieldData(tcp_flags, ff);
|
||||
}
|
||||
|
||||
|
@ -57,6 +57,8 @@ private:
|
||||
tcp_cksum,
|
||||
tcp_urg_ptr,
|
||||
|
||||
tcp_is_override_src_port,
|
||||
tcp_is_override_dst_port,
|
||||
tcp_is_override_hdrlen,
|
||||
tcp_is_override_cksum,
|
||||
|
||||
@ -76,9 +78,11 @@ public:
|
||||
|
||||
virtual QString name() const;
|
||||
virtual QString shortName() const;
|
||||
|
||||
virtual ProtocolIdType protocolIdType() const;
|
||||
virtual quint32 protocolId(ProtocolIdType type) const;
|
||||
|
||||
virtual int fieldCount() const;
|
||||
virtual int fieldCount() const;
|
||||
|
||||
virtual AbstractProtocol::FieldFlags fieldFlags(int index) const;
|
||||
virtual QVariant fieldData(int index, FieldAttrib attrib,
|
||||
|
@ -22,22 +22,23 @@ import "protocol.proto";
|
||||
package OstProto;
|
||||
// Tcp
|
||||
message Tcp {
|
||||
optional bool is_override_src_port = 1;
|
||||
optional bool is_override_dst_port = 2;
|
||||
optional bool is_override_hdrlen = 3;
|
||||
optional bool is_override_cksum = 4;
|
||||
|
||||
optional bool is_override_hdrlen = 1;
|
||||
optional bool is_override_cksum = 2;
|
||||
optional uint32 src_port = 5 [default = 49152];
|
||||
optional uint32 dst_port = 6 [default = 49153];
|
||||
|
||||
optional uint32 src_port = 3 [default = 8902];
|
||||
optional uint32 dst_port = 4 [default = 80];
|
||||
optional uint32 seq_num = 7 [default = 129018];
|
||||
optional uint32 ack_num = 8;
|
||||
|
||||
optional uint32 seq_num = 5 [default = 129018];
|
||||
optional uint32 ack_num = 6;
|
||||
optional uint32 hdrlen_rsvd = 9 [default = 0x50];
|
||||
optional uint32 flags = 10;
|
||||
|
||||
optional uint32 hdrlen_rsvd = 7 [default = 0x50];
|
||||
optional uint32 flags = 8;
|
||||
|
||||
optional uint32 window = 9 [default = 1024];
|
||||
optional uint32 cksum = 10;
|
||||
optional uint32 urg_ptr = 11;
|
||||
optional uint32 window = 11 [default = 1024];
|
||||
optional uint32 cksum = 12;
|
||||
optional uint32 urg_ptr = 13;
|
||||
}
|
||||
|
||||
extend Protocol {
|
||||
|
@ -14,14 +14,18 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" >
|
||||
<item row="0" column="0" >
|
||||
<widget class="QLabel" name="label_28" >
|
||||
<widget class="QCheckBox" name="cbTcpSrcPortOverride" >
|
||||
<property name="text" >
|
||||
<string>Source Port</string>
|
||||
<string>Override Source Port</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" >
|
||||
<widget class="QLineEdit" name="leTcpSrcPort" />
|
||||
<widget class="QLineEdit" name="leTcpSrcPort" >
|
||||
<property name="enabled" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item rowspan="6" row="0" column="2" >
|
||||
<widget class="Line" name="line_3" >
|
||||
@ -48,14 +52,18 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" >
|
||||
<widget class="QLabel" name="label_32" >
|
||||
<widget class="QCheckBox" name="cbTcpDstPortOverride" >
|
||||
<property name="text" >
|
||||
<string>Destination Port</string>
|
||||
<string>Override Destination Port</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" >
|
||||
<widget class="QLineEdit" name="leTcpDstPort" />
|
||||
<widget class="QLineEdit" name="leTcpDstPort" >
|
||||
<property name="enabled" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3" >
|
||||
<widget class="QLabel" name="label_37" >
|
||||
@ -224,5 +232,37 @@
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cbTcpSrcPortOverride</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>leTcpSrcPort</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel" >
|
||||
<x>159</x>
|
||||
<y>16</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel" >
|
||||
<x>178</x>
|
||||
<y>18</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cbTcpDstPortOverride</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>leTcpDstPort</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel" >
|
||||
<x>147</x>
|
||||
<y>45</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel" >
|
||||
<x>180</x>
|
||||
<y>44</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
|
@ -83,7 +83,7 @@ quint32 TextProtocol::protocolId(ProtocolIdType type) const
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
//case ProtocolIdTcpUdp: return data.port_num();
|
||||
case ProtocolIdTcpUdp: return data.port_num();
|
||||
default:break;
|
||||
}
|
||||
|
||||
@ -220,7 +220,8 @@ _exit:
|
||||
|
||||
int TextProtocol::protocolFrameSize(int streamIndex) const
|
||||
{
|
||||
return fieldData(textProto_text, FieldFrameValue).toByteArray().size() ;
|
||||
return fieldData(textProto_text, FieldFrameValue, streamIndex)
|
||||
.toByteArray().size() ;
|
||||
}
|
||||
|
||||
QWidget* TextProtocol::configWidget()
|
||||
|
@ -27,7 +27,7 @@ message TextProtocol {
|
||||
kUtf8 = 0;
|
||||
}
|
||||
|
||||
optional uint32 port_num = 1 [default = 0];
|
||||
optional uint32 port_num = 1 [default = 80];
|
||||
optional TextEncoding encoding = 2 [default = kUtf8];
|
||||
optional string text = 3;
|
||||
}
|
||||
|
217
common/udp.cpp
217
common/udp.cpp
@ -73,6 +73,11 @@ QString UdpProtocol::shortName() const
|
||||
return QString("UDP");
|
||||
}
|
||||
|
||||
AbstractProtocol::ProtocolIdType UdpProtocol::protocolIdType() const
|
||||
{
|
||||
return ProtocolIdTcpUdp;
|
||||
}
|
||||
|
||||
quint32 UdpProtocol::protocolId(ProtocolIdType type) const
|
||||
{
|
||||
switch(type)
|
||||
@ -84,7 +89,7 @@ quint32 UdpProtocol::protocolId(ProtocolIdType type) const
|
||||
return AbstractProtocol::protocolId(type);
|
||||
}
|
||||
|
||||
int UdpProtocol::fieldCount() const
|
||||
int UdpProtocol::fieldCount() const
|
||||
{
|
||||
return udp_fieldCount;
|
||||
}
|
||||
@ -106,12 +111,16 @@ AbstractProtocol::FieldFlags UdpProtocol::fieldFlags(int index) const
|
||||
flags |= FieldIsCksum;
|
||||
break;
|
||||
|
||||
case udp_isOverrideSrcPort:
|
||||
case udp_isOverrideDstPort:
|
||||
case udp_isOverrideTotLen:
|
||||
case udp_isOverrideCksum:
|
||||
flags |= FieldIsMeta;
|
||||
break;
|
||||
|
||||
default:
|
||||
qFatal("%s: unimplemented case %d in switch", __PRETTY_FUNCTION__,
|
||||
index);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -124,47 +133,81 @@ QVariant UdpProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
switch (index)
|
||||
{
|
||||
case udp_srcPort:
|
||||
{
|
||||
quint16 srcPort;
|
||||
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
case FieldFrameValue:
|
||||
case FieldTextValue:
|
||||
if (data.is_override_src_port())
|
||||
srcPort = data.src_port();
|
||||
else
|
||||
srcPort = payloadProtocolId(ProtocolIdTcpUdp);
|
||||
break;
|
||||
default:
|
||||
srcPort = 0; // avoid the 'maybe used unitialized' warning
|
||||
break;
|
||||
}
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldName:
|
||||
return QString("Source Port");
|
||||
case FieldValue:
|
||||
return data.src_port();
|
||||
return srcPort;
|
||||
case FieldTextValue:
|
||||
return QString("%1").arg(data.src_port());
|
||||
return QString("%1").arg(srcPort);
|
||||
case FieldFrameValue:
|
||||
{
|
||||
QByteArray fv;
|
||||
fv.resize(2);
|
||||
qToBigEndian((quint16) data.src_port(), (uchar*) fv.data());
|
||||
qToBigEndian(srcPort, (uchar*) fv.data());
|
||||
return fv;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
case udp_dstPort:
|
||||
{
|
||||
quint16 dstPort;
|
||||
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
case FieldFrameValue:
|
||||
case FieldTextValue:
|
||||
if (data.is_override_dst_port())
|
||||
dstPort = data.dst_port();
|
||||
else
|
||||
dstPort = payloadProtocolId(ProtocolIdTcpUdp);
|
||||
break;
|
||||
default:
|
||||
dstPort = 0; // avoid the 'maybe used unitialized' warning
|
||||
break;
|
||||
}
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldName:
|
||||
return QString("Destination Port");
|
||||
case FieldValue:
|
||||
return data.dst_port();
|
||||
return dstPort;
|
||||
case FieldTextValue:
|
||||
return QString("%1").arg(data.dst_port());
|
||||
return QString("%1").arg(dstPort);
|
||||
case FieldFrameValue:
|
||||
{
|
||||
QByteArray fv;
|
||||
fv.resize(2);
|
||||
qToBigEndian((quint16) data.dst_port(), (uchar*) fv.data());
|
||||
qToBigEndian(dstPort, (uchar*) fv.data());
|
||||
return fv;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
case udp_totLen:
|
||||
{
|
||||
|
||||
@ -253,30 +296,132 @@ QVariant UdpProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Meta fields
|
||||
case udp_isOverrideTotLen:
|
||||
case udp_isOverrideCksum:
|
||||
case udp_isOverrideSrcPort:
|
||||
{
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldIsMeta:
|
||||
return true;
|
||||
case FieldValue:
|
||||
return data.is_override_src_port();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case udp_isOverrideDstPort:
|
||||
{
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
return data.is_override_dst_port();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case udp_isOverrideTotLen:
|
||||
{
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
return data.is_override_totlen();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case udp_isOverrideCksum:
|
||||
{
|
||||
switch(attrib)
|
||||
{
|
||||
case FieldValue:
|
||||
return data.is_override_cksum();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
qFatal("%s: unimplemented case %d in switch", __PRETTY_FUNCTION__,
|
||||
index);
|
||||
break;
|
||||
}
|
||||
|
||||
return AbstractProtocol::fieldData(index, attrib, streamIndex);
|
||||
}
|
||||
|
||||
bool UdpProtocol::setFieldData(int /*index*/, const QVariant &/*value*/,
|
||||
FieldAttrib /*attrib*/)
|
||||
bool UdpProtocol::setFieldData(int index, const QVariant& value,
|
||||
FieldAttrib attrib)
|
||||
{
|
||||
//! implement UdpProtocol::setFieldData()
|
||||
return false;
|
||||
bool isOk = false;
|
||||
|
||||
if (attrib != FieldValue)
|
||||
goto _exit;
|
||||
|
||||
switch (index)
|
||||
{
|
||||
case udp_isOverrideSrcPort:
|
||||
{
|
||||
data.set_is_override_src_port(value.toBool());
|
||||
isOk = true;
|
||||
break;
|
||||
}
|
||||
case udp_isOverrideDstPort:
|
||||
{
|
||||
data.set_is_override_dst_port(value.toBool());
|
||||
isOk = true;
|
||||
break;
|
||||
}
|
||||
case udp_isOverrideTotLen:
|
||||
{
|
||||
data.set_is_override_totlen(value.toBool());
|
||||
isOk = true;
|
||||
break;
|
||||
}
|
||||
case udp_isOverrideCksum:
|
||||
{
|
||||
data.set_is_override_cksum(value.toBool());
|
||||
isOk = true;
|
||||
break;
|
||||
}
|
||||
case udp_srcPort:
|
||||
{
|
||||
uint srcPort = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_src_port(srcPort);
|
||||
break;
|
||||
}
|
||||
case udp_dstPort:
|
||||
{
|
||||
uint dstPort = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_dst_port(dstPort);
|
||||
break;
|
||||
}
|
||||
case udp_totLen:
|
||||
{
|
||||
uint totLen = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_totlen(totLen);
|
||||
break;
|
||||
}
|
||||
case udp_cksum:
|
||||
{
|
||||
uint cksum = value.toUInt(&isOk);
|
||||
if (isOk)
|
||||
data.set_cksum(cksum);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
qFatal("%s: unimplemented case %d in switch", __PRETTY_FUNCTION__,
|
||||
index);
|
||||
break;
|
||||
}
|
||||
|
||||
_exit:
|
||||
return isOk;
|
||||
}
|
||||
|
||||
bool UdpProtocol::isProtocolFrameValueVariable() const
|
||||
@ -301,15 +446,24 @@ void UdpProtocol::loadConfigWidget()
|
||||
{
|
||||
configWidget();
|
||||
|
||||
configForm->leUdpSrcPort->setText(fieldData(udp_srcPort, FieldValue).toString());
|
||||
configForm->leUdpDstPort->setText(fieldData(udp_dstPort, FieldValue).toString());
|
||||
configForm->leUdpSrcPort->setText(
|
||||
fieldData(udp_srcPort, FieldValue).toString());
|
||||
configForm->cbUdpSrcPortOverride->setChecked(
|
||||
fieldData(udp_isOverrideSrcPort, FieldValue).toBool());
|
||||
configForm->leUdpDstPort->setText(
|
||||
fieldData(udp_dstPort, FieldValue).toString());
|
||||
configForm->cbUdpDstPortOverride->setChecked(
|
||||
fieldData(udp_isOverrideDstPort, FieldValue).toBool());
|
||||
|
||||
configForm->leUdpLength->setText(fieldData(udp_totLen, FieldValue).toString());
|
||||
configForm->cbUdpLengthOverride->setChecked(data.is_override_totlen());
|
||||
configForm->leUdpLength->setText(
|
||||
fieldData(udp_totLen, FieldValue).toString());
|
||||
configForm->cbUdpLengthOverride->setChecked(
|
||||
fieldData(udp_isOverrideTotLen, FieldValue).toBool());
|
||||
|
||||
configForm->leUdpCksum->setText(QString("%1").arg(
|
||||
fieldData(udp_cksum, FieldValue).toUInt(), 4, BASE_HEX, QChar('0')));
|
||||
configForm->cbUdpCksumOverride->setChecked(data.is_override_cksum());
|
||||
configForm->cbUdpCksumOverride->setChecked(
|
||||
fieldData(udp_isOverrideCksum, FieldValue).toBool());
|
||||
}
|
||||
|
||||
void UdpProtocol::storeConfigWidget()
|
||||
@ -318,13 +472,20 @@ void UdpProtocol::storeConfigWidget()
|
||||
|
||||
configWidget();
|
||||
|
||||
data.set_src_port(configForm->leUdpSrcPort->text().toULong(&isOk));
|
||||
data.set_dst_port(configForm->leUdpDstPort->text().toULong(&isOk));
|
||||
setFieldData(udp_srcPort, configForm->leUdpSrcPort->text());
|
||||
setFieldData(udp_isOverrideSrcPort,
|
||||
configForm->cbUdpSrcPortOverride->isChecked());
|
||||
setFieldData(udp_dstPort, configForm->leUdpDstPort->text());
|
||||
setFieldData(udp_isOverrideDstPort,
|
||||
configForm->cbUdpDstPortOverride->isChecked());
|
||||
|
||||
data.set_totlen(configForm->leUdpLength->text().toULong(&isOk));
|
||||
data.set_is_override_totlen(configForm->cbUdpLengthOverride->isChecked());
|
||||
setFieldData(udp_totLen, configForm->leUdpLength->text());
|
||||
setFieldData(udp_isOverrideTotLen,
|
||||
configForm->cbUdpLengthOverride->isChecked());
|
||||
|
||||
data.set_cksum(configForm->leUdpCksum->text().remove(QChar(' ')).toULong(&isOk, BASE_HEX));
|
||||
data.set_is_override_cksum(configForm->cbUdpCksumOverride->isChecked());
|
||||
setFieldData(udp_cksum, configForm->leUdpCksum->text().toUInt(
|
||||
&isOk, BASE_HEX));
|
||||
setFieldData(udp_isOverrideCksum,
|
||||
configForm->cbUdpCksumOverride->isChecked());
|
||||
}
|
||||
|
||||
|
@ -44,6 +44,8 @@ private:
|
||||
udp_totLen,
|
||||
udp_cksum,
|
||||
|
||||
udp_isOverrideSrcPort,
|
||||
udp_isOverrideDstPort,
|
||||
udp_isOverrideTotLen,
|
||||
udp_isOverrideCksum,
|
||||
|
||||
@ -63,9 +65,11 @@ public:
|
||||
|
||||
virtual QString name() const;
|
||||
virtual QString shortName() const;
|
||||
|
||||
virtual ProtocolIdType protocolIdType() const;
|
||||
virtual quint32 protocolId(ProtocolIdType type) const;
|
||||
|
||||
virtual int fieldCount() const;
|
||||
virtual int fieldCount() const;
|
||||
|
||||
virtual AbstractProtocol::FieldFlags fieldFlags(int index) const;
|
||||
virtual QVariant fieldData(int index, FieldAttrib attrib,
|
||||
|
@ -23,13 +23,15 @@ package OstProto;
|
||||
|
||||
// UDP
|
||||
message Udp {
|
||||
optional bool is_override_totlen = 1;
|
||||
optional bool is_override_cksum = 2;
|
||||
optional bool is_override_src_port = 1;
|
||||
optional bool is_override_dst_port = 2;
|
||||
optional bool is_override_totlen = 3;
|
||||
optional bool is_override_cksum = 4;
|
||||
|
||||
optional uint32 src_port = 3 [default = 8902];
|
||||
optional uint32 dst_port = 4 [default = 80];
|
||||
optional uint32 totlen = 5;
|
||||
optional uint32 cksum = 6;
|
||||
optional uint32 src_port = 5 [default = 49152];
|
||||
optional uint32 dst_port = 6 [default = 49153];
|
||||
optional uint32 totlen = 7;
|
||||
optional uint32 cksum = 8;
|
||||
}
|
||||
|
||||
extend Protocol {
|
||||
|
@ -5,7 +5,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>217</width>
|
||||
<width>246</width>
|
||||
<height>144</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -16,24 +16,32 @@
|
||||
<item row="0" column="0" >
|
||||
<layout class="QGridLayout" >
|
||||
<item row="0" column="0" >
|
||||
<widget class="QLabel" name="label_35" >
|
||||
<widget class="QCheckBox" name="cbUdpSrcPortOverride" >
|
||||
<property name="text" >
|
||||
<string>Source Port</string>
|
||||
<string>Override Source Port</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" >
|
||||
<widget class="QLineEdit" name="leUdpSrcPort" />
|
||||
<widget class="QLineEdit" name="leUdpSrcPort" >
|
||||
<property name="enabled" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" >
|
||||
<widget class="QLabel" name="label_38" >
|
||||
<widget class="QCheckBox" name="cbUdpDstPortOverride" >
|
||||
<property name="text" >
|
||||
<string>Destination Port</string>
|
||||
<string>Override Destination Port</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" >
|
||||
<widget class="QLineEdit" name="leUdpDstPort" />
|
||||
<widget class="QLineEdit" name="leUdpDstPort" >
|
||||
<property name="enabled" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" >
|
||||
<widget class="QCheckBox" name="cbUdpLengthOverride" >
|
||||
@ -109,8 +117,8 @@
|
||||
<y>63</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel" >
|
||||
<x>149</x>
|
||||
<y>63</y>
|
||||
<x>209</x>
|
||||
<y>81</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
@ -125,8 +133,40 @@
|
||||
<y>106</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel" >
|
||||
<x>158</x>
|
||||
<y>106</y>
|
||||
<x>209</x>
|
||||
<y>107</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cbUdpDstPortOverride</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>leUdpDstPort</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel" >
|
||||
<x>131</x>
|
||||
<y>43</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel" >
|
||||
<x>166</x>
|
||||
<y>46</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cbUdpSrcPortOverride</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>leUdpSrcPort</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel" >
|
||||
<x>125</x>
|
||||
<y>21</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel" >
|
||||
<x>167</x>
|
||||
<y>20</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
|
Loading…
Reference in New Issue
Block a user