blob: 756de40940d443dbf7e109507d00d8faf7b14d22 [file] [log] [blame]
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2014, Regents of the University of California.
shockjiange9c1ab92014-07-21 12:02:52 -07004 *
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -07005 * This file is part of NDNS (Named Data Networking Domain Name Service).
6 * See AUTHORS.md for complete list of NDNS authors and contributors.
7 *
8 * NDNS is free software: you can redistribute it and/or modify it under the terms
9 * of the GNU General Public License as published by the Free Software Foundation,
10 * either version 3 of the License, or (at your option) any later version.
11 *
12 * NDNS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * NDNS, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
shockjiange9c1ab92014-07-21 12:02:52 -070018 */
19
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070020#include "query.hpp"
shockjiange9c1ab92014-07-21 12:02:52 -070021
22namespace ndn {
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070023namespace ndns {
shockjiange9c1ab92014-07-21 12:02:52 -070024
25Query::Query()
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070026 : m_interestLifetime(time::milliseconds(4000))
shockjiange9c1ab92014-07-21 12:02:52 -070027{
shockjiange9c1ab92014-07-21 12:02:52 -070028}
29
30Query::~Query() {
shockjiange9c1ab92014-07-21 12:02:52 -070031}
32
33
34void
35Query::fromWire(const Name &name, const Interest &interest)
36{
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070037 Name interestName;
38 interestName = interest.getName();
shockjiange9c1ab92014-07-21 12:02:52 -070039
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070040 int qtflag = -1;
41 size_t len = interestName.size();
42 for (size_t i=0; i<len; i++)
shockjiange9c1ab92014-07-21 12:02:52 -070043 {
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070044 std::string comp = interestName.get(i).toUri();
45 if (comp == toString(QUERY_DNS) || comp == toString(QUERY_DNS_R))
46 {
47 qtflag = i;
48 break;
49 }
shockjiange9c1ab92014-07-21 12:02:52 -070050 }//for
51
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070052 if (qtflag == -1)
shockjiange9c1ab92014-07-21 12:02:52 -070053 {
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070054 std::cerr << "There is no QueryType in the Interest Name: " << interestName << std::endl;
55 return;
shockjiange9c1ab92014-07-21 12:02:52 -070056 }
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070057 this->m_queryType = toQueryType(interestName.get(qtflag).toUri());
58 this->m_rrType = toRRType(interestName.get(len-1).toUri());
59 this->m_authorityZone = interestName.getPrefix(qtflag); //the DNS/DNS-R is not included
60 this->m_interestLifetime = interest.getInterestLifetime();
shockjiange9c1ab92014-07-21 12:02:52 -070061
62}
63
64template<bool T>
65size_t
66Query::wireEncode(EncodingImpl<T>& block) const
67{
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070068 size_t totalLength = 0;
69 totalLength += 0;
shockjiange9c1ab92014-07-21 12:02:52 -070070
71
72 size_t totalLength = prependByteArrayBlock(block, tlv::Bytes,
73 m_key.get().buf(), m_key.get().size());
74 totalLength += m_keyName.wireEncode(block);
75 totalLength += block.prependVarNumber(totalLength);
76 totalLength += block.prependVarNumber(tlv::PublicKey);
77
78 return totalLength;
79}
80
81Interest
82Query::toWire() const
83{
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070084 Name name = this->m_authorityZone;
85 name.append(toString(this->m_queryType));
86 name.append(this->m_rrLabel);
87 name.append(toString(this->m_rrType));
88 Selectors selector;
89 //selector.setMustBeFresh(true);
shockjiange9c1ab92014-07-21 12:02:52 -070090
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070091 Interest interest = Interest(name, selector, -1, this->m_interestLifetime);
92 return interest;
shockjiange9c1ab92014-07-21 12:02:52 -070093}
94
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070095} // namespace ndns
96} // namespace ndn