Feature (contd.): Variable Fields - removed protocol subclass implementations of isProtocolFrameValueVariable() since the updated implementation in the base abstract class is now sufficient. Updated subclass implementations of protocolFrameValueVariableCount() to query the base class and use the return value in its calculation

This commit is contained in:
Srivats P. 2015-05-27 20:36:49 +05:30
parent df24cf8b15
commit 7a1f791a37
21 changed files with 42 additions and 146 deletions

View File

@ -675,14 +675,9 @@ QByteArray AbstractProtocol::protocolFrameValue(int streamIndex, bool forCksum)
/*!
Returns true if the protocol varies one or more of its fields at run-time,
false otherwise
The default implementation returns false. A subclass should reimplement
if it has varying fields e.g. an IP protocol that increments/decrements
the IP address with every packet
*/
bool AbstractProtocol::isProtocolFrameValueVariable() const
{
// TODO: change subclass to call base class function?
return (protocolFrameVariableCount() > 1);
}
@ -715,7 +710,6 @@ bool AbstractProtocol::isProtocolFrameSizeVariable() const
*/
int AbstractProtocol::protocolFrameVariableCount() const
{
// TODO: change subclass to call base class function?
int count = 1;
for (int i = 0; i < _data.variable_fields_size(); i++)
@ -734,6 +728,10 @@ int AbstractProtocol::protocolFrameVariableCount() const
*/
bool AbstractProtocol::isProtocolFramePayloadValueVariable() const
{
// TODO: it is simpler to do the following -
// return (protocolFramePayloadVariableCount() > 1)
// However, it may be inefficient till the time we cache the
// variable count
AbstractProtocol *p = next;
while (p)
@ -1038,6 +1036,7 @@ void AbstractProtocol::varyProtocolFrameValue(QByteArray &buf, int frameIndex,
{
int x = frameIndex % varField.count();
// FIXME: use vf.step()!!!!
// FIXME: use templates for duplicating code for quint8, quint16, quint32
switch (varField.type()) {
case OstProto::VariableField::kCounter8: {

View File

@ -774,24 +774,9 @@ _exit:
return isOk;
}
bool ArpProtocol::isProtocolFrameValueVariable() const
{
if (fieldData(arp_senderHwAddrMode, FieldValue).toUInt()
!= uint(OstProto::Arp::kFixed)
|| fieldData(arp_senderProtoAddrMode, FieldValue).toUInt()
!= uint(OstProto::Arp::kFixed)
|| fieldData(arp_targetHwAddrMode, FieldValue).toUInt()
!= uint(OstProto::Arp::kFixed)
|| fieldData(arp_targetProtoAddrMode, FieldValue).toUInt()
!= uint(OstProto::Arp::kFixed))
return true;
return false;
}
int ArpProtocol::protocolFrameVariableCount() const
{
int count = 1;
int count = AbstractProtocol::protocolFrameVariableCount();
if (fieldData(arp_senderHwAddrMode, FieldValue).toUInt()
!= uint(OstProto::Arp::kFixed))

View File

@ -93,7 +93,6 @@ public:
virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const;
private:

View File

@ -150,12 +150,6 @@ public:
int protocolFramePayloadSize() const;
#endif
virtual bool isProtocolFrameValueVariable() const
{
return (protoA->isProtocolFrameValueVariable()
|| protoB->isProtocolFrameValueVariable());
}
virtual bool isProtocolFrameSizeVariable() const
{
return (protoA->isProtocolFrameSizeVariable()
@ -163,9 +157,14 @@ public:
}
virtual int protocolFrameVariableCount() const
{
return AbstractProtocol::lcm(
protoA->protocolFrameVariableCount(),
protoB->protocolFrameVariableCount());
int count = AbstractProtocol::protocolFrameVariableCount();
count = AbstractProtocol::lcm(
count,
protoA->protocolFrameVariableCount());
count = AbstractProtocol::lcm(
count,
protoB->protocolFrameVariableCount());
return count;
}
virtual quint32 protocolFrameCksum(int streamIndex = 0,

View File

@ -185,12 +185,9 @@ bool Dot3Protocol::setFieldData(int index, const QVariant &value,
return isOk;
}
bool Dot3Protocol::isProtocolFrameValueVariable() const
{
return isProtocolFramePayloadSizeVariable();
}
int Dot3Protocol::protocolFrameVariableCount() const
{
return protocolFramePayloadVariableCount();
return AbstractProtocol::lcm(
AbstractProtocol::protocolFrameVariableCount(),
protocolFramePayloadVariableCount());
}

View File

@ -57,7 +57,6 @@ public:
virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const;
private:

View File

@ -735,23 +735,9 @@ int GmpProtocol::protocolFrameSize(int streamIndex) const
return AbstractProtocol::protocolFrameValue(streamIndex, true).size();
}
bool GmpProtocol::isProtocolFrameValueVariable() const
{
// No fields vary for Ssm Report
if (isSsmReport())
return false;
// For all other msg types, check the group mode
if (fieldData(kGroupMode, FieldValue).toUInt()
!= uint(OstProto::Gmp::kFixed))
return true;
return false;
}
int GmpProtocol::protocolFrameVariableCount() const
{
int count = 1;
int count = AbstractProtocol::protocolFrameVariableCount();
// No fields vary for Ssm Report
if (isSsmReport())

View File

@ -96,7 +96,6 @@ public:
virtual int protocolFrameSize(int streamIndex = 0) const;
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const;
protected:

View File

@ -756,18 +756,9 @@ _exit:
return isOk;
}
bool Ip6Protocol::isProtocolFrameValueVariable() const
{
if ((data.src_addr_mode() != OstProto::Ip6::kFixed)
|| (data.dst_addr_mode() != OstProto::Ip6::kFixed))
return true;
else
return false;
}
int Ip6Protocol::protocolFrameVariableCount() const
{
int count = 1;
int count = AbstractProtocol::protocolFrameVariableCount();
if (data.src_addr_mode() != OstProto::Ip6::kFixed)
count = AbstractProtocol::lcm(count, data.src_addr_count());

View File

@ -100,7 +100,6 @@ public:
virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const;
virtual quint32 protocolFrameCksum(int streamIndex = 0,

View File

@ -327,18 +327,9 @@ _exit:
return isOk;
}
bool MacProtocol::isProtocolFrameValueVariable() const
{
if ((data.dst_mac_mode() != OstProto::Mac::e_mm_fixed) ||
(data.src_mac_mode() != OstProto::Mac::e_mm_fixed))
return true;
else
return false;
}
int MacProtocol::protocolFrameVariableCount() const
{
int count = 1;
int count = AbstractProtocol::protocolFrameVariableCount();
if (data.dst_mac_mode() != OstProto::Mac::e_mm_fixed)
count = AbstractProtocol::lcm(count, data.dst_mac_count());

View File

@ -63,7 +63,6 @@ public:
virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const;
private:

View File

@ -215,11 +215,8 @@ bool PayloadProtocol::setFieldData(int index, const QVariant &value,
bool PayloadProtocol::isProtocolFrameValueVariable() const
{
if (isProtocolFrameSizeVariable()
|| data.pattern_mode() == OstProto::Payload::e_dp_random)
return true;
else
return false;
return (AbstractProtocol::isProtocolFrameSizeVariable()
|| isProtocolFrameSizeVariable());
}
bool PayloadProtocol::isProtocolFrameSizeVariable() const
@ -232,7 +229,7 @@ bool PayloadProtocol::isProtocolFrameSizeVariable() const
int PayloadProtocol::protocolFrameVariableCount() const
{
int count = 1;
int count = AbstractProtocol::protocolFrameVariableCount();
if (data.pattern_mode() == OstProto::Payload::e_dp_random)
{

View File

@ -441,17 +441,6 @@ int SampleProtocol::protocolFrameSize(int streamIndex) const
return AbstractProtocol::protocolFrameSize(streamIndex);
}
/*!
TODO: If your protocol has any variable fields, return true \n
Otherwise you don't need to reimplement this method - the base class always
returns false
*/
bool SampleProtocol::isProtocolFrameValueVariable() const
{
return false;
}
/*!
TODO: If your protocol frame size can vary across pkts of the same stream,
return true \n
@ -468,10 +457,9 @@ bool SampleProtocol::isProtocolFrameSizeVariable() const
TODO: If your protocol frame has any variable fields or has a variable
size, return the minimum number of frames required to vary the fields \n
Otherwise you don't need to reimplement this method - the base class always
returns 1
See AbstractProtocol::protocolFrameVariableCount() for more info
*/
int SampleProtocol::protocolFrameVariableCount() const
{
return 1;
return AbstractProtocol::protocolFrameVariableCount();
}

View File

@ -78,7 +78,6 @@ public:
virtual int protocolFrameSize(int streamIndex = 0) const;
virtual bool isProtocolFrameValueVariable() const;
virtual bool isProtocolFrameSizeVariable() const;
virtual int protocolFrameVariableCount() const;

View File

@ -588,19 +588,13 @@ _exit:
return isOk;
}
bool TcpProtocol::isProtocolFrameValueVariable() const
{
if (data.is_override_cksum())
return false;
else
return isProtocolFramePayloadValueVariable();
}
int TcpProtocol::protocolFrameVariableCount() const
{
if (data.is_override_cksum())
return 1;
int count = AbstractProtocol::protocolFrameVariableCount();
return protocolFramePayloadVariableCount();
if (!data.is_override_cksum())
count = AbstractProtocol::lcm(count,
protocolFramePayloadVariableCount());
return count;
}

View File

@ -79,7 +79,6 @@ public:
virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const;
private:

View File

@ -414,18 +414,16 @@ _exit:
return isOk;
}
bool UdpProtocol::isProtocolFrameValueVariable() const
{
if (data.is_override_totlen() && data.is_override_cksum())
return false;
else
return isProtocolFramePayloadValueVariable();
}
int UdpProtocol::protocolFrameVariableCount() const
{
if (data.is_override_totlen() && data.is_override_cksum())
return 1;
int count;
return protocolFramePayloadVariableCount();
if (data.is_override_totlen() && data.is_override_cksum())
count = AbstractProtocol::protocolFrameVariableCount();
else
count = AbstractProtocol::lcm(
AbstractProtocol::protocolFrameVariableCount(),
protocolFramePayloadVariableCount());
return count;
}

View File

@ -65,7 +65,6 @@ public:
virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const;
private:

View File

@ -212,11 +212,6 @@ int UserScriptProtocol::protocolFrameSize(int streamIndex) const
return userValue.toInt32();
}
bool UserScriptProtocol::isProtocolFrameValueVariable() const
{
return userProtocol_.isProtocolFrameValueVariable();
}
bool UserScriptProtocol::isProtocolFrameSizeVariable() const
{
return userProtocol_.isProtocolFrameSizeVariable();
@ -224,7 +219,9 @@ bool UserScriptProtocol::isProtocolFrameSizeVariable() const
int UserScriptProtocol::protocolFrameVariableCount() const
{
return userProtocol_.protocolFrameVariableCount();
return AbstractProtocol::lcm(
AbstractProtocol::protocolFrameVariableCount(),
userProtocol_.protocolFrameVariableCount());
}
quint32 UserScriptProtocol::protocolFrameCksum(int streamIndex,
@ -460,7 +457,6 @@ UserProtocol::UserProtocol(AbstractProtocol *parent)
void UserProtocol::reset()
{
name_ = QString();
protocolFrameValueVariable_ = false;
protocolFrameSizeVariable_ = false;
protocolFrameVariableCount_ = 1;
}
@ -475,16 +471,6 @@ void UserProtocol::setName(QString &name)
name_ = name;
}
bool UserProtocol::isProtocolFrameValueVariable() const
{
return protocolFrameValueVariable_;
}
void UserProtocol::setProtocolFrameValueVariable(bool variable)
{
protocolFrameValueVariable_ = variable;
}
bool UserProtocol::isProtocolFrameSizeVariable() const
{
return protocolFrameSizeVariable_;

View File

@ -35,9 +35,6 @@ class UserProtocol : public QObject
Q_ENUMS(CksumType);
Q_PROPERTY(QString name READ name WRITE setName);
Q_PROPERTY(bool protocolFrameValueVariable
READ isProtocolFrameValueVariable
WRITE setProtocolFrameValueVariable);
Q_PROPERTY(bool protocolFrameSizeVariable
READ isProtocolFrameSizeVariable
WRITE setProtocolFrameSizeVariable);
@ -69,8 +66,6 @@ public slots:
QString name() const;
void setName(QString &name);
bool isProtocolFrameValueVariable() const;
void setProtocolFrameValueVariable(bool variable);
bool isProtocolFrameSizeVariable() const;
void setProtocolFrameSizeVariable(bool variable);
int protocolFrameVariableCount() const;
@ -93,7 +88,6 @@ private:
AbstractProtocol *parent_;
QString name_;
bool protocolFrameValueVariable_;
bool protocolFrameSizeVariable_;
int protocolFrameVariableCount_;
};
@ -133,7 +127,6 @@ public:
virtual int protocolFrameSize(int streamIndex = 0) const;
virtual bool isProtocolFrameValueVariable() const;
virtual bool isProtocolFrameSizeVariable() const;
virtual int protocolFrameVariableCount() const;