110 lines
3.8 KiB
C
110 lines
3.8 KiB
C
/*
|
|
* Asterisk -- An open source telephony toolkit.
|
|
*
|
|
* Copyright (C) 2015, Digium, Inc.
|
|
*
|
|
* Mark Michelson <mmichelson@digium.com>
|
|
*
|
|
* Includes code and algorithms from the Zapata library.
|
|
*
|
|
* See http://www.asterisk.org for more information about
|
|
* the Asterisk project. Please do not directly contact
|
|
* any of the maintainers of this project for assistance;
|
|
* the project provides a web site, mailing lists and IRC
|
|
* channels for your use.
|
|
*
|
|
* This program is free software, distributed under the terms of
|
|
* the GNU General Public License Version 2. See the LICENSE file
|
|
* at the top of the source tree.
|
|
*/
|
|
|
|
#ifndef DNS_TEST_H
|
|
#define DNS_TEST_H
|
|
|
|
/*!
|
|
* \brief Representation of a string in DNS
|
|
*
|
|
* In DNS, a string has a byte to indicate the length,
|
|
* followed by a series of bytes representing the string.
|
|
* DNS does not NULL-terminate its strings. However, the
|
|
* string stored in this structure is expected to be NULL-
|
|
* terminated.
|
|
*/
|
|
struct ast_dns_test_string {
|
|
uint8_t len;
|
|
const char *val;
|
|
};
|
|
|
|
/*!
|
|
* \brief Write a DNS string to a buffer
|
|
*
|
|
* This writes the DNS string to the buffer and returns the total
|
|
* number of bytes written to the buffer.
|
|
*
|
|
* There is no buffer size passed to this function. Tests are expected to
|
|
* use a buffer that is sufficiently large for their tests.
|
|
*
|
|
* \param string The string to write
|
|
* \param buf The buffer to write the string into
|
|
* \return The number of bytes written to the buffer
|
|
*/
|
|
int ast_dns_test_write_string(const struct ast_dns_test_string *string, char *buf);
|
|
|
|
/*!
|
|
* \brief Write a DNS domain to a buffer
|
|
*
|
|
* A DNS domain consists of a series of labels separated
|
|
* by dots. Each of these labels gets written as a DNS
|
|
* string. A DNS domain ends with a NULL label, which is
|
|
* essentially a zero-length DNS string.
|
|
*
|
|
* There is no buffer size passed to this function. Tests are expected to
|
|
* use a buffer that is sufficiently large for their tests.
|
|
*
|
|
* \param string The DNS domain to write
|
|
* \param buf The buffer to write the domain into
|
|
* \return The number of bytes written to the buffer
|
|
*/
|
|
int ast_dns_test_write_domain(const char *string, char *buf);
|
|
|
|
/*!
|
|
* \brief Callback to write specific DNS record to an answer
|
|
*
|
|
* When generating a DNS result, the type of DNS record being generated
|
|
* will need to be performed by individual test cases. This is a callback
|
|
* that tests can define to write a specific type of DNS record to the
|
|
* provided buffer.
|
|
*
|
|
* There is no buffer size passed to this function. Tests are expected to
|
|
* use a buffer that is sufficiently large for their tests.
|
|
*
|
|
* \param record Pointer to test-specific DNS record data
|
|
* \param buf The buffer into which to write the DNS record
|
|
* \return The number of bytes written to the buffer
|
|
*/
|
|
typedef int (*record_fn)(void *record, char *buf);
|
|
|
|
/*!
|
|
* \brief Generate a full DNS response for the given DNS records.
|
|
*
|
|
* This function takes care of generating the DNS header, question, and
|
|
* answer sections of a DNS response. In order to place test-specific
|
|
* record data into the DNS answers, a callback is provided as a parameter
|
|
* to this function so that the necessary records can be encoded properly
|
|
* by the tests.
|
|
*
|
|
* There is no buffer size passed to this function. Tests are expected to
|
|
* use a buffer that is sufficiently large for their tests.
|
|
*
|
|
* \param query The DNS query that is being processed
|
|
* \param records An array of test-specific representations of DNS records
|
|
* \param num_records The number of elements in the records array
|
|
* \param record_size The size of each element in the records array
|
|
* \param generate The test-specific encoder for DNS records
|
|
* \param buffer The buffer into which to write the DNS response
|
|
*/
|
|
int ast_dns_test_generate_result(struct ast_dns_query *query, void *records, size_t num_records,
|
|
size_t record_size, record_fn generate, char *buffer);
|
|
|
|
#endif /* DNS_TEST_H */
|