ostinato/common/protocolmanager.cpp
Srivats P. 2ec7fb30c2 Protocol Framework basic code in place now. Cleanup pending.
- 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)
2009-05-10 06:27:17 +00:00

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);
}