| /* |
| * 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 */ |