blob: 7a967318cdda846d4de387d4360bd747face8148 [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()
shockjianga5ae48c2014-07-27 23:21:41 -070026 : m_queryType (QUERY_DNS)
27 , m_interestLifetime(time::milliseconds(4000))
28 , m_rrType(RR::NS)
shockjiange9c1ab92014-07-21 12:02:52 -070029{
shockjiange9c1ab92014-07-21 12:02:52 -070030}
31
32Query::~Query() {
shockjiange9c1ab92014-07-21 12:02:52 -070033}
34
35
shockjianga5ae48c2014-07-27 23:21:41 -070036bool
37Query::fromInterest(const Name &name, const Interest &interest)
38{
39 return fromInterest(interest);
40}
41
42bool
43Query::fromInterest(const Interest& interest)
shockjiange9c1ab92014-07-21 12:02:52 -070044{
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070045 Name interestName;
46 interestName = interest.getName();
shockjiange9c1ab92014-07-21 12:02:52 -070047
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070048 int qtflag = -1;
49 size_t len = interestName.size();
50 for (size_t i=0; i<len; i++)
shockjiange9c1ab92014-07-21 12:02:52 -070051 {
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070052 std::string comp = interestName.get(i).toUri();
53 if (comp == toString(QUERY_DNS) || comp == toString(QUERY_DNS_R))
54 {
55 qtflag = i;
56 break;
57 }
shockjiange9c1ab92014-07-21 12:02:52 -070058 }//for
59
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070060 if (qtflag == -1)
shockjiange9c1ab92014-07-21 12:02:52 -070061 {
shockjianga5ae48c2014-07-27 23:21:41 -070062 std::cerr << "There is no QueryType in the Interest Name: "<< interestName << std::endl;
63 return false;
shockjiange9c1ab92014-07-21 12:02:52 -070064 }
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070065 this->m_queryType = toQueryType(interestName.get(qtflag).toUri());
shockjianga5ae48c2014-07-27 23:21:41 -070066 this->m_rrType = RR::toRRType(interestName.get(len-1).toUri());
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070067 this->m_authorityZone = interestName.getPrefix(qtflag); //the DNS/DNS-R is not included
68 this->m_interestLifetime = interest.getInterestLifetime();
shockjianga5ae48c2014-07-27 23:21:41 -070069 this->m_rrLabel = interestName.getSubName(qtflag+1, len-qtflag-2);
70 return true;
shockjiange9c1ab92014-07-21 12:02:52 -070071}
72
73Interest
shockjianga5ae48c2014-07-27 23:21:41 -070074Query::toInterest() const
shockjiange9c1ab92014-07-21 12:02:52 -070075{
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070076 Name name = this->m_authorityZone;
77 name.append(toString(this->m_queryType));
78 name.append(this->m_rrLabel);
shockjianga5ae48c2014-07-27 23:21:41 -070079 name.append(RR::toString(this->m_rrType));
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070080 Selectors selector;
81 //selector.setMustBeFresh(true);
shockjiange9c1ab92014-07-21 12:02:52 -070082
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070083 Interest interest = Interest(name, selector, -1, this->m_interestLifetime);
84 return interest;
shockjiange9c1ab92014-07-21 12:02:52 -070085}
86
Alexander Afanasyev6e3d1ac2014-07-21 12:47:49 -070087} // namespace ndns
88} // namespace ndn