/* * rrdns - Rapid Reverse DNS lookup plugin for the UBUS RPC server * * Copyright (C) 2016-2017 Jo-Philipp Wich * * Permission to use, copy, modify, and/or 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 THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR 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 #include #include #define RRDNS_MAX_TIMEOUT 5000 #define RRDNS_DEF_TIMEOUT 250 #define RRDNS_MAX_LIMIT 1000 #define RRDNS_DEF_LIMIT 10 struct rrdns_request { struct avl_node by_id; struct avl_node by_addr; uint16_t id; uint16_t family; union { struct in_addr in; struct in6_addr in6; } addr; }; struct rrdns_context { struct ubus_context *context; struct ubus_request_data request; struct uloop_timeout timeout; struct blob_attr *addr_cur; int addr_rem; struct uloop_fd socket; struct blob_buf blob; struct avl_tree request_ids; struct avl_tree request_addrs; };