blob: 0d4588da06547c7f36b6e3bdc0c6c0d7ba66a2df [file] [log] [blame] [edit]
/*
* rr-mgr.cpp
*
* Created on: 23 Jul, 2014
* Author: shock
*/
#include "rr-mgr.hpp"
namespace ndn {
namespace ndns {
RRMgr::RRMgr(Zone& zone, Query& query, Response& response)
: m_count(0U)
, m_zone(zone)
, m_query(query)
, m_response(response)
{
}
RRMgr::~RRMgr()
{
// TODO Auto-generated destructor stub
}
int RRMgr::count()
{
std::string sql;
sql = "SELECT count(*) FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
sql += " WHERE rrsets.zone_id=";
sql += std::to_string(m_zone.getId());
sql += " AND ";
sql += "rrsets.type=\'";
sql += RR::toString(m_query.getRrType());
sql += "\' AND ";
sql += "rrsets.label LIKE\'";
sql += m_query.getRrLabel().toUri() + "/%\'";
std::cout << "sql=" << sql << std::endl;
this->execute(sql, static_callback_countRr, this);
if (this->getStatus() == DBMgr::DBError) {
return -1;
}
return this->m_count;
}
int RRMgr::callback_countRr(int argc, char **argv, char **azColName)
{
this->addResultNum();
std::cout << this->getResultNum() << "th result: " << "count=" << argv[0]
<< std::endl;
m_count = std::atoi(argv[0]);
return 0;
}
int RRMgr::lookup()
{
std::string sql;
sql =
"SELECT rrs.ttl, rrs.rrdata, rrs.id FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
sql += " WHERE rrsets.zone_id=";
sql += std::to_string(m_zone.getId());
sql += " AND ";
sql += "rrsets.type=\'";
sql += RR::toString(m_query.getRrType());
sql += "\' AND ";
sql += "rrsets.label=\'";
sql += m_query.getRrLabel().toUri() + "\'";
sql += " ORDER BY rrs.id";
std::cout << "sql=" << sql << std::endl;
this->execute(sql, static_callback_getRr, this);
if (this->getStatus() == DBMgr::DBError) {
return -1;
}
//m_response.setQueryName(m_query.getAuthorityZone());
return 0;
}
int RRMgr::callback_getRr(int argc, char **argv, char **azColName)
{
this->addResultNum();
if (argc < 1) {
this->setErr(
"No RRType=" + RR::toString(m_query.getRrType()) + " and label="
+ m_query.getRrLabel().toUri() + " and zone="
+ m_zone.getAuthorizedName().toUri());
return 0;
}
std::cout << this->getResultNum() << "th result: " << "id=" << argv[2]
<< " ttl=" << argv[0] << " rrdata=" << argv[1] << std::endl;
m_response.setFreshness(time::milliseconds(std::atoi(argv[0])));
m_response.addRr(std::atoi(argv[2]), argv[1]);
//std::cout<<"after add a Rr: current size="<<m_response.getRrs().size()<<std::endl;
//m_response.setFreshness(time::milliseconds(std::atoi(argv[0])));
return 0;
}
} //namespace ndnsn
} /* namespace ndn */