static isc_result_t zone_xmlrender(dns_zone_t *zone, void *arg) { char buf[1024 + 32]; /* sufficiently large for zone name and class */ dns_rdataclass_t rdclass; isc_uint32_t serial; xmlTextWriterPtr writer = arg; isc_stats_t *zonestats; isc_uint64_t nsstat_values[dns_nsstatscounter_max]; int xmlrc; isc_result_t result; TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "zone")); dns_zone_name(zone, buf, sizeof(buf)); TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "name")); TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR buf)); TRY0(xmlTextWriterEndElement(writer)); rdclass = dns_zone_getclass(zone); dns_rdataclass_format(rdclass, buf, sizeof(buf)); TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "rdataclass")); TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR buf)); TRY0(xmlTextWriterEndElement(writer)); TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "serial")); if (dns_zone_getserial2(zone, &serial) == ISC_R_SUCCESS) TRY0(xmlTextWriterWriteFormatString(writer, "%u", serial)); else TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR "-")); TRY0(xmlTextWriterEndElement(writer)); zonestats = dns_zone_getrequeststats(zone); if (zonestats != NULL) { TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters")); result = dump_counters(zonestats, statsformat_xml, writer, NULL, nsstats_xmldesc, dns_nsstatscounter_max, nsstats_index, nsstat_values, ISC_STATSDUMP_VERBOSE); if (result != ISC_R_SUCCESS) goto error; TRY0(xmlTextWriterEndElement(writer)); /* counters */ } TRY0(xmlTextWriterEndElement(writer)); /* zone */ return (ISC_R_SUCCESS); error: return (ISC_R_FAILURE); }
static isc_result_t zone_xmlrender(dns_zone_t *zone, void *arg) { char buf[1024 + 32]; /* sufficiently large for zone name and class */ dns_rdataclass_t rdclass; isc_uint32_t serial; xmlTextWriterPtr writer = arg; stats_dumparg_t dumparg; dns_stats_t *zonestats; xmlTextWriterStartElement(writer, ISC_XMLCHAR "zone"); dns_zone_name(zone, buf, sizeof(buf)); xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"); xmlTextWriterWriteString(writer, ISC_XMLCHAR buf); xmlTextWriterEndElement(writer); rdclass = dns_zone_getclass(zone); dns_rdataclass_format(rdclass, buf, sizeof(buf)); xmlTextWriterStartElement(writer, ISC_XMLCHAR "rdataclass"); xmlTextWriterWriteString(writer, ISC_XMLCHAR buf); xmlTextWriterEndElement(writer); serial = dns_zone_getserial(zone); xmlTextWriterStartElement(writer, ISC_XMLCHAR "serial"); xmlTextWriterWriteFormatString(writer, "%u", serial); xmlTextWriterEndElement(writer); dumparg.type = statsformat_xml; dumparg.arg = writer; dumparg.desc = nsstats_xmldesc; dumparg.ncounters = dns_nsstatscounter_max; zonestats = dns_zone_getrequeststats(zone); if (zonestats != NULL) { xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"); dns_generalstats_dump(zonestats, generalstat_dump, &dumparg, DNS_STATSDUMP_VERBOSE); xmlTextWriterEndElement(writer); /* counters */ } xmlTextWriterEndElement(writer); /* zone */ return (ISC_R_SUCCESS); }