NDN layer now knows how to process ContentObject packets
diff --git a/model/ccnx-l3-protocol.h b/model/ccnx-l3-protocol.h
index fd03be9..2cd81ea 100644
--- a/model/ccnx-l3-protocol.h
+++ b/model/ccnx-l3-protocol.h
@@ -89,11 +89,23 @@
    */
   enum DropReason 
   {
-    /** \todo  Fill reasons from QualNet code */
-    DROP_DUPLICATE_INTEREST=1,  /**< Duplicate Interest */
+    NDN_DUPLICATE_INTEREST,  ///< \brief Duplicate Interest 
+    NDN_UNSOLICITED_DATA,    ///< \brief Unsolicited ContentObject (duplicate?)
+    // INTERFACE_DOWN,          ///< \brief Interface is down
+
     DROP_CONGESTION, /**< Congestion detected */
     DROP_NO_ROUTE,   /**< No route to host */
-    DROP_INTERFACE_DOWN,   /**< Interface is down so can not send packet */
+  };
+
+  /**
+   * \enum DropReason
+   * \brief Description of where content object was originated
+   */
+  enum ContentObjectSource
+  {
+    APPLICATION,
+    FORWARDED,
+    CACHED
   };
 
   /**
@@ -118,25 +130,33 @@
 
 protected:
   /**
-   * \brief Actual processing of incoming CCNx interests
+   * \brief Actual processing of incoming CCNx interests. Note, interests do not have payload
    * 
    * Processing Interest packets
+   * @param face    incoming face
+   * @param header  deserialized Interest header
+   * @param packet  original packet
    */
   virtual void
   OnInterest (const Ptr<CcnxFace> &face,
               Ptr<CcnxInterestHeader> &header,
-              Ptr<Packet> &p);
+              const Ptr<const Packet> &p);
 
   
   /**
    * \brief Actual processing of incoming CCNx content objects
    * 
    * Processing ContentObject packets
+   * @param face    incoming face
+   * @param header  deserialized ContentObject header
+   * @param payload data packet payload
+   * @param packet  original packet
    */
   virtual void
   OnData (const Ptr<CcnxFace> &face,
           Ptr<CcnxContentObjectHeader> &header,
-          Ptr<Packet> &p);
+          Ptr<Packet> &payload,
+          const Ptr<const Packet> &packet);
 
 protected:
   virtual void DoDispose (void);
@@ -171,17 +191,31 @@
   
   CcnxContentStore m_contentStore; ///< \brief Content store (for caching purposes only)
   
-  TracedCallback<Ptr<const Packet>, Ptr<Ccnx>, Ptr<const CcnxFace> > m_receivedInterestsTrace;
-  TracedCallback<Ptr<const Packet>, Ptr<Ccnx>, Ptr<const CcnxFace> > m_transmittedInterestsTrace;
+  TracedCallback<Ptr<const CcnxInterestHeader>,
+                 Ptr<Ccnx>, Ptr<const CcnxFace> > m_receivedInterestsTrace;
+  TracedCallback<Ptr<const CcnxInterestHeader>,
+                 Ptr<Ccnx>, Ptr<const CcnxFace> > m_transmittedInterestsTrace;
+  TracedCallback<Ptr<const CcnxInterestHeader>,
+                 DropReason,
+                 Ptr<Ccnx>, Ptr<const CcnxFace> > m_droppedInterestsTrace;
 
-  TracedCallback<Ptr<const Packet>, Ptr<Ccnx>, Ptr<const CcnxFace> > m_receivedDataTrace;
-  TracedCallback<Ptr<const Packet>, Ptr<Ccnx>, Ptr<const CcnxFace> > m_transmittedDataTrace;
+  TracedCallback<Ptr<const CcnxContentObjectHeader>,
+                 Ptr<const Packet>,/*payload*/
+                 Ptr<Ccnx>, Ptr<const CcnxFace> > m_receivedDataTrace;
+  TracedCallback<Ptr<const CcnxContentObjectHeader>,
+                 Ptr<const Packet>,/*payload*/
+                 ContentObjectSource,
+                 Ptr<Ccnx>, Ptr<const CcnxFace> > m_transmittedDataTrace;
+  TracedCallback<Ptr<const CcnxContentObjectHeader>,
+                 Ptr<const Packet>,/*payload*/
+                 DropReason,
+                 Ptr<Ccnx>, Ptr<const CcnxFace> > m_droppeddDataTrace;
   
   /**
    * \brief Trace of dropped packets, including reason and all headers
    * \internal
    */
-  TracedCallback<Ptr<const Packet>, DropReason, Ptr<const Ccnx>, Ptr<const CcnxFace> > m_dropTrace;
+  // TracedCallback<Ptr<const Packet>, DropReason, Ptr<const Ccnx>, Ptr<const CcnxFace> > m_dropTrace;
 };
   
 } // Namespace ns3