Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}