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, Returns true if the protocol varies one or more of its fields at run-time,
false otherwise 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 bool AbstractProtocol::isProtocolFrameValueVariable() const
{ {
// TODO: change subclass to call base class function?
return (protocolFrameVariableCount() > 1); return (protocolFrameVariableCount() > 1);
} }
@ -715,7 +710,6 @@ bool AbstractProtocol::isProtocolFrameSizeVariable() const
*/ */
int AbstractProtocol::protocolFrameVariableCount() const int AbstractProtocol::protocolFrameVariableCount() const
{ {
// TODO: change subclass to call base class function?
int count = 1; int count = 1;
for (int i = 0; i < _data.variable_fields_size(); i++) for (int i = 0; i < _data.variable_fields_size(); i++)
@ -734,6 +728,10 @@ int AbstractProtocol::protocolFrameVariableCount() const
*/ */
bool AbstractProtocol::isProtocolFramePayloadValueVariable() 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; AbstractProtocol *p = next;
while (p) while (p)
@ -1038,6 +1036,7 @@ void AbstractProtocol::varyProtocolFrameValue(QByteArray &buf, int frameIndex,
{ {
int x = frameIndex % varField.count(); int x = frameIndex % varField.count();
// FIXME: use vf.step()!!!!
// FIXME: use templates for duplicating code for quint8, quint16, quint32 // FIXME: use templates for duplicating code for quint8, quint16, quint32
switch (varField.type()) { switch (varField.type()) {
case OstProto::VariableField::kCounter8: { case OstProto::VariableField::kCounter8: {

View File

@ -774,24 +774,9 @@ _exit:
return isOk; 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 ArpProtocol::protocolFrameVariableCount() const
{ {
int count = 1; int count = AbstractProtocol::protocolFrameVariableCount();
if (fieldData(arp_senderHwAddrMode, FieldValue).toUInt() if (fieldData(arp_senderHwAddrMode, FieldValue).toUInt()
!= uint(OstProto::Arp::kFixed)) != uint(OstProto::Arp::kFixed))

View File

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

View File

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

View File

@ -185,12 +185,9 @@ bool Dot3Protocol::setFieldData(int index, const QVariant &value,
return isOk; return isOk;
} }
bool Dot3Protocol::isProtocolFrameValueVariable() const
{
return isProtocolFramePayloadSizeVariable();
}
int Dot3Protocol::protocolFrameVariableCount() const 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, virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue); FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const; virtual int protocolFrameVariableCount() const;
private: private:

View File

@ -735,23 +735,9 @@ int GmpProtocol::protocolFrameSize(int streamIndex) const
return AbstractProtocol::protocolFrameValue(streamIndex, true).size(); 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 GmpProtocol::protocolFrameVariableCount() const
{ {
int count = 1; int count = AbstractProtocol::protocolFrameVariableCount();
// No fields vary for Ssm Report // No fields vary for Ssm Report
if (isSsmReport()) if (isSsmReport())

View File

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

View File

@ -756,18 +756,9 @@ _exit:
return isOk; 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 Ip6Protocol::protocolFrameVariableCount() const
{ {
int count = 1; int count = AbstractProtocol::protocolFrameVariableCount();
if (data.src_addr_mode() != OstProto::Ip6::kFixed) if (data.src_addr_mode() != OstProto::Ip6::kFixed)
count = AbstractProtocol::lcm(count, data.src_addr_count()); count = AbstractProtocol::lcm(count, data.src_addr_count());

View File

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

View File

@ -327,18 +327,9 @@ _exit:
return isOk; 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 MacProtocol::protocolFrameVariableCount() const
{ {
int count = 1; int count = AbstractProtocol::protocolFrameVariableCount();
if (data.dst_mac_mode() != OstProto::Mac::e_mm_fixed) if (data.dst_mac_mode() != OstProto::Mac::e_mm_fixed)
count = AbstractProtocol::lcm(count, data.dst_mac_count()); count = AbstractProtocol::lcm(count, data.dst_mac_count());

View File

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

View File

@ -215,11 +215,8 @@ bool PayloadProtocol::setFieldData(int index, const QVariant &value,
bool PayloadProtocol::isProtocolFrameValueVariable() const bool PayloadProtocol::isProtocolFrameValueVariable() const
{ {
if (isProtocolFrameSizeVariable() return (AbstractProtocol::isProtocolFrameSizeVariable()
|| data.pattern_mode() == OstProto::Payload::e_dp_random) || isProtocolFrameSizeVariable());
return true;
else
return false;
} }
bool PayloadProtocol::isProtocolFrameSizeVariable() const bool PayloadProtocol::isProtocolFrameSizeVariable() const
@ -232,7 +229,7 @@ bool PayloadProtocol::isProtocolFrameSizeVariable() const
int PayloadProtocol::protocolFrameVariableCount() const int PayloadProtocol::protocolFrameVariableCount() const
{ {
int count = 1; int count = AbstractProtocol::protocolFrameVariableCount();
if (data.pattern_mode() == OstProto::Payload::e_dp_random) 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); 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, TODO: If your protocol frame size can vary across pkts of the same stream,
return true \n return true \n
@ -468,10 +457,9 @@ bool SampleProtocol::isProtocolFrameSizeVariable() const
TODO: If your protocol frame has any variable fields or has a variable 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 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 See AbstractProtocol::protocolFrameVariableCount() for more info
returns 1
*/ */
int SampleProtocol::protocolFrameVariableCount() const int SampleProtocol::protocolFrameVariableCount() const
{ {
return 1; return AbstractProtocol::protocolFrameVariableCount();
} }

View File

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

View File

@ -588,19 +588,13 @@ _exit:
return isOk; return isOk;
} }
bool TcpProtocol::isProtocolFrameValueVariable() const
{
if (data.is_override_cksum())
return false;
else
return isProtocolFramePayloadValueVariable();
}
int TcpProtocol::protocolFrameVariableCount() const int TcpProtocol::protocolFrameVariableCount() const
{ {
if (data.is_override_cksum()) int count = AbstractProtocol::protocolFrameVariableCount();
return 1;
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, virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue); FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const; virtual int protocolFrameVariableCount() const;
private: private:

View File

@ -414,18 +414,16 @@ _exit:
return isOk; return isOk;
} }
bool UdpProtocol::isProtocolFrameValueVariable() const
{
if (data.is_override_totlen() && data.is_override_cksum())
return false;
else
return isProtocolFramePayloadValueVariable();
}
int UdpProtocol::protocolFrameVariableCount() const int UdpProtocol::protocolFrameVariableCount() const
{ {
if (data.is_override_totlen() && data.is_override_cksum()) int count;
return 1;
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, virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue); FieldAttrib attrib = FieldValue);
virtual bool isProtocolFrameValueVariable() const;
virtual int protocolFrameVariableCount() const; virtual int protocolFrameVariableCount() const;
private: private:

View File

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

View File

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