123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /* libresolv interfaces for internal use across glibc.
- Copyright (C) 2016-2019 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
- #ifndef _RESOLV_INTERNAL_H
- #define _RESOLV_INTERNAL_H 1
- #include <resolv.h>
- #include <stdbool.h>
- /* Resolver flags. Used for _flags in struct __res_state. */
- #define RES_F_VC 0x00000001 /* Socket is TCP. */
- #define RES_F_CONN 0x00000002 /* Socket is connected. */
- #define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors. */
- /* Internal version of RES_USE_INET6 which does not trigger a
- deprecation warning. */
- #define DEPRECATED_RES_USE_INET6 0x00002000
- static inline bool
- res_use_inet6 (void)
- {
- return _res.options & DEPRECATED_RES_USE_INET6;
- }
- enum
- {
- /* The advertized EDNS buffer size. The value 1200 is derived
- from the IPv6 minimum MTU (1280 bytes) minus some arbitrary
- space for tunneling overhead. If the DNS server does not react
- to ICMP Fragmentation Needed But DF Set messages, this should
- avoid all UDP fragments on current networks. Avoiding UDP
- fragments is desirable because it prevents fragmentation-based
- spoofing attacks because the randomness in a DNS packet is
- concentrated in the first fragment (with the headers) and does
- not protect subsequent fragments. */
- RESOLV_EDNS_BUFFER_SIZE = 1200,
- };
- struct resolv_context;
- /* Internal function for implementing res_nmkquery and res_mkquery.
- Also used by __res_context_query. */
- int __res_context_mkquery (struct resolv_context *, int op, const char *dname,
- int class, int type, const unsigned char *data,
- unsigned char *buf, int buflen) attribute_hidden;
- /* Main resolver query function for use within glibc. */
- int __res_context_search (struct resolv_context *, const char *, int, int,
- unsigned char *, int, unsigned char **,
- unsigned char **, int *, int *, int *);
- libresolv_hidden_proto (__res_context_search)
- /* Main resolver query function for use within glibc. */
- int __res_context_query (struct resolv_context *, const char *, int, int,
- unsigned char *, int, unsigned char **,
- unsigned char **, int *, int *, int *);
- libresolv_hidden_proto (__res_context_query)
- /* Internal function used to implement the query and search
- functions. */
- int __res_context_send (struct resolv_context *, const unsigned char *, int,
- const unsigned char *, int, unsigned char *,
- int, unsigned char **, unsigned char **,
- int *, int *, int *) attribute_hidden;
- /* Internal function similar to res_hostalias. */
- const char *__res_context_hostalias (struct resolv_context *,
- const char *, char *, size_t);
- libresolv_hidden_proto (__res_context_hostalias);
- /* Add an OPT record to a DNS query. */
- int __res_nopt (struct resolv_context *, int n0,
- unsigned char *buf, int buflen, int anslen) attribute_hidden;
- /* Convert from presentation format (which usually means ASCII
- printable) to network format (which is usually some kind of binary
- format). The input is in the range [SRC, SRC + SRCLEN). The
- output is written to DST (which has to be 4 or 16 bytes long,
- depending on AF). Return 0 for invalid input, 1 for success, -1
- for an invalid address family. */
- int __inet_pton_length (int af, const char *src, size_t srclen, void *);
- libc_hidden_proto (__inet_pton_length)
- /* Called as part of the thread shutdown sequence. */
- void __res_thread_freeres (void) attribute_hidden;
- #endif /* _RESOLV_INTERNAL_H */
|