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