mirror of
https://github.com/fwbuilder/fwbuilder
synced 2026-03-19 09:47:20 +01:00
see #2446 fixed deduplication of address table objects
This commit is contained in:
parent
ba53d7b8f5
commit
77560a735b
@ -810,15 +810,16 @@ Interface* PFImporter::getInterfaceByName(const string &name)
|
||||
void PFImporter::newAddressTableObject(const string &name, const string &file)
|
||||
{
|
||||
ObjectMaker maker(Library::cast(library), error_tracker);
|
||||
AddressTable *at = AddressTable::cast(
|
||||
commitObject(maker.createObject(AddressTable::TYPENAME, name.c_str())));
|
||||
assert(at!=NULL);
|
||||
at->setRunTime(true);
|
||||
at->setSourceName(file);
|
||||
address_table_registry[name.c_str()] = at;
|
||||
ObjectSignature sig(error_tracker);
|
||||
sig.type_name = AddressTable::TYPENAME;
|
||||
sig.object_name = QString::fromUtf8(name.c_str());
|
||||
sig.address_table_name = QString::fromUtf8(file.c_str());
|
||||
FWObject *at = address_maker->createObject(sig);
|
||||
|
||||
address_table_registry[sig.object_name] = at;
|
||||
|
||||
addMessageToLog(QString("Address Table: <%1> file %2")
|
||||
.arg(name.c_str()).arg(file.c_str()));
|
||||
.arg(sig.object_name).arg(file.c_str()));
|
||||
}
|
||||
|
||||
void PFImporter::newAddressTableObject(const string &name,
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
|
||||
#include "fwbuilder/Address.h"
|
||||
#include "fwbuilder/AddressRange.h"
|
||||
#include "fwbuilder/AddressTable.h"
|
||||
#include "fwbuilder/DNSName.h"
|
||||
#include "fwbuilder/FWObject.h"
|
||||
#include "fwbuilder/FWObjectDatabase.h"
|
||||
@ -54,7 +55,12 @@ FWObject* AddressObjectMaker::createObject(ObjectSignature &sig)
|
||||
if (sig.type_name == AddressRange::TYPENAME)
|
||||
obj = createAddressRange(sig);
|
||||
else
|
||||
obj = createAddress(sig);
|
||||
{
|
||||
if (sig.type_name == AddressTable::TYPENAME)
|
||||
obj = createAddressTable(sig);
|
||||
else
|
||||
obj = createAddress(sig);
|
||||
}
|
||||
|
||||
// Now I should build new signature because actual object type has
|
||||
// only been determined in createAddress()
|
||||
@ -133,7 +139,6 @@ FWObject* AddressObjectMaker::createAddress(ObjectSignature &sig)
|
||||
net->setAddress( InetAddr(sig.address.toStdString()) );
|
||||
} catch (FWException &ex)
|
||||
{
|
||||
// throw ObjectMakerException(
|
||||
error_tracker->registerError(
|
||||
QString("Error converting address '%1'").arg(sig.address));
|
||||
}
|
||||
@ -163,7 +168,6 @@ FWObject* AddressObjectMaker::createAddressRange(ObjectSignature &sig)
|
||||
ar->setRangeStart( InetAddr(addr1.toStdString()) );
|
||||
} catch (FWException &ex)
|
||||
{
|
||||
// throw ObjectMakerException(
|
||||
error_tracker->registerError(
|
||||
QString("Error converting address '%1'").arg(addr1));
|
||||
}
|
||||
@ -173,7 +177,6 @@ FWObject* AddressObjectMaker::createAddressRange(ObjectSignature &sig)
|
||||
ar->setRangeEnd( InetAddr(addr2.toStdString()) );
|
||||
} catch (FWException &ex)
|
||||
{
|
||||
// throw ObjectMakerException(
|
||||
error_tracker->registerError(
|
||||
QString("Error converting address '%1'").arg(addr2));
|
||||
}
|
||||
@ -182,3 +185,16 @@ FWObject* AddressObjectMaker::createAddressRange(ObjectSignature &sig)
|
||||
}
|
||||
|
||||
|
||||
FWObject* AddressObjectMaker::createAddressTable(ObjectSignature &sig)
|
||||
{
|
||||
FWObject *obj = findMatchingObject(sig);
|
||||
if (obj) return obj;
|
||||
|
||||
AddressTable *at = AddressTable::cast(
|
||||
ObjectMaker::createObject(AddressTable::TYPENAME,
|
||||
sig.object_name.toUtf8().constData()));
|
||||
assert(at!=NULL);
|
||||
at->setRunTime(true);
|
||||
at->setSourceName(sig.address_table_name.toStdString());
|
||||
return at;
|
||||
}
|
||||
|
||||
@ -51,6 +51,7 @@ public:
|
||||
protected:
|
||||
virtual libfwbuilder::FWObject* createAddress(ObjectSignature &sig);
|
||||
virtual libfwbuilder::FWObject* createAddressRange(ObjectSignature &sig);
|
||||
virtual libfwbuilder::FWObject* createAddressTable(ObjectSignature &sig);
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -748,7 +748,7 @@ void* ObjectSignature::dispatch(AddressTable *obj, void*)
|
||||
{
|
||||
object_name = QString::fromUtf8(obj->getName().c_str());
|
||||
type_name = obj->getTypeName().c_str();
|
||||
address_table_name = obj->getSourceName().c_str();
|
||||
address_table_name = QString::fromUtf8(obj->getSourceName().c_str());
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -1038,7 +1038,7 @@ void ObjectMaker::prepareForDeduplication(FWObject *root)
|
||||
Host::cast(root) ||
|
||||
FWOptions::cast(root)) return;
|
||||
|
||||
if (Address::cast(root) || Service::cast(root))
|
||||
if (Address::cast(root) || MultiAddress::cast(root) || Service::cast(root))
|
||||
{
|
||||
ObjectSignature sig(error_tracker);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user