[ndnSIM] fw: Keep both the CS of NFD and ndnSIM
Change-Id: I0c7abbc09a1be393eddfe8ef3cd7ab60b1622996
Ref: #2231
diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index b53b82d..c9a3fb8 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -131,9 +131,20 @@
// is pending?
if (!pitEntry->hasInRecords()) {
- m_cs.find(interest,
- bind(&Forwarder::onContentStoreHit, this, std::ref(inFace), pitEntry, _1, _2),
- bind(&Forwarder::onContentStoreMiss, this, std::ref(inFace), pitEntry, _1));
+ if (m_csFromNdnSim == nullptr) {
+ m_cs.find(interest,
+ bind(&Forwarder::onContentStoreHit, this, std::ref(inFace), pitEntry, _1, _2),
+ bind(&Forwarder::onContentStoreMiss, this, std::ref(inFace), pitEntry, _1));
+ }
+ else {
+ shared_ptr<Data> match = m_csFromNdnSim->Lookup(interest.shared_from_this());
+ if (match != nullptr) {
+ this->onContentStoreHit(inFace, pitEntry, interest, *match);
+ }
+ else {
+ this->onContentStoreMiss(inFace, pitEntry, interest);
+ }
+ }
}
else {
this->onContentStoreMiss(inFace, pitEntry, interest);
@@ -286,7 +297,10 @@
}
// CS insert
- m_cs.insert(data);
+ if (m_csFromNdnSim == nullptr)
+ m_cs.insert(data);
+ else
+ m_csFromNdnSim->Add(data.shared_from_this());
// when only one PIT entry is matched, trigger strategy: after receive Data
if (pitMatches.size() == 1) {
@@ -365,7 +379,10 @@
fw::UnsolicitedDataDecision decision = m_unsolicitedDataPolicy->decide(inFace, data);
if (decision == fw::UnsolicitedDataDecision::CACHE) {
// CS insert
- m_cs.insert(data, true);
+ if (m_csFromNdnSim == nullptr)
+ m_cs.insert(data, true);
+ else
+ m_csFromNdnSim->Add(data.shared_from_this());
}
NFD_LOG_DEBUG("onDataUnsolicited face=" << inFace.getId() <<