[svn] commit: r285 - in /branches/f2f200910/src/bin/parkinglot: ccsession.cc ccsession.h main.cc parkinglot.cc parkinglot.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Nov 2 11:34:40 UTC 2009
Author: jelte
Date: Mon Nov 2 11:34:40 2009
New Revision: 285
Log:
ask config manager for zones on startup instead of using a hardcoded default list
Modified:
branches/f2f200910/src/bin/parkinglot/ccsession.cc
branches/f2f200910/src/bin/parkinglot/ccsession.h
branches/f2f200910/src/bin/parkinglot/main.cc
branches/f2f200910/src/bin/parkinglot/parkinglot.cc
branches/f2f200910/src/bin/parkinglot/parkinglot.h
Modified: branches/f2f200910/src/bin/parkinglot/ccsession.cc
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/ccsession.cc (original)
+++ branches/f2f200910/src/bin/parkinglot/ccsession.cc Mon Nov 2 11:34:40 2009
@@ -20,6 +20,9 @@
#include <sys/time.h>
#include <iostream>
+#include <sstream>
+
+#include <boost/foreach.hpp>
#include <cc/cpp/data.h>
#include <cc/cpp/session.h>
@@ -37,9 +40,10 @@
{
try {
session_.establish();
- session_.subscribe("ParkingLot");
- session_.subscribe("Boss");
- session_.subscribe("statistics");
+ session_.subscribe("ParkingLot", "*", "meonly");
+ session_.subscribe("Boss", "*", "meonly");
+ session_.subscribe("ConfigManager", "*", "meonly");
+ session_.subscribe("statistics", "*", "meonly");
} catch (...) {
throw std::runtime_error("SessionManager: failed to open sessions");
}
@@ -83,3 +87,19 @@
return std::pair<string, string>("unknown", "");
}
+
+std::vector<std::string>
+CommandSession::getZones() {
+ ElementPtr cmd, result, env;
+ std::vector<std::string> zone_names;
+ std::stringstream cmd_string;
+ cmd_string << "{ \"command\": [ \"zone\", \"list\" ] }";
+ cmd = Element::create_from_string(cmd_string);
+ sleep(1);
+ session_.group_sendmsg(cmd, "ConfigManager");
+ session_.group_recvmsg(env, result, false);
+ BOOST_FOREACH(ElementPtr zone_name, result->get("result")->list_value()) {
+ zone_names.push_back(zone_name->string_value());
+ }
+ return zone_names;
+}
Modified: branches/f2f200910/src/bin/parkinglot/ccsession.h
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/ccsession.h (original)
+++ branches/f2f200910/src/bin/parkinglot/ccsession.h Mon Nov 2 11:34:40 2009
@@ -26,6 +26,7 @@
CommandSession();
int getSocket();
std::pair<std::string, std::string> getCommand(int counter);
+ std::vector<std::string> getZones();
private:
ISC::CC::Session session_;
};
Modified: branches/f2f200910/src/bin/parkinglot/main.cc
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/main.cc (original)
+++ branches/f2f200910/src/bin/parkinglot/main.cc Mon Nov 2 11:34:40 2009
@@ -22,6 +22,8 @@
#include <set>
#include <iostream>
+
+#include <boost/foreach.hpp>
#include <dns/buffer.h>
#include <dns/name.h>
@@ -76,6 +78,9 @@
fd_set fds;
int ps = plot.getSocket();
int ss = cs.getSocket();
+ BOOST_FOREACH(std::string zone, cs.getZones()) {
+ plot.serve(zone);
+ }
int nfds = max(ps, ss) + 1;
int counter = 0;
Modified: branches/f2f200910/src/bin/parkinglot/parkinglot.cc
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/parkinglot.cc (original)
+++ branches/f2f200910/src/bin/parkinglot/parkinglot.cc Mon Nov 2 11:34:40 2009
@@ -37,17 +37,7 @@
using namespace isc::dns::Rdata::IN;
using namespace isc::dns::Rdata::Generic;
-static void init_zones(ZoneSet& zones) {
- zones.serve("jinmei.org");
- zones.serve("nuthaven.org");
- zones.serve("isc.org");
- zones.serve("sisotowbell.org");
- zones.serve("flame.org");
-}
-
ParkingLot::ParkingLot(int port) {
- init_zones(zones);
-
ns1 = Rdata::RdataPtr(new NS("ns1.parking.example"));
ns2 = Rdata::RdataPtr(new NS("ns2.parking.example"));
ns3 = Rdata::RdataPtr(new NS("ns3.parking.example"));
@@ -196,9 +186,14 @@
void
ParkingLot::command(pair<string,string> cmd) {
if (cmd.first == "addzone")
- zones.serve(cmd.second);
+ serve(cmd.second);
else if (cmd.first == "delzone")
zones.forget(cmd.second);
else if (cmd.first == "shutdown")
exit(0);
}
+
+void
+ParkingLot::serve(std::string zone_name) {
+ zones.serve(zone_name);
+}
Modified: branches/f2f200910/src/bin/parkinglot/parkinglot.h
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/parkinglot.h (original)
+++ branches/f2f200910/src/bin/parkinglot/parkinglot.h Mon Nov 2 11:34:40 2009
@@ -26,7 +26,8 @@
int getSocket() { return (sock); }
void processMessage();
void command(std::pair<std::string,std::string>);
-
+ void serve(std::string zone_name);
+
private:
isc::dns::Rdata::RdataPtr ns1, ns2, ns3, a, aaaa, soa;
ZoneSet zones;
More information about the bind10-changes
mailing list