[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 7e0df65..5cb10de 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -154,11 +154,23 @@
// cancel unsatisfy & straggler timer
this->cancelUnsatisfyAndStragglerTimer(*pitEntry);
- // is pending?
- if (!pitEntry->hasInRecords()) {
- m_cs.find(interest,
- bind(&Forwarder::onContentStoreHit, this, ref(inFace), pitEntry, _1, _2),
- bind(&Forwarder::onContentStoreMiss, this, ref(inFace), pitEntry, _1));
+ const pit::InRecordCollection& inRecords = pitEntry->getInRecords();
+ bool isPending = inRecords.begin() != inRecords.end();
+ if (!isPending) {
+ if (m_csFromNdnSim == nullptr) {
+ m_cs.find(interest,
+ bind(&Forwarder::onContentStoreHit, this, ref(inFace), pitEntry, _1, _2),
+ bind(&Forwarder::onContentStoreMiss, this, 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);
@@ -320,7 +332,10 @@
}
// CS insert
- m_cs.insert(data);
+ if (m_csFromNdnSim == nullptr)
+ m_cs.insert(data);
+ else
+ m_csFromNdnSim->Add(data.shared_from_this());
std::set<Face*> pendingDownstreams;
// foreach PitEntry
@@ -370,7 +385,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() <<