model: Slight modification with wire format processing

Now it is possible to convert Name from/to wire format via ndn::Face
helper method (since Face is getting configured with specific wire
format)

Refs #1008 (http://redmine.named-data.net/issues/1008)
diff --git a/model/wire/ccnb/ccnb-parser/visitors/name-visitor.cc b/model/wire/ccnb/ccnb-parser/visitors/name-visitor.cc
index 13043d3..965b320 100644
--- a/model/wire/ccnb/ccnb-parser/visitors/name-visitor.cc
+++ b/model/wire/ccnb/ccnb-parser/visitors/name-visitor.cc
@@ -50,8 +50,7 @@
                                                                                       )));
       break;
     default:
-      // ignore any other components
-      // when parsing Exclude, there could be <Any /> and <Bloom /> tags
+      VoidDepthFirstVisitor::visit (n, param);
       break;
     }
 }
diff --git a/model/wire/ccnb/wire-ccnb-data.cc b/model/wire/ccnb/wire-ccnb-data.cc
index 767d57b..0770c3d 100644
--- a/model/wire/ccnb/wire-ccnb-data.cc
+++ b/model/wire/ccnb/wire-ccnb-data.cc
@@ -194,8 +194,8 @@
   Ccnb::AppendCloser (start);                                    // </Signature>
 
   Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_Name, CcnbParser::CCN_DTAG);    // <Name>
-  Ccnb::AppendName (start, m_data->GetName()); //   <Component>...</Component>...
-  Ccnb::AppendCloser (start);                                  // </Name>
+  Ccnb::SerializeName (start, m_data->GetName());                                      //   <Component>...</Component>...
+  Ccnb::AppendCloser (start);                                                          // </Name>
 
   // fake signature
   Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_SignedInfo, CcnbParser::CCN_DTAG); // <SignedInfo>
@@ -234,7 +234,7 @@
         Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_KeyName, CcnbParser::CCN_DTAG);    // <KeyName>
         {
           Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_Name, CcnbParser::CCN_DTAG);       // <Name>
-          Ccnb::AppendName (start, *m_data->GetKeyLocator ());   //   <Component>...</Component>...
+          Ccnb::SerializeName (start, *m_data->GetKeyLocator ());         //   <Component>...</Component>...
           Ccnb::AppendCloser (start);                                     // </Name>
         }
         Ccnb::AppendCloser (start);                                     // </KeyName>
@@ -270,7 +270,7 @@
   written += 1;                                    // </Signature>
 
   written += Ccnb::EstimateBlockHeader (CcnbParser::CCN_DTAG_Name);    // <Name>
-  written += Ccnb::EstimateName (m_data->GetName ()); //   <Component>...</Component>...
+  written += Ccnb::SerializedSizeName (m_data->GetName ()); //   <Component>...</Component>...
   written += 1;                                  // </Name>
 
   // fake signature
@@ -307,7 +307,7 @@
         written += Ccnb::EstimateBlockHeader (CcnbParser::CCN_DTAG_KeyName);    // <KeyName>
         {
           written += Ccnb::EstimateBlockHeader (CcnbParser::CCN_DTAG_Name);       // <Name>
-          written += Ccnb::EstimateName (*m_data->GetKeyLocator ());        //   <Component>...</Component>...
+          written += Ccnb::SerializedSizeName (*m_data->GetKeyLocator ());        //   <Component>...</Component>...
           written += 1;                                               // </Name>
         }
         written += 1;                                               // </KeyName>
@@ -353,11 +353,7 @@
         {
           // process name components
           Ptr<Name> name = Create<Name> ();
-
-          BOOST_FOREACH (Ptr<CcnbParser::Block> block, n.m_nestedTags)
-            {
-              block->accept (nameVisitor, &(*name));
-            }
+          n.accept (nameVisitor, GetPointer (name));
           contentObject.SetName (name);
           break;
         }
@@ -454,17 +450,9 @@
           if (n.m_nestedTags.size ()!=1) // should be exactly one nested tag
             throw CcnbParser::CcnbDecodingException ();
 
-          Ptr<CcnbParser::BaseTag> nameTag = DynamicCast<CcnbParser::BaseTag>(n.m_nestedTags.front ());
-          if (nameTag == 0)
-            throw CcnbParser::CcnbDecodingException ();
-
           // process name components
           Ptr<Name> name = Create<Name> ();
-
-          BOOST_FOREACH (Ptr<CcnbParser::Block> block, nameTag->m_nestedTags)
-            {
-              block->accept (nameVisitor, &(*name));
-            }
+          n.accept (nameVisitor, GetPointer (name));
           contentObject.SetKeyLocator (name);
           break;
         }
diff --git a/model/wire/ccnb/wire-ccnb-interest.cc b/model/wire/ccnb/wire-ccnb-interest.cc
index 8a0ec3b..8d622a4 100644
--- a/model/wire/ccnb/wire-ccnb-interest.cc
+++ b/model/wire/ccnb/wire-ccnb-interest.cc
@@ -116,7 +116,7 @@
   Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_Interest, CcnbParser::CCN_DTAG); // <Interest>
   
   Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_Name, CcnbParser::CCN_DTAG); // <Name>
-  Ccnb::AppendName (start, m_interest->GetName());                // <Component>...</Component>...
+  Ccnb::SerializeName (start, m_interest->GetName());                // <Component>...</Component>...
   Ccnb::AppendCloser (start);                               // </Name>
 
   // if (m_interest->GetMinSuffixComponents() >= 0)
@@ -183,7 +183,7 @@
   written += Ccnb::EstimateBlockHeader (CcnbParser::CCN_DTAG_Interest); // <Interest>
   
   written += Ccnb::EstimateBlockHeader (CcnbParser::CCN_DTAG_Name); // <Name>
-  written += Ccnb::EstimateName (m_interest->GetName()); // <Component>...</Component>...
+  written += Ccnb::SerializedSizeName (m_interest->GetName()); // <Component>...</Component>...
   written += 1; // </Name>
 
   // if (m_interest->GetMinSuffixComponents() >= 0)
@@ -281,11 +281,7 @@
 
         // process name components
         Ptr<Name> name = Create<Name> ();
-        
-        BOOST_FOREACH (Ptr<CcnbParser::Block> block, n.m_nestedTags)
-          {
-            block->accept (nameVisitor, &(*name));
-          }
+        n.accept (nameVisitor, GetPointer (name));
         interest.SetName (name);
         break;
       }
diff --git a/model/wire/ccnb/wire-ccnb.cc b/model/wire/ccnb/wire-ccnb.cc
index 4f4f695..9033d3f 100644
--- a/model/wire/ccnb/wire-ccnb.cc
+++ b/model/wire/ccnb/wire-ccnb.cc
@@ -23,6 +23,8 @@
 #include <sstream>
 #include <boost/foreach.hpp>
 #include "ccnb-parser/common.h"
+#include "ccnb-parser/visitors/name-visitor.h"
+#include "ccnb-parser/syntax-tree/block.h"
 
 NDN_NAMESPACE_BEGIN
 
@@ -99,29 +101,6 @@
 }
 
 size_t
-Ccnb::AppendName (Buffer::Iterator &start, const Name &name)
-{
-  size_t written = 0;
-  BOOST_FOREACH (const std::string &component, name.GetComponents())
-    {
-      written += AppendTaggedBlob (start, CcnbParser::CCN_DTAG_Component,
-                                   reinterpret_cast<const uint8_t*>(component.c_str()), component.size());
-    }
-  return written;
-}
-
-size_t
-Ccnb::EstimateName (const Name &name)
-{
-  size_t written = 0;
-  BOOST_FOREACH (const std::string &component, name.GetComponents())
-    {
-      written += EstimateTaggedBlob (CcnbParser::CCN_DTAG_Component, component.size());
-    }
-  return written;
-}
-
-size_t
 Ccnb::AppendTimestampBlob (Buffer::Iterator &start, const Time &time)
 {
   // the original function implements Markers... thought not sure what are these markers for...
@@ -208,6 +187,41 @@
   return EstimateBlockHeader (dtag) + EstimateBlockHeader (string.size ()) + string.size () + 1;
 }
 
+size_t
+Ccnb::SerializeName (Buffer::Iterator &start, const Name &name)
+{
+  size_t written = 0;
+  BOOST_FOREACH (const std::string &component, name.GetComponents())
+    {
+      written += AppendTaggedBlob (start, CcnbParser::CCN_DTAG_Component,
+                                   reinterpret_cast<const uint8_t*>(component.c_str()), component.size());
+    }
+  return written;
+}
+
+size_t
+Ccnb::SerializedSizeName (const Name &name)
+{
+  size_t written = 0;
+  BOOST_FOREACH (const std::string &component, name.GetComponents())
+    {
+      written += EstimateTaggedBlob (CcnbParser::CCN_DTAG_Component, component.size());
+    }
+  return written;
+}
+
+Ptr<Name>
+Ccnb::DeserializeName (Buffer::Iterator &i)
+{
+  Ptr<Name> name = Create<Name> ();
+  CcnbParser::NameVisitor nameVisitor;
+
+  Ptr<CcnbParser::Block> root = CcnbParser::Block::ParseBlock (i);
+  root->accept (nameVisitor, GetPointer (name));
+
+  return name;
+}
+
 } // wire
 
 NDN_NAMESPACE_END
diff --git a/model/wire/ccnb/wire-ccnb.h b/model/wire/ccnb/wire-ccnb.h
index 42764c4..91d3d9e 100644
--- a/model/wire/ccnb/wire-ccnb.h
+++ b/model/wire/ccnb/wire-ccnb.h
@@ -85,24 +85,6 @@
   AppendCloser (Buffer::Iterator &start);
 
   /**
-   * @brief Append Name in CCNB encoding
-   * @param start Buffer to store serialized Interest
-   * @param name constant reference to Name object
-   *
-   * @returns written length
-   */
-  static size_t
-  AppendName (Buffer::Iterator &start, const Name &name);
-
-  /**
-   * @brief Estimate size of Name in CCNB encoding
-   * @param name constant reference to Name object
-   * @returns estimated length
-   */
-  static size_t
-  EstimateName (const Name &name);
-
-  /**
    * Append a binary timestamp as a BLOB using the ccn binary
    * Timestamp representation (12-bit fraction).
    *
@@ -187,6 +169,36 @@
    */
   static size_t
   EstimateString (uint32_t dtag, const std::string &string);
+
+  ////////////////////////////////
+  // General use wire formatters
+  ////////////////////////////////
+  
+  /**
+   * @brief Append Name in CCNB encoding
+   * @param start Buffer to store serialized Interest
+   * @param name constant reference to Name object
+   *
+   * @returns written length
+   */
+  static size_t
+  SerializeName (Buffer::Iterator &start, const Name &name);
+
+  /**
+   * @brief Estimate size of Name in CCNB encoding
+   * @param name constant reference to Name object
+   * @returns estimated length
+   */
+  static size_t
+  SerializedSizeName (const Name &name);
+
+  /**
+   * @brief Deserialize Name from CCNB encodeing
+   * @param start Buffer that stores serialized Interest
+   * @param name Name object
+   */
+  static Ptr<Name>
+  DeserializeName (Buffer::Iterator &start);
 }; // Ccnb