diff --git a/src/common/p25/kmm/KMMFactory.cpp b/src/common/p25/kmm/KMMFactory.cpp index e3c624c0..30515c97 100644 --- a/src/common/p25/kmm/KMMFactory.cpp +++ b/src/common/p25/kmm/KMMFactory.cpp @@ -44,6 +44,32 @@ std::unique_ptr KMMFactory::create(const uint8_t* data) return decode(new KMMHello(), data); case KMM_MessageType::INVENTORY_CMD: return decode(new KMMInventoryCommand(), data); + case KMM_MessageType::INVENTORY_RSP: + { + std::unique_ptr frame = decode(new KMMInventoryResponseHeader(), data); + if (frame == nullptr) { + break; + } + + KMMInventoryResponseHeader* header = static_cast(frame.get()); + if (header == nullptr) { + break; + } + + switch (header->getInventoryType()) { + case KMM_InventoryType::LIST_ACTIVE_KEYSET_IDS: + case KMM_InventoryType::LIST_INACTIVE_KEYSET_IDS: + return decode(new KMMInventoryResponseListKeysets(), data); + case KMM_InventoryType::LIST_ACTIVE_KEY_IDS: + case KMM_InventoryType::LIST_INACTIVE_KEY_IDS: + return decode(new KMMInventoryResponseListKeyIDs(), data); + + default: + LogError(LOG_P25, "KMMFactory::create(), unknown KMM inventory type value, inventoryType = $%02X", header->getInventoryType()); + break; + } + } + break; case KMM_MessageType::MODIFY_KEY_CMD: return decode(new KMMModifyKey(), data); default: diff --git a/src/common/p25/kmm/KMMFactory.h b/src/common/p25/kmm/KMMFactory.h index c98db52f..4b6bb35e 100644 --- a/src/common/p25/kmm/KMMFactory.h +++ b/src/common/p25/kmm/KMMFactory.h @@ -23,6 +23,9 @@ #include "common/p25/kmm/KMMFrame.h" #include "common/p25/kmm/KMMHello.h" #include "common/p25/kmm/KMMInventoryCommand.h" +#include "common/p25/kmm/KMMInventoryResponseHeader.h" +#include "common/p25/kmm/KMMInventoryResponseListKeysets.h" +#include "common/p25/kmm/KMMInventoryResponseListKeyIDs.h" #include "common/p25/kmm/KMMModifyKey.h" namespace p25