basic framework, waiting for Alex's comments
diff --git a/src/query.h b/src/query.h
new file mode 100644
index 0000000..001efa0
--- /dev/null
+++ b/src/query.h
@@ -0,0 +1,152 @@
+/*
+ * query.h
+ *
+ *  Created on: 18 Jul, 2014
+ *      Author: shock
+ */
+
+#ifndef QUERY_H_
+#define QUERY_H_
+
+#include <ndn-cxx/name.hpp>
+#include <rr.h>
+
+using namespace std;
+
+namespace ndn {
+
+
+enum class QueryType
+{
+	DNS,
+	DNS_R,
+};
+
+static const string
+toString(QueryType qType) const
+{
+	string label;
+	switch (qType)
+	{
+		case QueryType::DNS:
+			label = "DNS";
+			break;
+		case QueryType::DNS_R:
+			label = "DNS-R";
+			break;
+		default:
+			label = "Default";
+			break;
+	}
+	return label;
+
+}
+
+static const QueryType
+toQueryType(string str)
+{
+	QueryType atype;
+	switch (str)
+	{
+		case "DNS":
+			atype = QueryType::DNS;
+			break;
+		case "DNS-R":
+			atype = QueryType::DNS_R;
+			break;
+		defalut:
+			atype = QueryType::DNS;
+			break;
+	}
+	return atype;
+}
+
+
+
+
+class Query {
+public:
+	Query();
+
+	virtual ~Query();
+
+
+
+	const Name& getAuthorityZone() const {
+		return m_authorityZone;
+	}
+
+	void setAuthorityZone(const Name& authorityZone) {
+		m_authorityZone = authorityZone;
+	}
+
+	time::milliseconds getInterestLifetime() const {
+		return m_interestLifetime;
+	}
+
+	void setInterestLifetime(time::milliseconds interestLifetime) {
+		m_interestLifetime = interestLifetime;
+	}
+
+	enum QueryType getQueryType() const {
+		return m_queryType;
+	}
+
+	void setQueryType(enum QueryType queryType) {
+		m_queryType = queryType;
+	}
+
+	const Name& getRrLabel() const {
+		return m_rrLabel;
+	}
+
+	void setRrLabel(const Name& rrLabel) {
+		m_rrLabel = rrLabel;
+	}
+
+	const RRType& getRrType() const {
+		return m_rrType;
+	}
+
+	void setRrType(const RRType& rrType) {
+		m_rrType = rrType;
+	}
+
+private:
+template<bool T>
+size_t
+wireEncode(EncodingImpl<T> & block) const;
+
+public:
+
+const Block&
+wireEncode() const;
+
+void
+wireDecode(const Block& wire);
+
+
+Interest
+toWire() const;
+
+void
+fromWire(const Name &name, const Interest& interest);
+
+
+
+
+
+public:
+	Name m_authorityZone;
+	enum QueryType m_queryType;
+	time::milliseconds m_interestLifetime;
+	Name m_rrLabel;
+	enum RRType m_rrType;
+
+	mutable Block m_wire;
+	//bool hasWire;
+};
+
+} /* namespace ndn */
+
+#endif /* QUERY_H_ */