mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "stx.h"
 | |
| #include <netinet/in.h>
 | |
| #include <arpa/inet.h>
 | |
| 
 | |
| 
 | |
| #define MAX_ADDRS 128
 | |
| #define TIMEOUT (4*1000000LL)
 | |
| 
 | |
| static void do_resolve(const char *host)
 | |
| {
 | |
|     struct in_addr addrs[MAX_ADDRS];
 | |
|     int i, n = MAX_ADDRS;
 | |
| 
 | |
|     if (stx_dns_getaddrlist(host, addrs, &n, TIMEOUT) < 0) {
 | |
| 	fprintf(stderr, "stx_dns_getaddrlist: can't resolve %s: ", host);
 | |
| 	if (h_errno == NETDB_INTERNAL)
 | |
| 	    perror("");
 | |
| 	else
 | |
| 	    herror("");
 | |
|     } else {
 | |
| 	if (n > 0)
 | |
| 	    printf("%-40s %s\n", (char *)host, inet_ntoa(addrs[0]));
 | |
| 	for (i = 1; i < n; i++)
 | |
| 	    printf("%-40s %s\n", "", inet_ntoa(addrs[i]));
 | |
|     }
 | |
| }
 | |
| 
 | |
| static void show_info(void)
 | |
| {
 | |
|     stx_cache_info_t info;
 | |
| 
 | |
|     stx_dns_cache_getinfo(&info);
 | |
|     printf("DNS cache info:\n\n");
 | |
|     printf("max_size:  %8d\n", (int)info.max_size);
 | |
|     printf("capacity:  %8d bytes\n", (int)info.max_weight);
 | |
|     printf("hash_size: %8d\n", (int)info.hash_size);
 | |
|     printf("cur_size:  %8d\n"
 | |
| 	   "cur_mem:   %8d bytes\n"
 | |
| 	   "hits:      %8d\n"
 | |
| 	   "lookups:   %8d\n"
 | |
| 	   "inserts:   %8d\n"
 | |
| 	   "deletes:   %8d\n",
 | |
| 	   (int)info.cur_size, (int)info.cur_weight, (int)info.hits,
 | |
| 	   (int)info.lookups, (int)info.inserts, (int)info.deletes);
 | |
| }
 | |
| 
 | |
| extern stx_cache_t *_stx_dns_cache;
 | |
| 
 | |
| static void printhost(void *host, void *data)
 | |
| {
 | |
|     printf("%s\n", (char *)host);
 | |
| }
 | |
| 
 | |
| static void show_lru(void)
 | |
| {
 | |
|     printf("LRU hosts:\n\n");
 | |
|     stx_cache_traverse_lru(_stx_dns_cache, printhost, 10);
 | |
| }
 | |
| 
 | |
| static void show_mru(void)
 | |
| {
 | |
|     printf("MRU hosts:\n\n");
 | |
|     stx_cache_traverse_mru(_stx_dns_cache, printhost, 10);
 | |
| }
 | |
| 
 | |
| static void flush_cache(void)
 | |
| {
 | |
|     stx_cache_empty(_stx_dns_cache);
 | |
|     printf("DNS cache is empty\n");
 | |
| }
 | |
| 
 | |
| 
 | |
| int main()
 | |
| {
 | |
|     char line[256];
 | |
|     char str[sizeof(line)];
 | |
| 
 | |
|     st_init();
 | |
|     stx_dns_cache_init(100, 10000, 101);
 | |
| 
 | |
|     for ( ; ; ) {
 | |
| 	fputs("> ", stdout);
 | |
| 	fflush(stdout);
 | |
| 	if (!fgets(line, sizeof(line), stdin))
 | |
| 	    break;
 | |
| 	if (sscanf(line, "%s", str) != 1)
 | |
| 	    continue;
 | |
| 	if (strcmp(str, "exit") == 0 || strcmp(str, "quit") == 0)
 | |
| 	    break;
 | |
| 	if (strcmp(str, "info") == 0) {
 | |
| 	    show_info();
 | |
| 	    continue;
 | |
| 	}
 | |
| 	if (strcmp(str, "lru") == 0) {
 | |
| 	    show_lru();
 | |
| 	    continue;
 | |
| 	}
 | |
| 	if (strcmp(str, "mru") == 0) {
 | |
| 	    show_mru();
 | |
| 	    continue;
 | |
| 	}
 | |
| 	if (strcmp(str, "flush") == 0) {
 | |
| 	    flush_cache();
 | |
| 	    continue;
 | |
| 	}
 | |
| 
 | |
| 	do_resolve(str);
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 |