- New Classes: o ProtocolManager - singleton with which all protocols register o ProtocolCollection - Aggregates all registered protocols; exports methods to work on all protocols o StreamBase - aggregates ProtocolCollection with Stream Core and Control; the client/server side stream classes now derive from StreamBase leading to major reduction in their code (more cleanup pending) - AbstractProtocol now supports the additional methods o createInstance() o protocolFrameSize() o protocolFrameOffset(), protocolFramePayloadSize() o protocolId(), payloadProtocolId() o protocolFrameCksum(), protocolFramePayloadCksum() 0 constructor takes an extra param - frameProtoList - Specific protocols - eth2, llc, snap, ip4, udp, tcp now return length, protocol id and cksums correctly (tcp/udp cksum pending) - StreamConfigDialog - protocol controls for length, cksum and protocolid are automatically updated (not fully working yet)
39 lines
1.3 KiB
C++
39 lines
1.3 KiB
C++
#include "protocolmanager.h"
|
|
|
|
#include "mac.h"
|
|
#include "payload.h"
|
|
|
|
#include "eth2.h"
|
|
#include "dot3.h"
|
|
#include "llc.h"
|
|
#include "snap.h"
|
|
#include "ip4.h"
|
|
#include "tcp.h"
|
|
#include "udp.h"
|
|
|
|
QMap<int, void*> ProtocolManager::factory;
|
|
QMap<QString, int> ProtocolManager::nameToNumberMap;
|
|
|
|
ProtocolManager OstProtocolManager;
|
|
|
|
ProtocolManager::ProtocolManager()
|
|
{
|
|
registerProtocol(51, QString("mac"), (void*) MacProtocol::createInstance);
|
|
registerProtocol(52, QString("payload"), (void*) PayloadProtocol::createInstance);
|
|
registerProtocol(121, QString("eth2"), (void*) Eth2Protocol::createInstance);
|
|
registerProtocol(122, QString("dot3"), (void*) Dot3Protocol::createInstance);
|
|
registerProtocol(123, QString("llc"), (void*) LlcProtocol::createInstance);
|
|
registerProtocol(124, QString("snap"), (void*) SnapProtocol::createInstance);
|
|
registerProtocol(130, QString("ip4"), (void*) Ip4Protocol::createInstance);
|
|
registerProtocol(140, QString("tcp"), (void*) TcpProtocol::createInstance);
|
|
registerProtocol(141, QString("udp"), (void*) UdpProtocol::createInstance);
|
|
}
|
|
|
|
void ProtocolManager::registerProtocol(int protoNumber, QString protoName,
|
|
void *protoInstanceCreator)
|
|
{
|
|
// TODO: validate incoming params for duplicates with existing
|
|
nameToNumberMap.insert(protoName, protoNumber);
|
|
factory.insert(protoNumber, protoInstanceCreator);
|
|
}
|