1*00b67f09SDavid van Moolenbroek /* $NetBSD: callbacks.c,v 1.5 2014/12/10 04:37:58 christos Exp $ */
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek * Copyright (C) 2004, 2005, 2007, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek * Copyright (C) 1999-2001 Internet Software Consortium.
6*00b67f09SDavid van Moolenbroek *
7*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any
8*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above
9*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies.
10*00b67f09SDavid van Moolenbroek *
11*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12*00b67f09SDavid van Moolenbroek * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13*00b67f09SDavid van Moolenbroek * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15*00b67f09SDavid van Moolenbroek * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16*00b67f09SDavid van Moolenbroek * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*00b67f09SDavid van Moolenbroek * PERFORMANCE OF THIS SOFTWARE.
18*00b67f09SDavid van Moolenbroek */
19*00b67f09SDavid van Moolenbroek
20*00b67f09SDavid van Moolenbroek /* Id: callbacks.c,v 1.19.40.1 2012/02/07 00:44:13 each Exp */
21*00b67f09SDavid van Moolenbroek
22*00b67f09SDavid van Moolenbroek /*! \file */
23*00b67f09SDavid van Moolenbroek
24*00b67f09SDavid van Moolenbroek #include <config.h>
25*00b67f09SDavid van Moolenbroek
26*00b67f09SDavid van Moolenbroek #include <isc/util.h>
27*00b67f09SDavid van Moolenbroek
28*00b67f09SDavid van Moolenbroek #include <dns/callbacks.h>
29*00b67f09SDavid van Moolenbroek #include <dns/log.h>
30*00b67f09SDavid van Moolenbroek
31*00b67f09SDavid van Moolenbroek static void
32*00b67f09SDavid van Moolenbroek stdio_error_warn_callback(dns_rdatacallbacks_t *, const char *, ...)
33*00b67f09SDavid van Moolenbroek ISC_FORMAT_PRINTF(2, 3);
34*00b67f09SDavid van Moolenbroek
35*00b67f09SDavid van Moolenbroek static void
36*00b67f09SDavid van Moolenbroek isclog_error_callback(dns_rdatacallbacks_t *callbacks, const char *fmt, ...)
37*00b67f09SDavid van Moolenbroek ISC_FORMAT_PRINTF(2, 3);
38*00b67f09SDavid van Moolenbroek
39*00b67f09SDavid van Moolenbroek static void
40*00b67f09SDavid van Moolenbroek isclog_warn_callback(dns_rdatacallbacks_t *callbacks, const char *fmt, ...)
41*00b67f09SDavid van Moolenbroek ISC_FORMAT_PRINTF(2, 3);
42*00b67f09SDavid van Moolenbroek
43*00b67f09SDavid van Moolenbroek /*
44*00b67f09SDavid van Moolenbroek * Private
45*00b67f09SDavid van Moolenbroek */
46*00b67f09SDavid van Moolenbroek
47*00b67f09SDavid van Moolenbroek static void
stdio_error_warn_callback(dns_rdatacallbacks_t * callbacks,const char * fmt,...)48*00b67f09SDavid van Moolenbroek stdio_error_warn_callback(dns_rdatacallbacks_t *callbacks,
49*00b67f09SDavid van Moolenbroek const char *fmt, ...)
50*00b67f09SDavid van Moolenbroek {
51*00b67f09SDavid van Moolenbroek va_list ap;
52*00b67f09SDavid van Moolenbroek
53*00b67f09SDavid van Moolenbroek UNUSED(callbacks);
54*00b67f09SDavid van Moolenbroek
55*00b67f09SDavid van Moolenbroek va_start(ap, fmt);
56*00b67f09SDavid van Moolenbroek vfprintf(stderr, fmt, ap);
57*00b67f09SDavid van Moolenbroek va_end(ap);
58*00b67f09SDavid van Moolenbroek fprintf(stderr, "\n");
59*00b67f09SDavid van Moolenbroek }
60*00b67f09SDavid van Moolenbroek
61*00b67f09SDavid van Moolenbroek static void
isclog_error_callback(dns_rdatacallbacks_t * callbacks,const char * fmt,...)62*00b67f09SDavid van Moolenbroek isclog_error_callback(dns_rdatacallbacks_t *callbacks, const char *fmt, ...) {
63*00b67f09SDavid van Moolenbroek va_list ap;
64*00b67f09SDavid van Moolenbroek
65*00b67f09SDavid van Moolenbroek UNUSED(callbacks);
66*00b67f09SDavid van Moolenbroek
67*00b67f09SDavid van Moolenbroek va_start(ap, fmt);
68*00b67f09SDavid van Moolenbroek isc_log_vwrite(dns_lctx, DNS_LOGCATEGORY_GENERAL,
69*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_MASTER, /* XXX */
70*00b67f09SDavid van Moolenbroek ISC_LOG_ERROR, fmt, ap);
71*00b67f09SDavid van Moolenbroek va_end(ap);
72*00b67f09SDavid van Moolenbroek }
73*00b67f09SDavid van Moolenbroek
74*00b67f09SDavid van Moolenbroek static void
isclog_warn_callback(dns_rdatacallbacks_t * callbacks,const char * fmt,...)75*00b67f09SDavid van Moolenbroek isclog_warn_callback(dns_rdatacallbacks_t *callbacks, const char *fmt, ...) {
76*00b67f09SDavid van Moolenbroek va_list ap;
77*00b67f09SDavid van Moolenbroek
78*00b67f09SDavid van Moolenbroek UNUSED(callbacks);
79*00b67f09SDavid van Moolenbroek
80*00b67f09SDavid van Moolenbroek va_start(ap, fmt);
81*00b67f09SDavid van Moolenbroek
82*00b67f09SDavid van Moolenbroek isc_log_vwrite(dns_lctx, DNS_LOGCATEGORY_GENERAL,
83*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_MASTER, /* XXX */
84*00b67f09SDavid van Moolenbroek ISC_LOG_WARNING, fmt, ap);
85*00b67f09SDavid van Moolenbroek va_end(ap);
86*00b67f09SDavid van Moolenbroek }
87*00b67f09SDavid van Moolenbroek
88*00b67f09SDavid van Moolenbroek static void
dns_rdatacallbacks_initcommon(dns_rdatacallbacks_t * callbacks)89*00b67f09SDavid van Moolenbroek dns_rdatacallbacks_initcommon(dns_rdatacallbacks_t *callbacks) {
90*00b67f09SDavid van Moolenbroek REQUIRE(callbacks != NULL);
91*00b67f09SDavid van Moolenbroek
92*00b67f09SDavid van Moolenbroek callbacks->magic = DNS_CALLBACK_MAGIC;
93*00b67f09SDavid van Moolenbroek callbacks->add = NULL;
94*00b67f09SDavid van Moolenbroek callbacks->rawdata = NULL;
95*00b67f09SDavid van Moolenbroek callbacks->zone = NULL;
96*00b67f09SDavid van Moolenbroek callbacks->add_private = NULL;
97*00b67f09SDavid van Moolenbroek callbacks->error_private = NULL;
98*00b67f09SDavid van Moolenbroek callbacks->warn_private = NULL;
99*00b67f09SDavid van Moolenbroek }
100*00b67f09SDavid van Moolenbroek
101*00b67f09SDavid van Moolenbroek /*
102*00b67f09SDavid van Moolenbroek * Public.
103*00b67f09SDavid van Moolenbroek */
104*00b67f09SDavid van Moolenbroek
105*00b67f09SDavid van Moolenbroek void
dns_rdatacallbacks_init(dns_rdatacallbacks_t * callbacks)106*00b67f09SDavid van Moolenbroek dns_rdatacallbacks_init(dns_rdatacallbacks_t *callbacks) {
107*00b67f09SDavid van Moolenbroek dns_rdatacallbacks_initcommon(callbacks);
108*00b67f09SDavid van Moolenbroek callbacks->error = isclog_error_callback;
109*00b67f09SDavid van Moolenbroek callbacks->warn = isclog_warn_callback;
110*00b67f09SDavid van Moolenbroek }
111*00b67f09SDavid van Moolenbroek
112*00b67f09SDavid van Moolenbroek void
dns_rdatacallbacks_init_stdio(dns_rdatacallbacks_t * callbacks)113*00b67f09SDavid van Moolenbroek dns_rdatacallbacks_init_stdio(dns_rdatacallbacks_t *callbacks) {
114*00b67f09SDavid van Moolenbroek dns_rdatacallbacks_initcommon(callbacks);
115*00b67f09SDavid van Moolenbroek callbacks->error = stdio_error_warn_callback;
116*00b67f09SDavid van Moolenbroek callbacks->warn = stdio_error_warn_callback;
117*00b67f09SDavid van Moolenbroek }
118*00b67f09SDavid van Moolenbroek
119