One more big change: prototypes of most of the forwarding strategy functions has been changed

InterestHeader now constant everywhere and only smart pointer is used, instead of passing some parameters by
reference to the smart pointer (doesn't really make sense).

Another big change that is not fully visible for now: PIT entry now
stores the whole pointer to InterestHeader, which can be used with
delayed Interest processing procedures (previously, only Name was
stored, which is really a big simplification of PIT).
diff --git a/model/pit/ndn-pit-entry.cc b/model/pit/ndn-pit-entry.cc
index 765693f..95b81dd 100644
--- a/model/pit/ndn-pit-entry.cc
+++ b/model/pit/ndn-pit-entry.cc
@@ -42,16 +42,22 @@
               Ptr<const InterestHeader> header,
               Ptr<fib::Entry> fibEntry)
   : m_container (container)
-  , m_prefix (header->GetNamePtr ())
+  , m_interest (header)
   , m_fibEntry (fibEntry)
   , m_expireTime (Simulator::Now () + (!header->GetInterestLifetime ().IsZero ()?
                                        header->GetInterestLifetime ():
                                        Seconds (1.0)))
   , m_maxRetxCount (0)
 {
+  NS_LOG_FUNCTION (GetPrefix () << m_expireTime);
   // note that if interest lifetime is not set, the behavior is undefined
 }
 
+Entry::~Entry ()
+{
+  NS_LOG_FUNCTION (GetPrefix ());
+}
+
 void
 Entry::UpdateLifetime (const Time &offsetTime)
 {
@@ -64,6 +70,31 @@
   NS_LOG_INFO ("Updated lifetime to " << m_expireTime.ToDouble (Time::S));
 }
 
+const NameComponents &
+Entry::GetPrefix () const
+{
+  return m_interest->GetName ();
+}
+
+const Time &
+Entry::GetExpireTime () const
+{
+  return m_expireTime;
+}
+
+bool
+Entry::IsNonceSeen (uint32_t nonce) const
+{
+  return m_seenNonces.find (nonce) != m_seenNonces.end ();
+}
+
+void
+Entry::AddSeenNonce (uint32_t nonce)
+{
+  m_seenNonces.insert (nonce);
+}
+
+
 Entry::in_iterator
 Entry::AddIncoming (Ptr<Face> face)
 {
@@ -81,6 +112,11 @@
   m_incoming.erase (face);
 }
 
+void
+Entry::ClearIncoming ()
+{
+  m_incoming.clear ();
+}
 
 Entry::out_iterator
 Entry::AddOutgoing (Ptr<Face> face)
@@ -99,6 +135,12 @@
 }
 
 void
+Entry::ClearOutgoing ()
+{
+  m_outgoing.clear ();
+}
+
+void
 Entry::RemoveAllReferencesToFace (Ptr<Face> face)
 {
   in_iterator incoming = m_incoming.find (face);
@@ -175,9 +217,34 @@
     }
 }
 
+Ptr<fib::Entry>
+Entry::GetFibEntry ()
+{
+  return m_fibEntry;
+};
+
+const Entry::in_container &
+Entry::GetIncoming () const
+{
+  return m_incoming;
+}
+
+const Entry::out_container &
+Entry::GetOutgoing () const
+{
+  return m_outgoing;
+}
+
+uint32_t
+Entry::GetMaxRetxCount () const
+{
+  return m_maxRetxCount;
+}
+
+
 std::ostream& operator<< (std::ostream& os, const Entry &entry)
 {
-  os << "Prefix: " << *entry.m_prefix << "\n";
+  os << "Prefix: " << entry.GetPrefix () << "\n";
   os << "In: ";
   bool first = true;
   BOOST_FOREACH (const IncomingFace &face, entry.m_incoming)
diff --git a/model/pit/ndn-pit-entry.h b/model/pit/ndn-pit-entry.h
index 55aa7de..d08c09e 100644
--- a/model/pit/ndn-pit-entry.h
+++ b/model/pit/ndn-pit-entry.h
@@ -108,7 +108,7 @@
   /**
    * @brief Virtual destructor
    */
-  virtual ~Entry () {}
+  virtual ~Entry ();
   
   /**
    * @brief Update lifetime of PIT entry
@@ -125,27 +125,24 @@
    * @brief Get prefix of the PIT entry
    */
   const NameComponents &
-  GetPrefix () const
-  { return *m_prefix; }
-
+  GetPrefix () const;
+  
   /**
    * @brief Get current expiration time of the record
    *
    * @returns current expiration time of the record
    */
   const Time &
-  GetExpireTime () const
-  { return m_expireTime; }
-
+  GetExpireTime () const;
+  
   /**
    * @brief Check if nonce `nonce` for the same prefix has already been seen
    *
    * @param nonce Nonce to check
    */
   bool
-  IsNonceSeen (uint32_t nonce) const
-  { return m_seenNonces.find (nonce) != m_seenNonces.end (); }
-
+  IsNonceSeen (uint32_t nonce) const;
+  
   /**
    * @brief Add `nonce` to the list of seen nonces
    *
@@ -154,9 +151,8 @@
    * All nonces are stored for the lifetime of the PIT entry
    */
   virtual void
-  AddSeenNonce (uint32_t nonce)
-  { m_seenNonces.insert (nonce); }
-
+  AddSeenNonce (uint32_t nonce);
+  
   /**
    * @brief Add `face` to the list of incoming faces
    *
@@ -176,8 +172,7 @@
    * @brief Clear all incoming faces either after all of them were satisfied or NACKed
    */
   virtual void
-  ClearIncoming ()
-  { m_incoming.clear (); }
+  ClearIncoming ();
 
   /**
    * @brief Add `face` to the list of outgoing faces
@@ -192,8 +187,7 @@
    * @brief Clear all incoming faces either after all of them were satisfied or NACKed
    */
   virtual void
-  ClearOutgoing ()
-  { m_outgoing.clear (); }  
+  ClearOutgoing ();
   
   /**
    * @brief Remove all references to face.
@@ -231,25 +225,37 @@
   virtual void
   IncreaseAllowedRetxCount ();
 
-  Ptr<fib::Entry>
-  GetFibEntry () { return m_fibEntry; };
-
-  const in_container &
-  GetIncoming () const { return m_incoming; }
-
-  const out_container &
-  GetOutgoing () const { return m_outgoing; }
-
+  /**
+   * @brief Get maximum allowed number of retransmissions via outgoing faces
+   */
   uint32_t
-  GetMaxRetxCount () const { return m_maxRetxCount; }
+  GetMaxRetxCount () const;
+
+  /**
+   * @brief Get associated FIB entry
+   */
+  Ptr<fib::Entry>
+  GetFibEntry ();
+
+  /**
+   * @brief Get associated list (const reference) of incoming faces
+   */
+  const in_container &
+  GetIncoming () const;
+
+  /**
+   * @brief Get associated list (const reference) of outgoing faces
+   */
+  const out_container &
+  GetOutgoing () const;
 
 private:
   friend std::ostream& operator<< (std::ostream& os, const Entry &entry);
   
 protected:
   Pit &m_container; ///< @brief Reference to the container (to rearrange indexes, if necessary)
-  
-  Ptr<const NameComponents> m_prefix; ///< \brief Prefix of the PIT entry
+
+  Ptr<const InterestHeader> m_interest; ///< \brief Interest of the PIT entry (if several interests are received, then nonce is from the first Interest)
   Ptr<fib::Entry> m_fibEntry;     ///< \brief FIB entry related to this prefix
   
   nonce_container m_seenNonces;  ///< \brief map of nonces that were seen for this prefix