Rate recorder trace helper

Also a small change in CCNx trace API
diff --git a/model/ccnx-content-store.cc b/model/ccnx-content-store.cc
index 4875386..b0c4858 100644
--- a/model/ccnx-content-store.cc
+++ b/model/ccnx-content-store.cc
@@ -150,7 +150,7 @@
 }
 
 
-boost::tuple<Ptr<Packet>, Ptr<const CcnxContentObjectHeader> >
+boost::tuple<Ptr<Packet>, Ptr<const CcnxContentObjectHeader>, Ptr<const Packet> >
 CcnxContentStore::Lookup (Ptr<const CcnxInterestHeader> interest)
 {
   NS_LOG_FUNCTION_NOARGS ();
@@ -162,9 +162,9 @@
                                            m_contentStore.project<i_mru> (it));
 
       // return fully formed CCNx packet
-      return boost::make_tuple (it->GetFullyFormedCcnxPacket (), it->GetHeader ());
+      return boost::make_tuple (it->GetFullyFormedCcnxPacket (), it->GetHeader (), it->GetPacket ());
     }
-  return boost::tuple<Ptr<Packet>, Ptr<CcnxContentObjectHeader> > (0, 0);
+  return boost::tuple<Ptr<Packet>, Ptr<CcnxContentObjectHeader>, Ptr<Packet> > (0, 0, 0);
 }   
     
 void 
diff --git a/model/ccnx-content-store.h b/model/ccnx-content-store.h
index dd0f884..9f07a47 100644
--- a/model/ccnx-content-store.h
+++ b/model/ccnx-content-store.h
@@ -174,7 +174,7 @@
    * If an entry is found, it is promoted to the top of most recent
    * used entries index, \see m_contentStore
    */
-  boost::tuple<Ptr<Packet>, Ptr<const CcnxContentObjectHeader> >
+  boost::tuple<Ptr<Packet>, Ptr<const CcnxContentObjectHeader>, Ptr<const Packet> >
   Lookup (Ptr<const CcnxInterestHeader> interest);
             
   /**
@@ -215,22 +215,6 @@
    * Release build dumps everything in MRU order
    */
   void Print () const;
-            
-protected:
-  // /**
-  //  * \brief Move the given CS entry to the head of the list
-  //  *
-  //  * \param entry Content Store entry
-  //  */
-  // void Promote( CsEntry &entry );
-
-  /**
-   * \todo Alex: DoDispose and NotifyNewAggregate are seem to be very
-   * important, but I'm not yet sure what exactly they are supposed to
-   * do
-   */
-  // virtual void DoDispose ();
-  // virtual void NotifyNewAggregate ();
 
 private:
   CcnxContentStore (const CcnxContentStore &o); ///< Disabled copy constructor
@@ -244,7 +228,7 @@
    * \brief Content store implemented as a Boost.MultiIndex container
    * \internal
    */
-    CcnxContentStoreContainer::type m_contentStore;
+  CcnxContentStoreContainer::type m_contentStore;
 };
 
 inline std::ostream&
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 7f5f195..2e55164 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -423,8 +423,9 @@
     }
 
   Ptr<Packet> contentObject;
-  Ptr<const CcnxContentObjectHeader> contentObjectHeader; // unused for now
-  tie (contentObject, contentObjectHeader) = m_contentStore->Lookup (header);
+  Ptr<const CcnxContentObjectHeader> contentObjectHeader; // used for tracing
+  Ptr<const Packet> payload; // used for tracing
+  tie (contentObject, contentObjectHeader, payload) = m_contentStore->Lookup (header);
   if (contentObject != 0)
     {
       NS_ASSERT (contentObjectHeader != 0);
@@ -432,7 +433,7 @@
       NS_LOG_LOGIC("Found in cache");
         
       incomingFace->Send (contentObject);
-      m_outData (contentObjectHeader, true, incomingFace);
+      m_outData (contentObjectHeader, payload, true, incomingFace);
 
       // Set pruning timout on PIT entry (instead of deleting the record)
       m_pit->modify (m_pit->iterator_to (pitEntry),
@@ -533,7 +534,7 @@
 {
     
   NS_LOG_FUNCTION (incomingFace << header << payload << packet);
-  m_inData (header, incomingFace);
+  m_inData (header, payload, incomingFace);
 
   // 1. Lookup PIT entry
   try
@@ -580,7 +581,7 @@
           if (incoming.m_face != incomingFace)
             {
               incoming.m_face->Send (packet->Copy ());
-              m_outData (header, false, incoming.m_face);
+              m_outData (header, payload, false, incoming.m_face);
             }
 
           // successfull forwarded data trace
@@ -600,7 +601,7 @@
       //    (unsolicited data packets should not "poison" content store)
       
       //drop dulicated or not requested data packet
-      m_dropData (header, UNSOLICITED, incomingFace);
+      m_dropData (header, payload, UNSOLICITED, incomingFace);
       return; // do not process unsoliced data packets
     }
 }
diff --git a/model/ccnx.h b/model/ccnx.h
index f87da94..8d565c1 100644
--- a/model/ccnx.h
+++ b/model/ccnx.h
@@ -197,14 +197,14 @@
   ////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////
 
-  TracedCallback<Ptr<const CcnxContentObjectHeader>,
+  TracedCallback<Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>,
                  bool /*from cache*/,
                  Ptr<const CcnxFace> > m_outData;
 
-  TracedCallback<Ptr<const CcnxContentObjectHeader>,
+  TracedCallback<Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>,
                  Ptr<const CcnxFace> > m_inData;
 
-  TracedCallback<Ptr<const CcnxContentObjectHeader>,
+  TracedCallback<Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>,
                   DropReason,
                   Ptr<const CcnxFace> > m_dropData;  
 };