diff --git a/common/protocolmanager.cpp b/common/protocolmanager.cpp index 9ed67f5..e91f270 100644 --- a/common/protocolmanager.cpp +++ b/common/protocolmanager.cpp @@ -164,6 +164,11 @@ void ProtocolManager::populateNeighbourProtocols() } } +bool ProtocolManager::isRegisteredProtocol(int protoNumber) +{ + return factory.contains(protoNumber); +} + AbstractProtocol* ProtocolManager::createProtocol(int protoNumber, StreamBase *stream, AbstractProtocol *parent) { diff --git a/common/protocolmanager.h b/common/protocolmanager.h index 77ea81c..07b0604 100644 --- a/common/protocolmanager.h +++ b/common/protocolmanager.h @@ -42,6 +42,7 @@ public: void registerProtocol(int protoNumber, void *protoInstanceCreator); + bool isRegisteredProtocol(int protoNumber); AbstractProtocol* createProtocol(int protoNumber, StreamBase *stream, AbstractProtocol *parent = 0); AbstractProtocol* createProtocol(QString protoName, StreamBase *stream, diff --git a/common/streambase.cpp b/common/streambase.cpp index 53addbe..b9dea25 100644 --- a/common/streambase.cpp +++ b/common/streambase.cpp @@ -89,8 +89,14 @@ void StreamBase::protoDataCopyFrom(const OstProto::Stream &stream) iter = createProtocolListIterator(); for (int i=0; i < stream.protocol_size(); i++) { - proto = OstProtocolManager->createProtocol( - stream.protocol(i).protocol_id().id(), this); + int protoId = stream.protocol(i).protocol_id().id(); + + if (!OstProtocolManager->isRegisteredProtocol(protoId)) + { + qWarning("Skipping unregistered protocol %d", protoId); + continue; + } + proto = OstProtocolManager->createProtocol(protoId, this); proto->protoDataCopyFrom(stream.protocol(i)); iter->insert(proto); }