17792b8253
--------------------------------- - StreamConfigDialog: Valid subsequent protocol choices for a particular protocol in the simple protocol selection widget is no longer hardcoded - ProtocolManager is queried for validitity of each pair of possible protocols; signal-slot connections are made accordingly. This refactoring makes it easier to add a protocol to the simple protocol selection widget - ProtocolManager: populates and maintains a database of valid 'neighbour protocols' and implements a method - isValidNeighbour() to query the same for a pair of protocols - AbstractProtocol: new method protocolIdType() introduced to build the above database (in conjunction with the existing method protocolId(ProtocolIdType)); default implementation returns ProtocolIdNone - Protocols which include a valid/supported ProtocolIdType (eth/llc/ip) reimplement protocolIdType() to return the apporpirate ProtocolIdType. These are viz. - combo - eth - llc - snap - ip - Speed optimization while populating streamqueues if the protocolFrameValue/Size() does not vary across packets - AbstractProtocol: new methods to support the above optimization - isProtocolFrameValueVariable() - isProtocolFrameSizeVariable() - isProtocolFramePayloadValueVariable() - isProtocolFramePayloadSizeVariable() (each of the default implementations returns false indicating that the protocol frame value or frame size is fixed and not variable) - Protocols which support variable values/size (list follows) reimplement the above methods appropriately - combo - mac - dot3 - ip4 - tcp - udp - payload - StreamInfo::makePacket() moved to base class as StreamBase::frameValue() - StreamBase: all 'get' accessor functions made 'const' - class ProtocolManager: while registering a protocol, no need to pass the protocol name; ProtocolManager finds it out internally by using the protocol's shortName() method Fixes ----- - Fixed issue with port capture not starting the first time 'start capture' was clicked
120 lines
2.3 KiB
C++
120 lines
2.3 KiB
C++
#ifndef _STREAM_BASE_H
|
|
#define _STREAM_BASE_H
|
|
|
|
#include <QString>
|
|
#include <QLinkedList>
|
|
|
|
#include "protocol.pb.h"
|
|
|
|
class AbstractProtocol;
|
|
class ProtocolList;
|
|
class ProtocolListIterator;
|
|
|
|
class StreamBase
|
|
{
|
|
private:
|
|
OstProto::StreamId *mStreamId;
|
|
OstProto::StreamCore *mCore;
|
|
OstProto::StreamControl *mControl;
|
|
|
|
ProtocolList *currentFrameProtocols;
|
|
|
|
public:
|
|
StreamBase();
|
|
~StreamBase();
|
|
|
|
void protoDataCopyFrom(const OstProto::Stream &stream);
|
|
void protoDataCopyInto(OstProto::Stream &stream) const;
|
|
|
|
ProtocolListIterator* createProtocolListIterator() const;
|
|
|
|
//! \todo (LOW) should we have a copy constructor??
|
|
|
|
public:
|
|
enum FrameLengthMode {
|
|
e_fl_fixed,
|
|
e_fl_inc,
|
|
e_fl_dec,
|
|
e_fl_random
|
|
};
|
|
|
|
enum SendUnit {
|
|
e_su_packets,
|
|
e_su_bursts
|
|
};
|
|
|
|
enum SendMode {
|
|
e_sm_fixed,
|
|
e_sm_continuous
|
|
};
|
|
|
|
enum NextWhat {
|
|
e_nw_stop,
|
|
e_nw_goto_next,
|
|
e_nw_goto_id
|
|
};
|
|
|
|
bool operator < (const StreamBase &s) const;
|
|
|
|
quint32 id();
|
|
bool setId(quint32 id);
|
|
|
|
#if 0 // FIXME(HI): needed?
|
|
quint32 portId()
|
|
{ return mCore->port_id();}
|
|
bool setPortId(quint32 id)
|
|
{ mCore->set_port_id(id); return true;}
|
|
#endif
|
|
|
|
quint32 ordinal();
|
|
bool setOrdinal(quint32 ordinal);
|
|
|
|
bool isEnabled() const;
|
|
bool setEnabled(bool flag);
|
|
|
|
const QString name() const ;
|
|
bool setName(QString name) ;
|
|
|
|
// Frame Length (includes FCS);
|
|
FrameLengthMode lenMode() const;
|
|
bool setLenMode(FrameLengthMode lenMode);
|
|
|
|
quint16 frameLen(int streamIndex = 0) const;
|
|
bool setFrameLen(quint16 frameLen);
|
|
|
|
quint16 frameLenMin() const;
|
|
bool setFrameLenMin(quint16 frameLenMin);
|
|
|
|
quint16 frameLenMax() const;
|
|
bool setFrameLenMax(quint16 frameLenMax);
|
|
|
|
SendUnit sendUnit() const;
|
|
bool setSendUnit(SendUnit sendUnit);
|
|
|
|
SendMode sendMode() const;
|
|
bool setSendMode(SendMode sendMode);
|
|
|
|
NextWhat nextWhat() const;
|
|
bool setNextWhat(NextWhat nextWhat);
|
|
|
|
quint32 numPackets() const;
|
|
bool setNumPackets(quint32 numPackets);
|
|
|
|
quint32 numBursts() const;
|
|
bool setNumBursts(quint32 numBursts);
|
|
|
|
quint32 burstSize() const;
|
|
bool setBurstSize(quint32 packetsPerBurst);
|
|
|
|
quint32 packetRate() const;
|
|
bool setPacketRate(quint32 packetsPerSec);
|
|
|
|
quint32 burstRate() const;
|
|
bool setBurstRate(quint32 burstsPerSec);
|
|
|
|
bool isFrameVariable() const;
|
|
int frameValue(uchar *buf, int bufMaxSize, int n) const;
|
|
};
|
|
|
|
#endif
|