basic framework, waiting for Alex's comments
diff --git a/src/query.cpp b/src/query.cpp
new file mode 100644
index 0000000..861d1c8
--- /dev/null
+++ b/src/query.cpp
@@ -0,0 +1,85 @@
+/*
+ * query.cpp
+ *
+ *  Created on: 18 Jul, 2014
+ *      Author: shock
+ */
+
+#include "query.h"
+
+namespace ndn {
+
+Query::Query()
+: m_interestLifetime(time::milliseconds(4000))
+{
+	// TODO Auto-generated constructor stub
+
+}
+
+Query::~Query() {
+	// TODO Auto-generated destructor stub
+}
+
+
+void
+Query::fromWire(const Name &name, const Interest &interest)
+{
+    Name interestName;
+    interestName = interest.getName();
+
+    int qtflag = -1;
+    size_t len = interestName.size();
+    for (size_t i=0; i<len; i++)
+    {
+    	string comp = interestName.get(i).toEscapedString();
+    	if (comp == ndn::toString(QueryType::DNS) || comp == ndn::toString(QueryType::DNS_R))
+    	{
+    		qtflag = i;
+    		break;
+    	}
+    }//for
+
+    if (qtflag == -1)
+    {
+    	cerr<<"There is no QueryType in the Interest Name: "<<interestName<<endl;
+    	return;
+    }
+    this->m_queryType = ndn::toQueryType(interestName.get(qtflag).toEscapedString());
+    this->m_rrType = ndn::toRRType(interestName.get(len-1).toEscapedString());
+    this->m_authorityZone = interestName.getPrefix(qtflag); //the DNS/DNS-R is not included
+    this->m_interestLifetime = interest.getInterestLifetime();
+
+}
+
+template<bool T>
+size_t
+Query::wireEncode(EncodingImpl<T>& block) const
+{
+	size_t totalLength = 0;
+	totalLength += 0;
+
+
+  size_t totalLength = prependByteArrayBlock(block, tlv::Bytes,
+                                             m_key.get().buf(), m_key.get().size());
+  totalLength += m_keyName.wireEncode(block);
+  totalLength += block.prependVarNumber(totalLength);
+  totalLength += block.prependVarNumber(tlv::PublicKey);
+
+  return totalLength;
+}
+
+Interest
+Query::toWire() const
+{
+	Name name = this->m_authorityZone;
+	name.append(ndn::toString(this->m_queryType));
+	name.append(this->m_rrLabel);
+	name.append(ndn::toString(this->m_rrType));
+	Selectors selector;
+	//selector.setMustBeFresh(true);
+
+	Interest interest = Interest(name, selector, -1, this->m_interestLifetime);
+	return interest;
+}
+
+} /* namespace ndn */