Commit 7cde0365 authored by Michael Graff's avatar Michael Graff
Browse files

move printmessage() into its own file, and link it in where needed.

parent f8aae502
......@@ -37,14 +37,14 @@ LIBS = ${DEPLIBS} \
TARGETS = named
OBJS = server.o udpclient.o tcpclient.o wire_test.o \
OBJS = server.o udpclient.o tcpclient.o printmsg.o \
zone.o configctx.o confparser.o interfacemgr.o
@BIND9_MAKE_RULES@
wire_test.o: ${srcdir}/../tests/wire_test.c
${CC} -c -o wire_test.o -DNOMAIN ${ALL_CFLAGS} \
${srcdir}/../tests/wire_test.c
printmsg.o: ${srcdir}/../tests/printmsg.c
${CC} -c -o printmsg.o ${ALL_CFLAGS} -I${srcdir}/../tests \
${srcdir}/../tests/printmsg.c
named: ${OBJS} ${DEPLIBS}
${LIBTOOL} ${CC} -o $@ ${OBJS} ${LIBS}
......
......@@ -99,8 +99,8 @@ rwlock_test: rwlock_test.o ${ISCDEPLIBS}
${LIBTOOL} ${CC} ${CFLAGS} -o $@ rwlock_test.o \
${ISCLIBS} ${LIBS}
wire_test: wire_test.o ${ISCDEPLIBS} ${DNSDEPLIBS}
${LIBTOOL} ${CC} ${CFLAGS} -o $@ wire_test.o \
wire_test: wire_test.o printmsg.o ${ISCDEPLIBS} ${DNSDEPLIBS}
${LIBTOOL} ${CC} ${CFLAGS} -o $@ wire_test.o printmsg.o \
${DNSLIBS} ${ISCLIBS} ${LIBS}
master_test: master_test.o ${ISCDEPLIBS} ${DNSDEPLIBS}
......@@ -119,8 +119,8 @@ mempool_test: mempool_test.o ${ISCDEPLIBS}
${LIBTOOL} ${CC} ${CFLAGS} -o $@ mempool_test.o \
${ISCLIBS} ${LIBS}
dispatch_test: dispatch_test.o ${ISCDEPLIBS} ${DNSDEPLIBS}
${LIBTOOL} ${CC} ${CFLAGS} -o $@ dispatch_test.o \
dispatch_test: dispatch_test.o printmsg.o ${ISCDEPLIBS} ${DNSDEPLIBS}
${LIBTOOL} ${CC} ${CFLAGS} -o $@ dispatch_test.o printmsg.o \
${DNSLIBS} ${ISCLIBS} ${LIBS}
clean distclean::
......
/*
* Copyright (C) 1999 Internet Software Consortium.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
* SOFTWARE.
*/
#include <config.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <isc/assertions.h>
#include <isc/error.h>
#include <isc/boolean.h>
#include <isc/region.h>
#include <dns/types.h>
#include <dns/result.h>
#include <dns/name.h>
#include <dns/rdata.h>
#include <dns/rdataclass.h>
#include <dns/rdatatype.h>
#include <dns/rdatalist.h>
#include <dns/rdataset.h>
#include <dns/compress.h>
#include <dns/message.h>
#include "printmsg.h"
static char *opcodetext[] = {
"QUERY",
"IQUERY",
"STATUS",
"RESERVED3",
"NOTIFY",
"UPDATE",
"RESERVED6",
"RESERVED7",
"RESERVED8",
"RESERVED9",
"RESERVED10",
"RESERVED11",
"RESERVED12",
"RESERVED13",
"RESERVED14",
"RESERVED15"
};
static char *rcodetext[] = {
"NOERROR",
"FORMERR",
"SERVFAIL",
"NXDOMAIN",
"NOTIMPL",
"REFUSED",
"YXDOMAIN",
"YXRRSET",
"NXRRSET",
"NOTAUTH",
"NOTZONE",
"RESERVED11",
"RESERVED12",
"RESERVED13",
"RESERVED14",
"RESERVED15"
};
static dns_result_t
printsection(dns_message_t *msg, dns_section_t sectionid, char *section_name)
{
dns_name_t *name, *print_name;
dns_rdataset_t *rdataset;
isc_buffer_t target;
dns_result_t result;
isc_region_t r;
dns_name_t empty_name;
char t[1000];
isc_boolean_t first;
isc_boolean_t no_rdata;
if (sectionid == DNS_SECTION_QUESTION)
no_rdata = ISC_TRUE;
else
no_rdata = ISC_FALSE;
printf("\n;; %s SECTION:\n", section_name);
dns_name_init(&empty_name, NULL);
result = dns_message_firstname(msg, sectionid);
if (result == DNS_R_NOMORE)
return (DNS_R_SUCCESS);
else if (result != DNS_R_SUCCESS)
return (result);
for (;;) {
name = NULL;
dns_message_currentname(msg, sectionid, &name);
isc_buffer_init(&target, t, sizeof t, ISC_BUFFERTYPE_TEXT);
first = ISC_TRUE;
print_name = name;
for (rdataset = ISC_LIST_HEAD(name->list);
rdataset != NULL;
rdataset = ISC_LIST_NEXT(rdataset, link)) {
result = dns_rdataset_totext(rdataset, print_name,
ISC_FALSE, no_rdata,
&target);
if (result != DNS_R_SUCCESS)
return (result);
#ifdef USEINITALWS
if (first) {
print_name = &empty_name;
first = ISC_FALSE;
}
#endif
}
isc_buffer_used(&target, &r);
printf("%.*s", (int)r.length, (char *)r.base);
result = dns_message_nextname(msg, sectionid);
if (result == DNS_R_NOMORE)
break;
else if (result != DNS_R_SUCCESS)
return (result);
}
return (DNS_R_SUCCESS);
}
dns_result_t
printmessage(dns_message_t *msg) {
isc_boolean_t did_flag = ISC_FALSE;
dns_result_t result;
result = DNS_R_UNEXPECTED;
printf(";; ->>HEADER<<- opcode: %s, status: %s, id: %u\n",
opcodetext[msg->opcode], rcodetext[msg->rcode], msg->id);
printf(";; flags: ");
if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0) {
printf("qr");
did_flag = ISC_TRUE;
}
if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0) {
printf("%saa", did_flag ? " " : "");
did_flag = ISC_TRUE;
}
if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0) {
printf("%stc", did_flag ? " " : "");
did_flag = ISC_TRUE;
}
if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0) {
printf("%srd", did_flag ? " " : "");
did_flag = ISC_TRUE;
}
if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0) {
printf("%sra", did_flag ? " " : "");
did_flag = ISC_TRUE;
}
printf("; QUERY: %u, ANSWER: %u, AUTHORITY: %u, ADDITIONAL: %u\n",
msg->counts[DNS_SECTION_QUESTION],
msg->counts[DNS_SECTION_ANSWER],
msg->counts[DNS_SECTION_AUTHORITY],
msg->counts[DNS_SECTION_ADDITIONAL]);
printf("; PSEUDOSECTIONS: TSIG: %u\n",
msg->counts[DNS_SECTION_TSIG]);
result = printsection(msg, DNS_SECTION_QUESTION, "QUESTION");
if (result != DNS_R_SUCCESS)
return (result);
result = printsection(msg, DNS_SECTION_ANSWER, "ANSWER");
if (result != DNS_R_SUCCESS)
return (result);
result = printsection(msg, DNS_SECTION_AUTHORITY, "AUTHORITY");
if (result != DNS_R_SUCCESS)
return (result);
result = printsection(msg, DNS_SECTION_ADDITIONAL, "ADDITIONAL");
if (result != DNS_R_SUCCESS)
return (result);
result = printsection(msg, DNS_SECTION_TSIG, "PSEUDOSECTION TSIG");
if (result != DNS_R_SUCCESS)
return (result);
return (result);
}
#ifndef TEST_PRINTMSG_H
#define TEST_PRINTMSG_H
#include <dns/message.h>
dns_result_t printmessage(dns_message_t *message);
#endif /* TEST_PRINTMSG_H */
......@@ -38,9 +38,9 @@
#include <dns/compress.h>
#include <dns/message.h>
dns_decompress_t dctx;
#include "printmsg.h"
dns_result_t printmessage(dns_message_t *message);
dns_decompress_t dctx;
static inline void
CHECKRESULT(dns_result_t result, char *msg)
......@@ -66,7 +66,6 @@ print_wirename(isc_region_t *name) {
}
#endif
#ifndef NOMAIN
static int
fromhex(char c) {
if (c >= '0' && c <= '9')
......@@ -80,169 +79,7 @@ fromhex(char c) {
exit(3);
/* NOTREACHED */
}
#endif
static char *opcodetext[] = {
"QUERY",
"IQUERY",
"STATUS",
"RESERVED3",
"NOTIFY",
"UPDATE",
"RESERVED6",
"RESERVED7",
"RESERVED8",
"RESERVED9",
"RESERVED10",
"RESERVED11",
"RESERVED12",
"RESERVED13",
"RESERVED14",
"RESERVED15"
};
static char *rcodetext[] = {
"NOERROR",
"FORMERR",
"SERVFAIL",
"NXDOMAIN",
"NOTIMPL",
"REFUSED",
"YXDOMAIN",
"YXRRSET",
"NXRRSET",
"NOTAUTH",
"NOTZONE",
"RESERVED11",
"RESERVED12",
"RESERVED13",
"RESERVED14",
"RESERVED15"
};
static dns_result_t
printsection(dns_message_t *msg, dns_section_t sectionid, char *section_name)
{
dns_name_t *name, *print_name;
dns_rdataset_t *rdataset;
isc_buffer_t target;
dns_result_t result;
isc_region_t r;
dns_name_t empty_name;
char t[1000];
isc_boolean_t first;
isc_boolean_t no_rdata;
if (sectionid == DNS_SECTION_QUESTION)
no_rdata = ISC_TRUE;
else
no_rdata = ISC_FALSE;
printf("\n;; %s SECTION:\n", section_name);
dns_name_init(&empty_name, NULL);
result = dns_message_firstname(msg, sectionid);
if (result == DNS_R_NOMORE)
return (DNS_R_SUCCESS);
else if (result != DNS_R_SUCCESS)
return (result);
for (;;) {
name = NULL;
dns_message_currentname(msg, sectionid, &name);
isc_buffer_init(&target, t, sizeof t, ISC_BUFFERTYPE_TEXT);
first = ISC_TRUE;
print_name = name;
for (rdataset = ISC_LIST_HEAD(name->list);
rdataset != NULL;
rdataset = ISC_LIST_NEXT(rdataset, link)) {
result = dns_rdataset_totext(rdataset, print_name,
ISC_FALSE, no_rdata,
&target);
if (result != DNS_R_SUCCESS)
return (result);
#ifdef USEINITALWS
if (first) {
print_name = &empty_name;
first = ISC_FALSE;
}
#endif
}
isc_buffer_used(&target, &r);
printf("%.*s", (int)r.length, (char *)r.base);
result = dns_message_nextname(msg, sectionid);
if (result == DNS_R_NOMORE)
break;
else if (result != DNS_R_SUCCESS)
return (result);
}
return (DNS_R_SUCCESS);
}
dns_result_t
printmessage(dns_message_t *msg) {
isc_boolean_t did_flag = ISC_FALSE;
dns_result_t result;
result = DNS_R_UNEXPECTED;
printf(";; ->>HEADER<<- opcode: %s, status: %s, id: %u\n",
opcodetext[msg->opcode], rcodetext[msg->rcode], msg->id);
printf(";; flags: ");
if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0) {
printf("qr");
did_flag = ISC_TRUE;
}
if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0) {
printf("%saa", did_flag ? " " : "");
did_flag = ISC_TRUE;
}
if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0) {
printf("%stc", did_flag ? " " : "");
did_flag = ISC_TRUE;
}
if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0) {
printf("%srd", did_flag ? " " : "");
did_flag = ISC_TRUE;
}
if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0) {
printf("%sra", did_flag ? " " : "");
did_flag = ISC_TRUE;
}
printf("; QUERY: %u, ANSWER: %u, AUTHORITY: %u, ADDITIONAL: %u\n",
msg->counts[DNS_SECTION_QUESTION],
msg->counts[DNS_SECTION_ANSWER],
msg->counts[DNS_SECTION_AUTHORITY],
msg->counts[DNS_SECTION_ADDITIONAL]);
printf("; PSEUDOSECTIONS: TSIG: %u\n",
msg->counts[DNS_SECTION_TSIG]);
result = printsection(msg, DNS_SECTION_QUESTION, "QUESTION");
if (result != DNS_R_SUCCESS)
return (result);
result = printsection(msg, DNS_SECTION_ANSWER, "ANSWER");
if (result != DNS_R_SUCCESS)
return (result);
result = printsection(msg, DNS_SECTION_AUTHORITY, "AUTHORITY");
if (result != DNS_R_SUCCESS)
return (result);
result = printsection(msg, DNS_SECTION_ADDITIONAL, "ADDITIONAL");
if (result != DNS_R_SUCCESS)
return (result);
result = printsection(msg, DNS_SECTION_TSIG, "PSEUDOSECTION TSIG");
if (result != DNS_R_SUCCESS)
return (result);
return (result);
}
#ifndef NOMAIN
int
main(int argc, char *argv[]) {
char *rp, *wp;
......@@ -380,4 +217,3 @@ main(int argc, char *argv[]) {
return (0);
}
#endif /* !NOMAIN */
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment