1/* 2 * Copyright (C) 2004-2007, 2009 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 1999-2001, 2003 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 * PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18/* $Id: xfrin.h,v 1.30 2009/01/17 23:47:43 tbox Exp $ */ 19 20#ifndef DNS_XFRIN_H 21#define DNS_XFRIN_H 1 22 23/***** 24 ***** Module Info 25 *****/ 26 27/*! \file dns/xfrin.h 28 * \brief 29 * Incoming zone transfers (AXFR + IXFR). 30 */ 31 32/*** 33 *** Imports 34 ***/ 35 36#include <isc/lang.h> 37 38#include <dns/types.h> 39 40/*** 41 *** Types 42 ***/ 43 44/*% 45 * A transfer in progress. This is an opaque type. 46 */ 47typedef struct dns_xfrin_ctx dns_xfrin_ctx_t; 48 49/*** 50 *** Functions 51 ***/ 52 53ISC_LANG_BEGINDECLS 54 55/*% see dns_xfrin_create2() */ 56isc_result_t 57dns_xfrin_create(dns_zone_t *zone, dns_rdatatype_t xfrtype, 58 isc_sockaddr_t *masteraddr, dns_tsigkey_t *tsigkey, 59 isc_mem_t *mctx, isc_timermgr_t *timermgr, 60 isc_socketmgr_t *socketmgr, isc_task_t *task, 61 dns_xfrindone_t done, dns_xfrin_ctx_t **xfrp); 62 63isc_result_t 64dns_xfrin_create2(dns_zone_t *zone, dns_rdatatype_t xfrtype, 65 isc_sockaddr_t *masteraddr, isc_sockaddr_t *sourceaddr, 66 dns_tsigkey_t *tsigkey, isc_mem_t *mctx, 67 isc_timermgr_t *timermgr, isc_socketmgr_t *socketmgr, 68 isc_task_t *task, dns_xfrindone_t done, 69 dns_xfrin_ctx_t **xfrp); 70/*%< 71 * Attempt to start an incoming zone transfer of 'zone' 72 * from 'masteraddr', creating a dns_xfrin_ctx_t object to 73 * manage it. Attach '*xfrp' to the newly created object. 74 * 75 * Iff ISC_R_SUCCESS is returned, '*done' is guaranteed to be 76 * called in the context of 'task', with 'zone' and a result 77 * code as arguments when the transfer finishes. 78 * 79 * Requires: 80 *\li 'xfrtype' is dns_rdatatype_axfr, dns_rdatatype_ixfr 81 * or dns_rdatatype_soa (soa query followed by axfr if 82 * serial is greater than current serial). 83 * 84 *\li If 'xfrtype' is dns_rdatatype_ixfr or dns_rdatatype_soa, 85 * the zone has a database. 86 */ 87 88void 89dns_xfrin_shutdown(dns_xfrin_ctx_t *xfr); 90/*%< 91 * If the zone transfer 'xfr' has already finished, 92 * do nothing. Otherwise, abort it and cause it to call 93 * its done callback with a status of ISC_R_CANCELED. 94 */ 95 96void 97dns_xfrin_detach(dns_xfrin_ctx_t **xfrp); 98/*%< 99 * Detach a reference to a zone transfer object. 100 * Caller to maintain external locking if required. 101 */ 102 103void 104dns_xfrin_attach(dns_xfrin_ctx_t *source, dns_xfrin_ctx_t **target); 105/*%< 106 * Caller to maintain external locking if required. 107 */ 108 109ISC_LANG_ENDDECLS 110 111#endif /* DNS_XFRIN_H */ 112