/* -*- 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: 
 */

#include "ccnx-decoding-helper.h"

#include "ns3/ccnx-interest-header.h"
#include "ns3/ccnx-content-object-header.h"

#include "ns3/ccnb-parser-interest-visitor.h"
#include "ns3/ccnb-parser-content-object-visitor.h"
#include "ns3/ccnb-parser-block.h"

#include "ns3/ccnb-parser-dtag.h"

#include "ns3/log.h"

NS_LOG_COMPONENT_DEFINE ("CcnxDecodingHelper");

namespace ns3 {

size_t
CcnxDecodingHelper::Deserialize (Buffer::Iterator start, CcnxInterestHeader &interest)
{
  static CcnbParser::InterestVisitor interestVisitor;

  Buffer::Iterator i = start;
  Ptr<CcnbParser::Block> root = CcnbParser::Block::ParseBlock (i);
  root->accept (interestVisitor, &interest);

  NS_LOG_DEBUG ("refs: " << root->GetReferenceCount ());
  NS_LOG_DEBUG ("refs: " << DynamicCast<CcnbParser::BaseTag> (root)->m_nestedTags.front ()->GetReferenceCount ());
  
  return i.GetDistanceFrom (start);
}

size_t
CcnxDecodingHelper::Deserialize (Buffer::Iterator start, CcnxContentObjectHeader &contentObject)
{
  static CcnbParser::ContentObjectVisitor contentObjectVisitor;

  Buffer::Iterator i = start;
  Ptr<CcnbParser::Block> root = CcnbParser::Block::ParseBlock (i);
  root->accept (contentObjectVisitor, &contentObject);

  return i.GetDistanceFrom (start);
}

} // namespace ns3
