--------------------------------- - 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
36 lines
797 B
C++
36 lines
797 B
C++
#ifndef _PROTOCOL_MANAGER_H
|
|
#define _PROTOCOL_MANAGER_H
|
|
|
|
#include <QMap>
|
|
#include <QStringList>
|
|
|
|
class AbstractProtocol;
|
|
class StreamBase;
|
|
|
|
class ProtocolManager
|
|
{
|
|
QMap<int, QString> numberToNameMap;
|
|
QMap<QString, int> nameToNumberMap;
|
|
QMultiMap<int, int> neighbourProtocols;
|
|
QMap<int, void*> factory;
|
|
QList<AbstractProtocol*> protocolList;
|
|
|
|
void populateNeighbourProtocols();
|
|
|
|
public:
|
|
ProtocolManager();
|
|
|
|
void registerProtocol(int protoNumber, void *protoInstanceCreator);
|
|
|
|
AbstractProtocol* createProtocol(int protoNumber, StreamBase *stream,
|
|
AbstractProtocol *parent = 0);
|
|
AbstractProtocol* createProtocol(QString protoName, StreamBase *stream,
|
|
AbstractProtocol *parent = 0);
|
|
|
|
bool isValidNeighbour(int protoPrefix, int protoSuffix);
|
|
|
|
QStringList protocolDatabase();
|
|
};
|
|
|
|
#endif
|