/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
 * Copyright (c) 2011 University of California, Los Angeles
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation;
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
 */

#ifndef CCNX_CONSUMER_H
#define CCNX_CONSUMER_H

#include "ns3/application.h"
#include "ns3/log.h"
#include "ns3/random-variable.h"
#include "ns3/nstime.h"
#include "ns3/event-id.h"
#include "ns3/ptr.h"
#include "ns3/simulator.h"
#include "ns3/ccnx-interest-header.h"
#include "ns3/ccnx-local-face.h"
#include "ns3/ccnx-name-components.h"
#include "ns3/packet.h"
#include "ns3/boolean.h"
#include "ns3/integer.h"
#include "ns3/uinteger.h"
#include "ns3/pointer.h"
#include "ns3/traced-callback.h"
#include "ns3/ccnx-header-helper.h"

#include "ns3/packet.h"
#include "ns3/header.h"

namespace ns3 
{

class CcnxConsumer: public Application
{
public: 
  static TypeId GetTypeId ();
        
  CcnxConsumer ();
  virtual ~CcnxConsumer ();

  void OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
                        const Ptr<const Packet> &payload);
        
protected:
  virtual void DoDispose (void);
  
private:
  // inherited from Application base class.
  virtual void StartApplication (void);    // Called at time specified by Start
  virtual void StopApplication (void);     // Called at time specified by Stop
        
  //helpers
  void CancelEvents ();

  // Event handlers
  // void StartSending ();
  // void StopSending ();
  void SendPacket ();
  //typedef Callback<void,const Ptr<CcnxFace>&,const Ptr<const Packet>& > ProtocolHandler;
     
private:
  TracedCallback<const Ptr<CcnxFace>&,const Ptr<const Packet>& > m_interestsTrace;
  TracedCallback<const Ptr<CcnxFace>&,const Ptr<const Packet>& > m_contentObjectsTrace;

  Time m_offTime;
  CcnxNameComponents m_interestName;
  Time m_interestLifeTime;
  int32_t m_minSuffixComponents;
  int32_t m_maxSuffixComponents;
  bool m_childSelector;
  CcnxNameComponents m_exclude;
  uint32_t m_initialNonce;
        
  EventId         m_sendEvent;    // Eventid of pending "send packet" event
  TypeId          m_tid;
  Ptr<CcnxLocalFace> m_face;
    
  uint32_t m_seq;
};

} // namespace ns3

#endif
