From 7ed73313b1c129c7134d7d33beb82c85bd6d1df4 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 6 Jun 2000 02:07:13 +0000 Subject: [PATCH] Add function to determine whether a given request used TCP or not. --- lib/dns/include/dns/request.h | 15 +++++++++++++++ lib/dns/request.c | 10 +++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/dns/include/dns/request.h b/lib/dns/include/dns/request.h index f65dca7ffc..cafe149f40 100644 --- a/lib/dns/include/dns/request.h +++ b/lib/dns/include/dns/request.h @@ -228,6 +228,21 @@ dns_request_getresponse(dns_request_t *request, dns_message_t *message, * Any result that dns_message_parse() can return. */ +isc_boolean_t +dns_request_usedtcp(dns_request_t *request); +/* + * Return whether this query used TCP or not. Setting DNS_REQUESTOPT_TCP + * in the call to dns_request_create() will cause the function to return + * ISC_TRUE, othewise the result is based on the query message size. + * + * Requires: + * 'request' is a valid request. + * + * Returns: + * ISC_TRUE if TCP was used. + * ISC_FALSE if UDP was used. + */ + void dns_request_destroy(dns_request_t **requestp); /* diff --git a/lib/dns/request.c b/lib/dns/request.c index 24adc24dca..66c5bfb0c6 100644 --- a/lib/dns/request.c +++ b/lib/dns/request.c @@ -85,6 +85,7 @@ struct dns_request { #define DNS_REQUEST_F_CONNECTING 0x0001 #define DNS_REQUEST_F_CANCELED 0x0002 +#define DNS_REQUEST_F_TCP 0x0008 /* This request used TCP */ #define DNS_REQUEST_CANCELED(r) \ (((r)->flags & DNS_REQUEST_F_CANCELED) != 0) #define DNS_REQUEST_CONNECTING(r) \ @@ -587,7 +588,7 @@ dns_request_create(dns_requestmgr_t *requestmgr, dns_message_t *message, req_connected, request); if (result != ISC_R_SUCCESS) goto unlink; - request->flags |= DNS_REQUEST_F_CONNECTING; + request->flags |= DNS_REQUEST_F_CONNECTING|DNS_REQUEST_F_TCP; } else { result = req_send(request, task, address); if (result != ISC_R_SUCCESS) @@ -729,6 +730,13 @@ dns_request_getresponse(dns_request_t *request, dns_message_t *message, return (dns_message_parse(message, request->answer, preserve_order)); } +isc_boolean_t +dns_request_usedtcp(dns_request_t *request) { + REQUIRE(VALID_REQUEST(request)); + + return (ISC_TF((request->flags & DNS_REQUEST_F_TCP) != 0)); +} + void dns_request_destroy(dns_request_t **requestp) { dns_request_t *request;