1
0
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:
Vadim Kurland 2011-05-29 14:33:21 -07:00
parent ba53d7b8f5
commit 77560a735b
4 changed files with 31 additions and 13 deletions

View File

@ -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,

View File

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

View File

@ -51,6 +51,7 @@ public:
protected:
virtual libfwbuilder::FWObject* createAddress(ObjectSignature &sig);
virtual libfwbuilder::FWObject* createAddressRange(ObjectSignature &sig);
virtual libfwbuilder::FWObject* createAddressTable(ObjectSignature &sig);
};

View File

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