wait to be verified
diff --git a/src/app/name-dig.cpp b/src/app/name-dig.cpp
new file mode 100644
index 0000000..6e64e31
--- /dev/null
+++ b/src/app/name-dig.cpp
@@ -0,0 +1,123 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
+ *
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
+ *
+ * NDNS is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NDNS 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
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "name-dig.hpp"
+
+namespace ndn {
+namespace ndns {
+
+NameDig::NameDig(const char *programName, const char *prefix)
+: NDNApp(programName, prefix)
+, m_resolverName(Name("/"))
+, m_dstLabel(Name(prefix)){
+  //prefix in this app is the m_dstLabel
+  this->setInterestLifetime(time::milliseconds(10000));
+}
+
+NameDig::~NameDig() {
+  // TODO Auto-generated destructor stub
+}
+
+void
+NameDig::onData(const Interest& interest, Data& data)
+{
+  Response re;
+  re.fromData(data);
+  cout<<"get data:->"<<data.getName()<<endl;
+  cout<<"get response:->"<<re<<endl;
+
+
+
+  m_rrs = re.getRrs();
+
+
+
+  vector<RR>::iterator iter = m_rrs.begin();
+
+  while (iter != m_rrs.end())
+  {
+    RR rr = *iter;
+    cout<<rr<<endl;
+    iter ++;
+  }
+
+  this->stop();
+}
+
+void
+NameDig::sendQuery()
+{
+  Query q;
+  q.setAuthorityZone(this->m_resolverName);
+  q.setRrLabel(m_dstLabel);
+  q.setQueryType(Query::QUERY_DNS_R);
+  q.setRrType(m_rrType);
+
+  Interest interest = q.toInterest();
+  interest.setInterestLifetime(this->m_interestLifetime);
+  try {
+    m_face.expressInterest(interest,
+            boost::bind(&NameDig::onData, this, _1, _2),
+            boost::bind(&NameDig::onTimeout, this, _1)
+            );
+    std::cout<<"[* <- *] send Interest: "<<interest.getName().toUri()<<std::endl;
+  }catch(std::exception& e) {
+    m_hasError = true;
+    m_error = e.what();
+  }
+  m_interestTriedNum += 1;
+}
+
+void
+NameDig::onTimeout(const Interest& interest)
+{
+  std::cout<<"[* !! *] timeout Interest"<<interest.getName()<<std::endl;
+
+  if (m_interestTriedNum >= m_interestTriedMax)
+  {
+    m_error = "All Interests timeout";
+    m_hasError = true;
+    this->stop();
+  } else
+  {
+    sendQuery();
+  }
+
+}
+
+void
+NameDig::run()
+{
+
+  this->sendQuery();
+
+  try
+  {
+    m_face.processEvents();
+  }
+  catch (std::exception& e)
+  {
+    m_error = e.what();
+    m_hasError = true;
+    this->stop();
+  }
+
+}
+
+} /* namespace ndns */
+} /* namespace ndn */