mirror of
https://github.com/moparisthebest/curl
synced 2024-11-16 06:25:03 -05:00
ed35d6590e
A common set of functions instead of many separate implementations for creating buffers that can grow when appending data to them. Existing functionality has been ported over. In my early basic testing, the total number of allocations seem at roughly the same amount as before, possibly a few less. See docs/DYNBUF.md for a description of the API. Closes #5300
110 lines
3.2 KiB
C
110 lines
3.2 KiB
C
#ifndef HEADER_CURL_DOH_H
|
|
#define HEADER_CURL_DOH_H
|
|
/***************************************************************************
|
|
* _ _ ____ _
|
|
* Project ___| | | | _ \| |
|
|
* / __| | | | |_) | |
|
|
* | (__| |_| | _ <| |___
|
|
* \___|\___/|_| \_\_____|
|
|
*
|
|
* Copyright (C) 2018 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
*
|
|
* This software is licensed as described in the file COPYING, which
|
|
* you should have received as part of this distribution. The terms
|
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
|
*
|
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
* copies of the Software, and permit persons to whom the Software is
|
|
* furnished to do so, under the terms of the COPYING file.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
***************************************************************************/
|
|
|
|
#include "urldata.h"
|
|
#include "curl_addrinfo.h"
|
|
|
|
#ifndef CURL_DISABLE_DOH
|
|
|
|
/*
|
|
* Curl_doh() resolve a name using DoH (DNS-over-HTTPS). It resolves a name
|
|
* and returns a 'Curl_addrinfo *' with the address information.
|
|
*/
|
|
|
|
Curl_addrinfo *Curl_doh(struct connectdata *conn,
|
|
const char *hostname,
|
|
int port,
|
|
int *waitp);
|
|
|
|
CURLcode Curl_doh_is_resolved(struct connectdata *conn,
|
|
struct Curl_dns_entry **dns);
|
|
|
|
int Curl_doh_getsock(struct connectdata *conn, curl_socket_t *socks);
|
|
|
|
typedef enum {
|
|
DOH_OK,
|
|
DOH_DNS_BAD_LABEL, /* 1 */
|
|
DOH_DNS_OUT_OF_RANGE, /* 2 */
|
|
DOH_DNS_LABEL_LOOP, /* 3 */
|
|
DOH_TOO_SMALL_BUFFER, /* 4 */
|
|
DOH_OUT_OF_MEM, /* 5 */
|
|
DOH_DNS_RDATA_LEN, /* 6 */
|
|
DOH_DNS_MALFORMAT, /* 7 */
|
|
DOH_DNS_BAD_RCODE, /* 8 - no such name */
|
|
DOH_DNS_UNEXPECTED_TYPE, /* 9 */
|
|
DOH_DNS_UNEXPECTED_CLASS, /* 10 */
|
|
DOH_NO_CONTENT, /* 11 */
|
|
DOH_DNS_BAD_ID, /* 12 */
|
|
DOH_DNS_NAME_TOO_LONG /* 13 */
|
|
} DOHcode;
|
|
|
|
typedef enum {
|
|
DNS_TYPE_A = 1,
|
|
DNS_TYPE_NS = 2,
|
|
DNS_TYPE_CNAME = 5,
|
|
DNS_TYPE_AAAA = 28,
|
|
DNS_TYPE_DNAME = 39 /* RFC6672 */
|
|
} DNStype;
|
|
|
|
#define DOH_MAX_ADDR 24
|
|
#define DOH_MAX_CNAME 4
|
|
|
|
struct dohaddr {
|
|
int type;
|
|
union {
|
|
unsigned char v4[4]; /* network byte order */
|
|
unsigned char v6[16];
|
|
} ip;
|
|
};
|
|
|
|
struct dohentry {
|
|
struct dynbuf cname[DOH_MAX_CNAME];
|
|
struct dohaddr addr[DOH_MAX_ADDR];
|
|
int numaddr;
|
|
unsigned int ttl;
|
|
int numcname;
|
|
};
|
|
|
|
|
|
#ifdef DEBUGBUILD
|
|
DOHcode doh_encode(const char *host,
|
|
DNStype dnstype,
|
|
unsigned char *dnsp, /* buffer */
|
|
size_t len, /* buffer size */
|
|
size_t *olen); /* output length */
|
|
DOHcode doh_decode(const unsigned char *doh,
|
|
size_t dohlen,
|
|
DNStype dnstype,
|
|
struct dohentry *d);
|
|
void de_init(struct dohentry *d);
|
|
void de_cleanup(struct dohentry *d);
|
|
#endif
|
|
|
|
#else /* if DOH is disabled */
|
|
#define Curl_doh(a,b,c,d) NULL
|
|
#define Curl_doh_is_resolved(x,y) CURLE_COULDNT_RESOLVE_HOST
|
|
#endif
|
|
|
|
#endif /* HEADER_CURL_DOH_H */
|