src/base/Makefile
src/clients/Makefile
src/comm/Makefile
+ src/dns/Makefile
src/esi/Makefile
src/eui/Makefile
src/format/Makefile
heap.c \
iso3307.c \
radix.c \
- rfc1035.c \
rfc1123.c \
- rfc2671.c \
- rfc3596.c \
$(SNPRINTFSOURCE) \
Splay.cc \
stub_memaccount.c \
util.c \
xusleep.c
-TESTS += tests/testRFC1035 tests/testRFC1738
+TESTS += tests/testRFC1738
-check_PROGRAMS += tests/testRFC1035 tests/testRFC1738
-
-tests_testRFC1035_SOURCES= \
- tests/testRFC1035.h \
- tests/testRFC1035.cc
-
-tests_testRFC1035_LDADD= \
- $(SQUID_CPPUNIT_LA) $(SQUID_CPPUNIT_LIBS) \
- $(top_builddir)/lib/libmiscencoding.la \
- $(top_builddir)/lib/libmiscutil.la \
- $(COMPAT_LIB)
-
-tests_testRFC1035_LDFLAGS = $(LIBADD_DL)
+check_PROGRAMS += tests/testRFC1738
tests_testRFC1738_SOURCES= \
tests/testRFC1738.h \
#include "base/RefCount.h"
#include "cbdata.h"
+#include "dns/forward.h"
#include "helper/forward.h"
#include "ipcache.h"
class ACLChecklist;
class ClientHttpRequest;
-class DnsLookupDetails;
class ErrorState;
class ClientRequestContext : public RefCountable
bool httpStateIsValid();
void hostHeaderVerify();
- void hostHeaderIpVerify(const ipcache_addrs* ia, const DnsLookupDetails &dns);
+ void hostHeaderIpVerify(const ipcache_addrs* ia, const Dns::LookupDetails &dns);
void hostHeaderVerifyFailed(const char *A, const char *B);
void clientAccessCheck();
void clientAccessCheck2();
#include "acl/AclSizeLimit.h"
#include "acl/FilledChecklist.h"
#include "client_side.h"
-#include "DnsLookupDetails.h"
+#include "dns/LookupDetails.h"
#include "err_detail_type.h"
#include "globals.h"
#include "gopher.h"
}
void
-HttpRequest::recordLookup(const DnsLookupDetails &dns)
+HttpRequest::recordLookup(const Dns::LookupDetails &dns)
{
if (dns.wait >= 0) { // known delay
if (dnsWait >= 0) // have recorded DNS wait before
#include "base/CbcPointer.h"
#include "Debug.h"
+#include "dns/forward.h"
#include "err_type.h"
#include "HierarchyLogEntry.h"
#include "http/RequestMethod.h"
void httpRequestPack(void *obj, Packer *p);
class HttpHdrRange;
-class DnsLookupDetails;
class HttpRequest: public HttpMsg
{
Adaptation::Icap::History::Pointer icapHistory() const;
#endif
- void recordLookup(const DnsLookupDetails &detail);
+ void recordLookup(const Dns::LookupDetails &detail);
/// sets error detail if no earlier detail was available
void detailError(err_type aType, int aDetail);
AUTOMAKE_OPTIONS = subdir-objects
DNSSOURCE = \
- dns_internal.cc \
- SquidDns.h \
- DnsLookupDetails.h \
- DnsLookupDetails.cc
+ dns_internal.cc
SBUF_SOURCE= \
base/CharacterSet.h \
LoadableModules.h \
LoadableModules.cc
-SUBDIRS = mem base anyp helper ftp parser comm eui acl format clients servers fs repl
-DIST_SUBDIRS = mem base anyp helper ftp parser comm eui acl format clients servers fs repl
+SUBDIRS = mem base anyp helper dns ftp parser comm eui acl format clients servers fs repl
+DIST_SUBDIRS = mem base anyp helper dns ftp parser comm eui acl format clients servers fs repl
if ENABLE_AUTH
SUBDIRS += auth
helper/libhelper.la \
http/libsquid-http.la \
parser/libsquid-parser.la \
+ dns/libdns.la \
base/libbase.la \
libsquid.la \
ip/libip.la \
tests/testBoilerplate \
tests/testCacheManager \
tests/testDiskIO \
+ tests/testDns \
tests/testEvent \
tests/testEventLoop \
tests/test_http_range \
acl/libacls.la \
acl/libstate.la \
acl/libapi.la \
+ dns/libdns.la \
base/libbase.la \
ip/libip.la \
fs/libfs.la \
parser/libsquid-parser.la \
SquidConfig.o \
CommCalls.o \
- DnsLookupDetails.o \
ident/libident.la \
acl/libacls.la \
acl/libstate.la \
mgr/libmgr.la \
$(SSL_LIBS) \
ipc/libipc.la \
+ dns/libdns.la \
base/libbase.la \
mem/libmem.la \
$(top_builddir)/lib/libmisccontainers.la \
$(SWAP_TEST_DS) \
$(SQUID_CPPUNIT_LA)
-## Tests of the Even module.
+tests_testDns_SOURCES= \
+ tests/testRFC1035.cc \
+ tests/testRFC1035.h
+nodist_tests_testDns_SOURCES= \
+ tests/stub_debug.cc \
+ tests/stub_SBuf.cc \
+ tests/stub_tools.cc
+tests_testDns_LDADD= \
+ dns/libdns.la \
+ base/libbase.la \
+ $(top_builddir)/lib/libmiscutil.la \
+ $(COMPAT_LIB) \
+ $(XTRA_LIBS) \
+ $(SQUID_CPPUNIT_LA) \
+ $(SQUID_CPPUNIT_LIBS)
+tests_testDns_LDFLAGS= $(LIBADD_DL)
+
tests_testEvent_SOURCES = \
AccessLogEntry.cc \
BodyPipe.cc \
acl/libacls.la \
acl/libstate.la \
acl/libapi.la \
+ dns/libdns.la \
base/libbase.la \
ip/libip.la \
fs/libfs.la \
acl/libacls.la \
acl/libstate.la \
acl/libapi.la \
+ dns/libdns.la \
base/libbase.la \
ip/libip.la \
fs/libfs.la \
$(ESI_LIBS) \
$(SSL_LIBS) \
ipc/libipc.la \
+ dns/libdns.la \
base/libbase.la \
mgr/libmgr.la \
$(SNMP_LIBS) \
$(SSL_LIBS) \
ipc/libipc.la \
parser/libsquid-parser.la \
+ dns/libdns.la \
base/libbase.la \
mgr/libmgr.la \
anyp/libanyp.la \
acl/libacls.la \
acl/libstate.la \
acl/libapi.la \
+ dns/libdns.la \
base/libbase.la \
ip/libip.la \
fs/libfs.la \
$(SQUID_CPPUNIT_LIBS) \
$(SSLLIB) \
CommCalls.o \
- DnsLookupDetails.o \
$(COMPAT_LIB) \
$(XTRA_LIBS)
tests_testStore_LDFLAGS = $(LIBADD_DL)
http/libsquid-http.la \
parser/libsquid-parser.la \
CommCalls.o \
- DnsLookupDetails.o \
ident/libident.la \
acl/libacls.la \
acl/libstate.la \
ipc/libipc.la \
comm/libcomm.la \
anyp/libanyp.la \
+ dns/libdns.la \
base/libbase.la \
ip/libip.la \
mem/libmem.la \
eui/libeui.la \
acl/libstate.la \
acl/libapi.la \
+ dns/libdns.la \
base/libbase.la \
ip/libip.la \
fs/libfs.la \
}
void
-DestinationDomainLookup::LookupDone(const char *, const DnsLookupDetails &details, void *data)
+DestinationDomainLookup::LookupDone(const char *, const Dns::LookupDetails &details, void *data)
{
ACLFilledChecklist *checklist = Filled((ACLChecklist*)data);
checklist->markDestinationDomainChecked();
private:
static DestinationDomainLookup instance_;
- static void LookupDone(const char *, const DnsLookupDetails &, void *);
+ static void LookupDone(const char *, const Dns::LookupDetails &, void *);
};
/// \ingroup ACLAPI
}
void
-DestinationIPLookup::LookupDone(const ipcache_addrs *, const DnsLookupDetails &details, void *data)
+DestinationIPLookup::LookupDone(const ipcache_addrs *, const Dns::LookupDetails &details, void *data)
{
ACLFilledChecklist *checklist = Filled((ACLChecklist*)data);
checklist->request->flags.destinationIpLookedUp = true;
}
void
-SourceDomainLookup::LookupDone(const char *, const DnsLookupDetails &details, void *data)
+SourceDomainLookup::LookupDone(const char *, const Dns::LookupDetails &details, void *data)
{
ACLFilledChecklist *checklist = Filled((ACLChecklist*)data);
checklist->markSourceDomainChecked();
private:
static SourceDomainLookup instance_;
- static void LookupDone(const char *, const DnsLookupDetails &, void *);
+ static void LookupDone(const char *, const Dns::LookupDetails &, void *);
};
class ACLSourceDomain
}
static void
-icapLookupDnsResults(const ipcache_addrs *ia, const DnsLookupDetails &, void *data)
+icapLookupDnsResults(const ipcache_addrs *ia, const Dns::LookupDetails &, void *data)
{
Adaptation::Icap::Xaction *xa = static_cast<Adaptation::Icap::Xaction *>(data);
xa->dnsLookupDone(ia);
#endif /* FOLLOW_X_FORWARDED_FOR */
static void
-hostHeaderIpVerifyWrapper(const ipcache_addrs* ia, const DnsLookupDetails &dns, void *data)
+hostHeaderIpVerifyWrapper(const ipcache_addrs* ia, const Dns::LookupDetails &dns, void *data)
{
ClientRequestContext *c = static_cast<ClientRequestContext*>(data);
c->hostHeaderIpVerify(ia, dns);
}
void
-ClientRequestContext::hostHeaderIpVerify(const ipcache_addrs* ia, const DnsLookupDetails &dns)
+ClientRequestContext::hostHeaderIpVerify(const ipcache_addrs* ia, const Dns::LookupDetails &dns)
{
Comm::ConnectionPointer clientConn = http->getConn()->clientConnection;
/* DEBUG: section 78 DNS lookups */
#include "squid.h"
-#include "DnsLookupDetails.h"
-
-DnsLookupDetails::DnsLookupDetails(): wait(-1)
-{
-}
-
-DnsLookupDetails::DnsLookupDetails(const String &e, int w):
- error(e), wait(w)
-{
-}
+#include "dns/LookupDetails.h"
std::ostream &
-DnsLookupDetails::print(std::ostream &os) const
+Dns::LookupDetails::print(std::ostream &os) const
{
if (wait > 0)
os << "lookup_wait=" << wait;
/* DEBUG: section 78 DNS lookups */
-#ifndef SQUID_DNS_LOOKUP_DETAILS_H
-#define SQUID_DNS_LOOKUP_DETAILS_H
+#ifndef SQUID_DNS_LOOKUPDETAILS_H
+#define SQUID_DNS_LOOKUPDETAILS_H
#include "SquidString.h"
+namespace Dns
+{
+
/// encapsulates DNS lookup results
-class DnsLookupDetails
+class LookupDetails
{
public:
- DnsLookupDetails(); ///< no error, no lookup delay (i.e., no lookup)
- DnsLookupDetails(const String &error, int wait);
+ LookupDetails() : wait(-1) {} ///< no error, no lookup delay (i.e., no lookup)
+ LookupDetails(const String &anError, int aWait) : error(anError), wait(aWait) {}
std::ostream &print(std::ostream &os) const;
public:
- String error; ///< error message for unsuccessdul lookups; empty otherwise
+ String error; ///< error message for unsuccessful lookups; empty otherwise
int wait; ///< msecs spent waiting for the lookup (if any) or -1 (if none)
};
-inline
-std::ostream &operator << (std::ostream &os, const DnsLookupDetails &dns)
+} // namespace Dns
+
+inline std::ostream &
+operator <<(std::ostream &os, const Dns::LookupDetails &dns)
{
return dns.print(os);
}
-#endif
+#endif /* SQUID_DNS_LOOKUPDETAILS_H */
--- /dev/null
+## Copyright (C) 1996-2015 The Squid Software Foundation and contributors
+##
+## Squid software is distributed under GPLv2+ license and includes
+## contributions from numerous individuals and organizations.
+## Please see the COPYING and CONTRIBUTORS files for details.
+##
+
+include $(top_srcdir)/src/Common.am
+include $(top_srcdir)/src/TestHeaders.am
+
+AUTOMAKE_OPTIONS = subdir-objects
+
+noinst_LTLIBRARIES = libdns.la
+
+libdns_la_SOURCES = \
+ forward.h \
+ LookupDetails.cc \
+ LookupDetails.h \
+ rfc1035.cc \
+ rfc1035.h \
+ rfc2671.cc \
+ rfc2671.h \
+ rfc3596.cc \
+ rfc3596.h
* Please see the COPYING and CONTRIBUTORS files for details.
*/
-#ifndef SQUID_DNS_H
-#define SQUID_DNS_H
+#ifndef _SQUID_SRC_DNS_FORWARD_H
+#define _SQUID_SRC_DNS_FORWARD_H
namespace Ip
{
class Address;
}
+class rfc1035_rr;
+
+typedef void IDNSCB(void *, const rfc1035_rr *, int, const char *);
+
// generic DNS API
-void dnsInit(void);
-void dnsShutdown(void);
+namespace Dns
+{
+
+class LookupDetails;
+
+void Init(void);
+void Shutdown(void);
+
+} // namespace Dns
// internal DNS client API
void idnsALookup(const char *, IDNSCB *, void *);
void idnsPTRLookup(const Ip::Address &, IDNSCB *, void *);
-#endif /* SQUID_DNS_H */
-
+#endif /* _SQUID_SRC_DNS_FORWARD_H */
*/
#include "squid.h"
+#include "dns/rfc1035.h"
+#include "dns/rfc2671.h"
#include "util.h"
#if HAVE_STRING_H
#include <strings.h>
#endif
-#include "rfc1035.h"
-#include "rfc2671.h"
-
#define RFC1035_MAXLABELSZ 63
#define rfc1035_unpack_error 15
#define RFC1035_DEFAULT_PACKET_SZ 512
-typedef struct _rfc1035_rr rfc1035_rr;
-struct _rfc1035_rr {
+class rfc1035_rr
+{
+public:
char name[RFC1035_MAXHOSTNAMESZ];
unsigned short type;
unsigned short _class;
*/
#include "squid.h"
-#include "rfc1035.h"
-#include "rfc2671.h"
+#include "dns/rfc1035.h"
+#include "dns/rfc2671.h"
int
rfc2671RROptPack(char *buf, size_t sz, ssize_t edns_sz)
*/
#include "squid.h"
+#include "dns/rfc2671.h"
+#include "dns/rfc3596.h"
#include "util.h"
#if HAVE_UNISTD_H
#include <strings.h>
#endif
-#include "rfc2671.h"
-#include "rfc3596.h"
-
#ifndef SQUID_RFC1035_H
#error RFC3596 Library depends on RFC1035
#endif
#define SQUID_RFC3596_H
/* RFC 3596 extends RFC 1035 */
-#include "rfc1035.h"
+#include "dns/rfc1035.h"
SQUIDCEXTERN ssize_t rfc3596BuildAQuery(const char *hostname,
char *buf,
* Please see the COPYING and CONTRIBUTORS files for details.
*/
-/* DEBUG: section 78 DNS lookups; interacts with lib/rfc1035.c */
+/* DEBUG: section 78 DNS lookups; interacts with dns/rfc1035.cc */
#include "squid.h"
#include "base/InstanceId.h"
#include "comm/Read.h"
#include "comm/Write.h"
#include "dlink.h"
+#include "dns/forward.h"
+#include "dns/rfc3596.h"
#include "event.h"
#include "fd.h"
#include "fde.h"
#include "ip/tools.h"
#include "MemBuf.h"
#include "mgr/Registration.h"
-#include "rfc3596.h"
#include "SquidConfig.h"
#include "SquidTime.h"
#include "Store.h"
delete vc->queue;
delete vc->msg;
vc->conn = NULL;
- if (vc->ns < nns) // XXX: dnsShutdown may have freed nameservers[]
+ if (vc->ns < nns) // XXX: Dns::Shutdown may have freed nameservers[]
nameservers[vc->ns].vc = NULL;
cbdataFree(vc);
}
++ RcodeMatrix[rcode][attempt];
}
-/* ====================================================================== */
-
-static void
-idnsRegisterWithCacheManager(void)
-{
- Mgr::RegisterAction("idns", "Internal DNS Statistics", idnsStats, 0, 1);
-}
-
void
-dnsInit(void)
+Dns::Init(void)
{
static int init = 0;
}
#endif
- idnsRegisterWithCacheManager();
+ Mgr::RegisterAction("idns", "Internal DNS Statistics", idnsStats, 0, 1);
}
void
-dnsShutdown(void)
+Dns::Shutdown(void)
{
if (DnsSocketA < 0 && DnsSocketB < 0)
return;
#include "squid.h"
#include "cbdata.h"
-#include "DnsLookupDetails.h"
+#include "dns/forward.h"
+#include "dns/LookupDetails.h"
+#include "dns/rfc1035.h"
#include "event.h"
#include "helper.h"
#include "mgr/Registration.h"
#include "SquidConfig.h"
-#include "SquidDns.h"
#include "SquidTime.h"
#include "StatCounters.h"
#include "Store.h"
f->handler = NULL;
if (cbdataReferenceValidDone(f->handlerData, &cbdata)) {
- const DnsLookupDetails details(f->error_message, wait);
+ const Dns::LookupDetails details(f->error_message, wait);
callback(f->name_count ? f->names[0] : NULL, details, cbdata);
}
if (name[0] == '\0') {
debugs(35, 4, "fqdncache_nbgethostbyaddr: Invalid name!");
- const DnsLookupDetails details("Invalid hostname", -1); // error, no lookup
+ const Dns::LookupDetails details("Invalid hostname", -1); // error, no lookup
if (handler)
handler(NULL, details, handlerData);
return;
}
static void
-netdbSendPing(const ipcache_addrs *ia, const DnsLookupDetails &, void *data)
+netdbSendPing(const ipcache_addrs *ia, const Dns::LookupDetails &, void *data)
{
Ip::Address addr;
char *hostname = NULL;
#include "CacheManager.h"
#include "cbdata.h"
#include "dlink.h"
-#include "DnsLookupDetails.h"
+#include "dns/LookupDetails.h"
+#include "dns/rfc3596.h"
#include "event.h"
#include "ip/Address.h"
#include "ip/tools.h"
#include "ipcache.h"
#include "mgr/Registration.h"
-#include "rfc3596.h"
#include "SquidConfig.h"
-#include "SquidDns.h"
#include "SquidTime.h"
#include "StatCounters.h"
#include "Store.h"
i->handler = NULL;
if (cbdataReferenceValidDone(i->handlerData, &cbdata)) {
- const DnsLookupDetails details(i->error_message, wait);
+ const Dns::LookupDetails details(i->error_message, wait);
callback((i->addrs.count ? &i->addrs : NULL), details, cbdata);
}
if (name == NULL || name[0] == '\0') {
debugs(14, 4, "ipcache_nbgethostbyname: Invalid name!");
++IpcacheStats.invalid;
- const DnsLookupDetails details("Invalid hostname", -1); // error, no lookup
+ const Dns::LookupDetails details("Invalid hostname", -1); // error, no lookup
if (handler)
handler(NULL, details, handlerData);
return;
if ((addrs = ipcacheCheckNumeric(name))) {
debugs(14, 4, "ipcache_nbgethostbyname: BYPASS for '" << name << "' (already numeric)");
++IpcacheStats.numeric_hits;
- const DnsLookupDetails details(NULL, -1); // no error, no lookup
+ const Dns::LookupDetails details; // no error, no lookup
if (handler)
handler(addrs, details, handlerData);
return;
#ifndef _SQUID_IPCACHE_H
#define _SQUID_IPCACHE_H
+#include "dns/forward.h"
+
namespace Ip
{
class Address;
}
-class DnsLookupDetails;
-
typedef struct _ipcache_addrs {
Ip::Address *in_addrs;
unsigned char *bad_mask;
unsigned char badcount;
} ipcache_addrs;
-typedef void IPH(const ipcache_addrs *, const DnsLookupDetails &details, void *);
+typedef void IPH(const ipcache_addrs *, const Dns::LookupDetails &details, void *);
void ipcache_purgelru(void *);
void ipcache_nbgethostbyname(const char *name, IPH * handler, void *handlerData);
#include "CpuAffinity.h"
#include "disk.h"
#include "DiskIO/DiskIOModule.h"
+#include "dns/forward.h"
#include "errorpage.h"
#include "event.h"
#include "EventLoop.h"
#include "refresh.h"
#include "send-announce.h"
#include "SquidConfig.h"
-#include "SquidDns.h"
#include "SquidTime.h"
#include "stat.h"
#include "StatCounters.h"
#if USE_HTCP
htcpClosePorts();
#endif
- dnsShutdown();
+ Dns::Shutdown();
#if USE_SSL_CRTD
Ssl::Helper::GetInstance()->Shutdown();
#endif
icapLogOpen();
#endif
storeLogOpen();
- dnsInit();
+ Dns::Init();
#if USE_SSL_CRTD
Ssl::Helper::GetInstance()->Init();
#endif
parseEtcHosts();
- dnsInit();
+ Dns::Init();
#if USE_SSL_CRTD
Ssl::Helper::GetInstance()->Init();
#endif
debugs(1, DBG_IMPORTANT, "Shutting down...");
- dnsShutdown();
+ Dns::Shutdown();
#if USE_SSL_CRTD
Ssl::Helper::GetInstance()->Shutdown();
#endif
}
void
-mcastJoinGroups(const ipcache_addrs *ia, const DnsLookupDetails &, void *)
+mcastJoinGroups(const ipcache_addrs *ia, const Dns::LookupDetails &, void *)
{
#ifdef IP_MULTICAST_TTL
struct ip_mreq mr;
}
static void
-peerDNSConfigure(const ipcache_addrs *ia, const DnsLookupDetails &, void *data)
+peerDNSConfigure(const ipcache_addrs *ia, const Dns::LookupDetails &, void *data)
{
// TODO: connections to no-longer valid IP addresses should be
// closed when we can detect such IP addresses.
#include "CachePeer.h"
#include "carp.h"
#include "client_side.h"
-#include "DnsLookupDetails.h"
+#include "dns/LookupDetails.h"
#include "errorpage.h"
#include "event.h"
#include "FwdState.h"
static void peerGetAllParents(ps_state *);
static void peerAddFwdServer(FwdServer **, CachePeer *, hier_code);
static void peerSelectPinned(ps_state * ps);
-static void peerSelectDnsResults(const ipcache_addrs *ia, const DnsLookupDetails &details, void *data);
+static void peerSelectDnsResults(const ipcache_addrs *ia, const Dns::LookupDetails &details, void *data);
CBDATA_CLASS_INIT(ps_state);
}
static void
-peerSelectDnsResults(const ipcache_addrs *ia, const DnsLookupDetails &details, void *data)
+peerSelectDnsResults(const ipcache_addrs *ia, const Dns::LookupDetails &details, void *data)
{
ps_state *psstate = (ps_state *)data;
}
static void
-send_announce(const ipcache_addrs *ia, const DnsLookupDetails &, void *)
+send_announce(const ipcache_addrs *ia, const Dns::LookupDetails &, void *)
{
LOCAL_ARRAY(char, tbuf, 256);
LOCAL_ARRAY(char, sndbuf, BUFSIZ);
*/
#include "squid.h"
+#include "dns/rfc1035.h"
#include "testRFC1035.h"
#include "unitTestMain.h"
#include <cassert>
-/* Being a C library code it is best bodily included and tested with C++ type-safe techniques. */
-#include "lib/rfc1035.c"
-#include "lib/rfc2671.c"
-
CPPUNIT_TEST_SUITE_REGISTRATION( testRFC1035 );
// TODO Test each function in the Library independently
*/
#include "enums.h"
-#include "rfc1035.h"
#ifndef SQUID_TYPEDEFS_H
#define SQUID_TYPEDEFS_H
typedef void DUCB(int errflag, void *data); /* disk unlink CB */
typedef void DTCB(int errflag, void *data); /* disk trunc CB */
-class DnsLookupDetails;
-typedef void FQDNH(const char *, const DnsLookupDetails &details, void *);
+namespace Dns
+{
+class LookupDetails;
+}
+typedef void FQDNH(const char *, const Dns::LookupDetails &details, void *);
#include "anyp/ProtocolType.h"
class CachePeer;
typedef int HLPSAVAIL(void *);
typedef void HLPSONEQ(void *);
typedef void HLPCMDOPTS(int *argc, char **argv);
-typedef void IDNSCB(void *, const rfc1035_rr *, int, const char *);
/* MD5 cache keys */
typedef unsigned char cache_key;