[svn] commit: r207 - in /branches/f2f200910/src/bin/parkinglot: common.cc common.h main.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Oct 30 00:04:12 UTC 2009
Author: each
Date: Fri Oct 30 00:04:11 2009
New Revision: 207
Log: (empty)
Modified:
branches/f2f200910/src/bin/parkinglot/common.cc
branches/f2f200910/src/bin/parkinglot/common.h
branches/f2f200910/src/bin/parkinglot/main.cc
Modified: branches/f2f200910/src/bin/parkinglot/common.cc
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/common.cc (original)
+++ branches/f2f200910/src/bin/parkinglot/common.cc Fri Oct 30 00:04:11 2009
@@ -14,20 +14,3 @@
// $Id$
-#include <iostream>
-#include <stdarg.h>
-
-#include "common.h"
-
-extern const std::string PROGRAM;
-
-void
-fatal(const char* format, ...) {
- va_list args;
- fprintf(stderr, "%s: fatal: ", PROGRAM);
- va_start(args, format);
- vfprintf(stderr, format, args);
- va_end(args);
- putc('\n', stderr);
- exit(1);
-}
Modified: branches/f2f200910/src/bin/parkinglot/common.h
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/common.h (original)
+++ branches/f2f200910/src/bin/parkinglot/common.h Fri Oct 30 00:04:11 2009
@@ -14,5 +14,17 @@
// $Id$
-void
-fatal(const char* format, ...);
+#include <stdlib.h>
+
+class FatalError : public std::exception {
+ public:
+ FatalError(std::string m = "fatal error") {
+ msg = m;
+ std::cerr << msg << std::endl;
+ exit(1);
+ }
+ ~FatalError() throw() {}
+ const char* what() const throw() { return msg.c_str(); }
+ private:
+ std::string msg;
+};
Modified: branches/f2f200910/src/bin/parkinglot/main.cc
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/main.cc (original)
+++ branches/f2f200910/src/bin/parkinglot/main.cc Fri Oct 30 00:04:11 2009
@@ -17,6 +17,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
+#include <stdlib.h>
#include <set>
#include <iostream>
@@ -28,25 +29,23 @@
#include "common.h"
-using std::string;
-using std::pair;
+using namespace std;
using namespace isc::dns;
-using isc::dns::Rdata::IN::A;
-using isc::dns::Rdata::IN::AAAA;
-using isc::dns::Rdata::Generic::NS;
+using namespace isc::dns::Rdata::IN;
+using namespace isc::dns::Rdata::Generic;
const string PROGRAM = "parkinglot";
const int DNSPORT = 53;
static void
usage() {
- std::cerr << "Usage: parkinglot [-p port]" << std::endl;
+ cerr << "Usage: parkinglot [-p port]" << endl;
exit(1);
}
typedef pair<string, void*> Record;
-typedef std::set<string> ZoneSet;
+typedef set<string> ZoneSet;
ZoneSet zones;
static void
@@ -67,7 +66,7 @@
start_server(int port) {
int s = socket(AF_INET, SOCK_DGRAM, 0);
if (s < 0)
- fatal("failed to open socket");
+ throw FatalError("failed to open socket");
struct sockaddr_in sin;
sin.sin_family = AF_INET;
@@ -85,21 +84,26 @@
static void
run_server(int s) {
+ Rdata::RdataPtr ns1, ns2, ns3;
+ ns1 = Rdata::RdataPtr(new NS("ns1.parking.com"));
+ ns2 = Rdata::RdataPtr(new NS("ns2.parking.com"));
+ ns3 = Rdata::RdataPtr(new NS("ns3.parking.com"));
+
+ struct sockaddr_storage ss;
+ socklen_t sa_len = sizeof(ss);
+ struct sockaddr* sa = static_cast<struct sockaddr*>((void*)&ss);
+
while (true) {
Message msg;
- struct sockaddr_storage ss;
- socklen_t sa_len = sizeof(ss);
- struct sockaddr* sa = static_cast<struct sockaddr*>((void*)&ss);
- int cc = msg.getBuffer().recvFrom(s, sa, &sa_len);
- if (cc > 0) {
+ if (msg.getBuffer().recvFrom(s, sa, &sa_len) > 0) {
try {
msg.fromWire();
} catch (...) {
- std::cerr << "parse failed" << std::endl;
+ cerr << "parse failed" << endl;
continue;
}
- std::cout << "received a message:\n" << msg.toText() << std::endl;
+ cout << "received a message:\n" << msg.toText() << endl;
if (msg.getSection(SECTION_QUESTION).size() != 1)
continue;
@@ -110,11 +114,6 @@
RRsetPtr query = msg.getSection(SECTION_QUESTION)[0];
if (zones.find(query->getName().toText(true)) != zones.end()) {
- Rdata::RdataPtr ns1, ns2, ns3;
- ns1 = Rdata::RdataPtr(new NS("ns1.parking.com"));
- ns2 = Rdata::RdataPtr(new NS("ns2.parking.com"));
- ns3 = Rdata::RdataPtr(new NS("ns3.parking.com"));
-
msg.setRcode(Message::RCODE_NOERROR);
RRset* nsset = new RRset(query->getName(), query->getClass(),
RRType::NS, TTL(3600));
@@ -123,24 +122,22 @@
nsset->addRdata(ns2);
nsset->addRdata(ns3);
- section_t section;
if (query->getType() == RRType::NS)
- section = SECTION_ANSWER;
+ msg.addRRset(SECTION_ANSWER, RRsetPtr(nsset));
else
- section = SECTION_AUTHORITY;
-
- msg.addRRset(section, RRsetPtr(nsset));
+ msg.addRRset(SECTION_AUTHORITY, RRsetPtr(nsset));
if (query->getType() == RRType::A) {
- msg.addRR(SECTION_ANSWER,
- RR(query->getName(), query->getClass(),
- RRType::A, TTL(3600),
- Rdata::RdataPtr(new A("127.0.0.1"))));
+ RR arr(query->getName(), query->getClass(),
+ RRType::A, TTL(3600),
+ Rdata::RdataPtr(new A("127.0.0.1")));
+
+ msg.addRR(SECTION_ANSWER, arr);
} else if (query->getType() == RRType::AAAA) {
- msg.addRR(SECTION_ANSWER,
- RR(query->getName(), query->getClass(),
- RRType::AAAA, TTL(3600),
- Rdata::RdataPtr(new AAAA("::1"))));
+ RR aaaarr(query->getName(), query->getClass(),
+ RRType::AAAA, TTL(3600),
+ Rdata::RdataPtr(new AAAA("::1")));
+ msg.addRR(SECTION_ANSWER, aaaarr);
}
} else {
msg.setRcode(Message::RCODE_NXDOMAIN);
@@ -148,9 +145,9 @@
}
msg.toWire();
- std::cout << "sending a response (" <<
+ cout << "sending a response (" <<
boost::lexical_cast<string>(msg.getBuffer().getSize())
- << " bytes):\n" << msg.toText() << std::endl;
+ << " bytes):\n" << msg.toText() << endl;
msg.getBuffer().sendTo(s, *sa, sa_len);
}
}
@@ -183,8 +180,11 @@
// start the server
int s = start_server(port);
+ if (s < 0)
+ throw FatalError("unable to start the server");
// main server loop
+ cout << "server running" << endl;
run_server(s);
return (0);
More information about the bind10-changes
mailing list