blob: 51e0e3b7b40fe96f560cdd345a512b59e6b05be8 [file] [log] [blame]
shockjianga5ae48c2014-07-27 23:21:41 -07001/*
2 * rr-mgr.cpp
3 *
4 * Created on: 23 Jul, 2014
5 * Author: shock
6 */
7
8#include "rr-mgr.hpp"
9
10namespace ndn {
11namespace ndns{
12RRMgr::RRMgr(Zone& zone, Query& query, Response& response)
13 : m_count(0U)
14 , m_zone(zone)
15 , m_query(query)
16 , m_response(response)
17{
18
19}
20
21
22RRMgr::~RRMgr() {
23 // TODO Auto-generated destructor stub
24}
25
26
27
28int
29RRMgr::count()
30{
31 std::string sql;
32 sql = "SELECT count(*) FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
33 sql += " WHERE rrsets.zone_id=";
34 sql += std::to_string(m_zone.getId());
35 sql += " AND ";
36 sql += "rrsets.type=\'";
37 sql += RR::toString(m_query.getRrType());
38 sql += "\' AND ";
39 sql += "rrsets.label LIKE\'";
40 sql += m_query.getRrLabel().toUri()+"/%\'";
41
42 std::cout<<"sql="<<sql<<std::endl;
43 this->execute(sql, static_callback_countRr, this);
44
45 if (this->getStatus() == DBMgr::DBError)
46 {
47 return -1;
48 }
49
50 return this->m_count;
51}
52int
53RRMgr::callback_countRr(int argc, char **argv, char **azColName)
54{
55 this->addResultNum();
56
57 std::cout<<this->getResultNum()<<"th result: "<<"count="<<argv[0]<<std::endl;
58 m_count = std::atoi(argv[0]);
59 return 0;
60}
61
62int RRMgr::lookup()
63{
64 std::string sql;
65
66 sql = "SELECT rrs.ttl, rrs.rrdata, rrs.id FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
67 sql += " WHERE rrsets.zone_id=";
68 sql += std::to_string(m_zone.getId());
69 sql += " AND ";
70 sql += "rrsets.type=\'";
71 sql += RR::toString(m_query.getRrType());
72 sql += "\' AND ";
73 sql += "rrsets.label=\'";
74 sql += m_query.getRrLabel().toUri()+"\'";
75 sql += " ORDER BY rrs.id";
76
77 std::cout<<"sql="<<sql<<std::endl;
78 this->execute(sql, static_callback_getRr, this);
79
80 if (this->getStatus() == DBMgr::DBError)
81 {
82 return -1;
83 }
84
85 //m_response.setQueryName(m_query.getAuthorityZone());
86 return 0;
87}
88
89int RRMgr::callback_getRr(int argc, char **argv, char **azColName)
90{
91 this->addResultNum();
92 if (argc < 1)
93 {
94 this->setErr("No RRType="+RR::toString(m_query.getRrType())+
95 " and label="+m_query.getRrLabel().toUri()+
96 " and zone="+m_zone.getAuthorizedName().toUri());
97 return 0;
98 }
99
100 std::cout<<this->getResultNum()<<"th result: "<<"id="<<argv[2]
101 <<" ttl="<<argv[0]<<" rrdata="<<argv[1]<<std::endl;
102
103 m_response.setFreshness(time::milliseconds(std::atoi(argv[0])));
104
105 m_response.addRr(std::atoi(argv[2]), argv[1]);
106 //std::cout<<"after add a Rr: current size="<<m_response.getRrs().size()<<std::endl;
107 //m_response.setFreshness(time::milliseconds(std::atoi(argv[0])));
108 return 0;
109}
110
111}//namespace ndnsn
112} /* namespace ndn */