this is the second phase of the "resolver overhaul" project. the key additions in this commit are the __res_msend and __res_mkquery functions, which have been factored so as to provide a backend for both the legacy res_* functions and the standard getaddrinfo and getnameinfo functions. the latter however are still using the old backend code; there is code duplication which still needs to be removed, and this will be the next phase of the resolver overhaul. __res_msend is derived from the old __dns_doqueries function, but generalized to send arbitrary caller-provided packets in parallel rather than producing the parallel queries itself. this allows it to be used (completely trivially) as a backend for res_send. the factored-out query generation code, with slightly more generality, is now part of __res_mkquery.
18 lines
562 B
C
18 lines
562 B
C
#include <resolv.h>
|
|
#include <netdb.h>
|
|
#include "libc.h"
|
|
|
|
int __res_mkquery(int, const char *, int, int, const unsigned char *, int, const unsigned char*, unsigned char *, int);
|
|
int __res_send(const unsigned char *, int, unsigned char *, int);
|
|
|
|
int __res_query(const char *name, int class, int type, unsigned char *dest, int len)
|
|
{
|
|
unsigned char q[280];
|
|
int ql = __res_mkquery(0, name, class, type, 0, 0, 0, q, sizeof q);
|
|
if (ql < 0) return ql;
|
|
return __res_send(q, ql, dest, len);
|
|
}
|
|
|
|
weak_alias(__res_query, res_query);
|
|
weak_alias(__res_query, res_search);
|