Sat Sep 16 05:48:00 2006

Asterisk developer's documentation


dns.h File Reference

DNS support for Asterisk. More...

Go to the source code of this file.

Functions

int ast_search_dns (void *context, const char *dname, int class, int type, int(*callback)(void *context, char *answer, int len, char *fullanswer))
 Perform DNS lookup (used by enum and SRV lookups).


Detailed Description

DNS support for Asterisk.

Author:
Thorsten Lockert <tholo@trollphone.org>

Definition in file dns.h.


Function Documentation

int ast_search_dns ( void *  context,
const char *  dname,
int  class,
int  type,
int(*)(void *context, char *answer, int len, char *fullanswer)  callback 
)

Perform DNS lookup (used by enum and SRV lookups).

Parameters:
context 
dname Domain name to lookup (host, SRV domain, TXT record name)
class Record Class (see "man res_search")
type Record type (see "man res_search")
callback Callback function for handling DNS result

Definition at line 186 of file dns.c.

References ast_log(), ast_mutex_lock(), ast_mutex_unlock(), dns_parse_answer(), LOG_DEBUG, LOG_WARNING, and MAX_SIZE.

Referenced by ast_get_enum(), ast_get_srv(), and ast_get_txt().

00189 {
00190 #ifdef HAS_RES_NINIT
00191    struct __res_state dnsstate;
00192 #endif
00193    char answer[MAX_SIZE];
00194    int res, ret = -1;
00195 
00196 #ifdef HAS_RES_NINIT
00197 #ifdef MAKE_VALGRIND_HAPPY
00198    memset(&dnsstate, 0, sizeof(dnsstate));
00199 #endif   
00200    res_ninit(&dnsstate);
00201    res = res_nsearch(&dnsstate, dname, class, type, (unsigned char *)answer, sizeof(answer));
00202 #else
00203    ast_mutex_lock(&res_lock);
00204    res_init();
00205    res = res_search(dname, class, type, answer, sizeof(answer));
00206 #endif
00207    if (res > 0) {
00208       if ((res = dns_parse_answer(context, class, type, answer, res, callback)) < 0) {
00209          ast_log(LOG_WARNING, "DNS Parse error for %s\n", dname);
00210          ret = -1;
00211       }
00212       else if (ret == 0) {
00213          ast_log(LOG_DEBUG, "No matches found in DNS for %s\n", dname);
00214          ret = 0;
00215       }
00216       else
00217          ret = 1;
00218    }
00219 #ifdef HAS_RES_NINIT
00220    res_nclose(&dnsstate);
00221 #else
00222 #ifndef __APPLE__
00223    res_close();
00224 #endif
00225    ast_mutex_unlock(&res_lock);
00226 #endif
00227    return ret;
00228 }


Generated on Sat Sep 16 05:48:00 2006 for Asterisk - the Open Source PBX by  doxygen 1.4.7