int init_dynamic_protocol() { if(unlikely(domain_cache_init() != 0)) { goto err; } if (unlikely(study_cache_init() != 0)) { goto err; } if (unlikely(dns_study_cache_init() != 0)) { goto err; } if (unlikely(dynamic_cache_init() != 0)) { goto err; } if (unlikely(ftp_cache_init() != 0)) { goto err; } //indirect_cache_init(); // pack_test_init(); //test h_cache #if 0 if (unlikely(session_cache_init() != 0)) { goto err; } #endif return 0; err: E("init_dynamic_protocol fail\n"); exit(1); }
int main(int argc, const char* argv[]) { #ifdef _WIN32 WSADATA wsaData; #endif int opt, optind; const char *optarg; int use_daemon = 0; int remote_tcp = 0; int transport_timeout = 5; const char *hosts_file = NULL; const char *remote_addr = "8.8.8.8"; unsigned short local_port = 53, remote_port = 53; optind = 0; opt = xgetopt(argc, argv, options, &optind, &optarg); while(opt != -1) { switch(opt) { case 0: break; case 'p': local_port = (unsigned short)atoi(optarg); break; case 'P': remote_port = (unsigned short)atoi(optarg); break; case 'R': remote_addr = optarg; break; case 'T': remote_tcp = 1; break; case 'f': hosts_file = optarg; break; case 'd': use_daemon = 1; break; case 'v': printf("%s" " * version: %s\n", ascii_logo, VERSION); return 0; case 'h': default: display_help(); return -1; } opt = xgetopt(argc, argv, options, &optind, &optarg); } #ifdef _WIN32 WSAStartup(MAKEWORD(2,2), &wsaData); if(use_daemon) { freopen("NUL", "r", stdin); freopen("NUL", "w", stdout); freopen("NUL", "w", stderr); FreeConsole(); } #else if(use_daemon) { int fd; pid_t pid = fork(); if(pid < 0) { perror("fork"); return -1; } if(pid != 0) exit(0); pid = setsid(); if(pid < -1) { perror("setsid"); return -1; } chdir("/"); fd = open ("/dev/null", O_RDWR, 0); if(fd != -1) { dup2 (fd, 0); dup2 (fd, 1); dup2 (fd, 2); if(fd > 2) close (fd); } umask(0); } signal(SIGPIPE, SIG_IGN); #endif printf("%s" " * runing at %d%s\n" " * transport to %s:%d,%s\n" , ascii_logo , local_port , disable_cache? ", cache: off": "" , remote_addr , remote_port , remote_tcp? "tcp": "udp"); srand((unsigned int)time(NULL)); domain_cache_init(hosts_file); transport_cache_init(transport_timeout); return dnsproxy(local_port, remote_addr, remote_port, remote_tcp); }