123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- .\"
- .\" Copyright 2020 Danny Sonnenschein <[email protected]>
- .\"
- .\" Permission to use, copy, modify, and distribute this
- .\" software and its documentation for any purpose and without
- .\" fee is hereby granted, provided that the above copyright
- .\" notice appear in all copies and that both that copyright
- .\" notice and this permission notice appear in supporting
- .\" documentation, and that the name of M.I.T. not be used in
- .\" advertising or publicity pertaining to distribution of the
- .\" software without specific, written prior permission.
- .\" M.I.T. makes no representations about the suitability of
- .\" this software for any purpose. It is provided "as is"
- .\" without express or implied warranty.
- .\"
- .TH ARES_PARSE_CAA_REPLY 3 "16 September 2020"
- .SH NAME
- ares_parse_caa_reply \- Parse a reply to a DNS query of type CAA
- .SH SYNOPSIS
- .nf
- #include <ares.h>
- int ares_parse_caa_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
- struct ares_caa_reply **\fIcaa_out\fP);
- .fi
- .SH DESCRIPTION
- The
- .BR "ares_parse_caa_reply"
- function parses the response to a query of type CAA into a
- linked list (one element per sub-string) of
- .IR "struct ares_caa_reply"
- The parameters
- .I abuf
- and
- .I alen
- give the contents of the response. The result is stored in allocated
- memory and a pointer to it stored into the variable pointed to by
- .IR caa_out .
- It is the caller's responsibility to free the resulting
- .IR caa_out
- structure when it is no longer needed using the function
- .B ares_free_data(3)
- .PP
- The structure
- .I ares_caa_reply(3)
- contains the following fields:
- .sp
- .in +4n
- .nf
- struct ares_caa_reply {
- struct ares_caa_reply *next;
- int critical;
- unsigned char *property;
- size_t plength; /* plength excludes null */
- unsigned char *value;
- size_t length; /* length excludes null */
- };
- .fi
- .in
- .PP
- .SH RETURN VALUES
- .BR "ares_parse_caa_reply"
- can return any of the following values:
- .TP 15
- .B ARES_SUCCESS
- The response was successfully parsed.
- .TP 15
- .B ARES_EBADRESP
- The response was malformatted.
- .TP 15
- .B ARES_ENODATA
- The response did not contain an answer to the query.
- .TP 15
- .B ARES_ENOMEM
- Memory was exhausted.
- .SH EXAMPLE
- .nf
- #include <arpa/inet.h>
- #include <time.h>
- #include <sys/time.h>
- #include <netdb.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include "ares.h"
- static void dns_callback(void *arg,
- int status,
- int timeouts,
- unsigned char *abuf,
- int alen)
- {
- struct ares_caa_reply *caa_out;
- int err;
- err = ares_parse_caa_reply (abuf, alen, &caa_out);
- if (err == ARES_SUCCESS)
- {
- struct ares_caa_reply *caa_curr;
- for (caa_curr=caa_out; caa_curr; caa_curr=caa_curr->next)
- printf ("%s. CAA %i %s \\"%s\\"\\n", arg,
- caa_curr->critical,
- caa_curr->property,
- caa_curr->value);
- }
- else
- {
- printf ("err=%i\\n", err);
- }
- ares_free_data (caa_out);
- }
- static void main_loop(ares_channel *channel)
- {
- int nfds, count;
- fd_set readers, writers;
- struct timeval tv, *tvp;
- while (1)
- {
- FD_ZERO (&readers);
- FD_ZERO (&writers);
- nfds = ares_fds (*channel, &readers, &writers);
- if (nfds == 0)
- break;
- tvp = ares_timeout (*channel, NULL, &tv);
- count = select (nfds, &readers, &writers, NULL, tvp);
- ares_process (*channel, &readers, &writers);
- }
- }
- int main(int argc, char **argv)
- {
- const char *sversion;
- int iversion;
- int err;
- sversion = ares_version (&iversion);
- printf ("c-ares version %s\\n", sversion);
- char *domain = "wikipedia.org";
- if (argc > 1)
- domain = argv[1];
- ares_channel channel;
- if ((err = ares_init (&channel)) != ARES_SUCCESS)
- {
- printf ("ares_init() failed (%i)\\n", err);
- exit (EXIT_FAILURE);
- }
- ares_query (channel, domain,
- 1, /* ns_c_in */
- 257, /* T_CAA */
- dns_callback, domain);
- main_loop (&channel);
- ares_destroy (channel);
- exit (EXIT_SUCCESS);
- }
- .fi
- .SH AVAILABILITY
- This function was first introduced in c-ares version 1.17.0.
- .SH SEE ALSO
- .BR ares_query (3)
- .BR ares_free_data (3)
- .SH AUTHOR
- Written by Danny Sonnenschein <[email protected]>, on behalf of platynum, https://platynum.ch
|