1357f495ac
Common ------ - Change in OstProto - Individual protocols are now extensions of (new) message 'Protocol' instead of 'Stream' - Stream now contains a repeated Protocol which also determines the ordered set of currently selected protocols; StreamCore.frame_proto which was doing this earlier has been removed - Change in AbstractProtocol Interface - Parent changed to StreamBase - Corresponding change in constructor and factory func - createInstance() - new method protocolNumber() - returns unique id for each protocol - protoDataCopyInto/From() now copies into OstProto::Protocol instead of OstProto::Stream - Change in all subclasses of AbstractProtocol to match new interface - For all protocols, configFrom is no longer static, but each protocol has its own configForm - configForm creation is lazy - configForm is still a child of the protocol i.e. it will be destroyed alongwith the protocol - TODO: convert configWidget() to a pure factory function i.e. the protocol does not own the configForm - this requires us to pass the widget into load/storeConfigWidget() methods - ProtocolCollection class removed alongwith its .h and .cpp - ProtocolList class redefined to serve the purpose of ProtocolCollection - New class ProtocolListIterator defined to iterate ProtocolList - AbstractProtocol methods now use the ProtocolListIterator - Factory function createProtocol() added to ProtocolManager - OstProto::StreamCore accessor functions moved from Stream to StreamBase Server ------ - MyService uses the newly moved accessors to StreamBase for OstProto::StreamCore members - StreamInfo now uses the protocols to create the packet Client ------ - StreamConfigDialog now uses ProtocolListIterator - So does PacketModel
70 lines
2.0 KiB
C++
70 lines
2.0 KiB
C++
#include "protocolmanager.h"
|
|
|
|
// FIXME(HI): remove
|
|
#include "protocol.pb.h"
|
|
#include "abstractprotocol.h"
|
|
|
|
#include "mac.h"
|
|
#include "payload.h"
|
|
|
|
#include "eth2.h"
|
|
#include "dot3.h"
|
|
#include "llc.h"
|
|
#include "snap.h"
|
|
#include "vlan.h"
|
|
#include "ip4.h"
|
|
#include "tcp.h"
|
|
#include "udp.h"
|
|
|
|
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(126, QString("vlan"), (void*) VlanProtocol::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);
|
|
numberToNameMap.insert(protoNumber, protoName);
|
|
factory.insert(protoNumber, protoInstanceCreator);
|
|
}
|
|
|
|
AbstractProtocol* ProtocolManager::createProtocol(int protoNumber,
|
|
StreamBase *stream)
|
|
{
|
|
AbstractProtocol* (*pc)(StreamBase*);
|
|
AbstractProtocol* p;
|
|
|
|
pc = (AbstractProtocol* (*)(StreamBase*))
|
|
factory.value(protoNumber);
|
|
|
|
Q_ASSERT(pc != NULL);
|
|
|
|
p = (*pc)(stream);
|
|
|
|
return p;
|
|
}
|
|
|
|
AbstractProtocol* ProtocolManager::createProtocol(QString protoName,
|
|
StreamBase *stream)
|
|
{
|
|
return createProtocol(nameToNumberMap.value(protoName), stream);
|
|
}
|
|
|
|
QStringList ProtocolManager::protocolDatabase()
|
|
{
|
|
return numberToNameMap.values();
|
|
}
|