Index: /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_defs.h
===================================================================
--- /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_defs.h	(revision 20398)
+++ /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_defs.h	(working copy)
@@ -263,6 +263,7 @@
 	uint8_t res_type;
 
 	char hostname[128];
+	uint8_t is_resolved;
 } resource_t;
 
 typedef struct _vpn_commonconfig {
Index: /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_ui.c
===================================================================
--- /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_ui.c	(revision 20398)
+++ /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_ui.c	(working copy)
@@ -405,12 +405,14 @@
 			new_res_network_p->ip_addr.ip4.sin_len = sizeof(struct sockaddr_in);
 			new_res_network_p->netmask.ip4.sin_len = sizeof(struct sockaddr_in);
 			new_res_network_p->netmask.ip4.sin_addr.s_addr = res->mask.ip4;
+			new_res_network_p->is_resolved = 0;
 		}
 		else {
 			new_res_network_p->ip_addr.ip4.sin_len = sizeof(struct sockaddr_in);
 			new_res_network_p->ip_addr.ip4.sin_addr.s_addr = res->ip.ip4;
 			new_res_network_p->netmask.ip4.sin_len = sizeof(struct sockaddr_in);
 			new_res_network_p->netmask.ip4.sin_addr.s_addr = res->mask.ip4;
+			new_res_network_p->is_resolved = 0;
 		}
 		
 		/* insert new resource host into the resource queue tree */
@@ -2269,6 +2271,7 @@
 	bzero(res, sizeof(*res));
 	res->protocol = RESOURCE_PROT_ALL;
 	res->hostname[0] = '\0';
+	res->is_resolved = 0;
 
 	if (!isdigit(*start)) {
 		if (strncasecmp(start, "udp://", sizeof("udp://") - 1) == 0) {
@@ -2288,6 +2291,7 @@
             		res->port_type = RESOURCE_PORTS_RANGE;
             		res->ports[0] = 0;
             		res->ports[1] = 65535;
+					res->is_resolved = 0;
 
             		return 0;
 			// vpn_debug("resource %s have invalid resource type", start);
@@ -2489,6 +2493,7 @@
 
 	bzero(res, sizeof(*res));
 	res->protocol = RESOURCE_PROT_ALL;
+	res->is_resolved = 0;
 
 	/* parse protocol */
 	if (*start != '[') {
Index: /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_var.h
===================================================================
--- /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_var.h	(revision 20398)
+++ /branches/rel_ag_9_4_5/FreeBSD/src/sys/click/app/vpn/vpn_var.h	(working copy)
@@ -127,6 +127,7 @@
 	} netmask;
 
 	char hostname[128];
+	uint8_t is_resolved;
 
 	TAILQ_HEAD(resource_info_head, resource_info) info_queue;
 	TAILQ_ENTRY(resource_network) next_network;
Index: /branches/rel_ag_9_4_5/uproxy/http_proxy/vpn_proxy/vpn_tunnel.c
===================================================================
--- /branches/rel_ag_9_4_5/uproxy/http_proxy/vpn_proxy/vpn_tunnel.c	(revision 20398)
+++ /branches/rel_ag_9_4_5/uproxy/http_proxy/vpn_proxy/vpn_tunnel.c	(working copy)
@@ -2643,7 +2643,7 @@
 	resource_network_t *res_network_p;
 	uint32_t getdomainip;
 	TAILQ_FOREACH(res_network_p, res_network_queue_p, next_network) {
-		if (res_network_p->hostname[0] != '\0')
+		if (res_network_p->hostname[0] != '\0' && res_network_p->is_resolved == 0)
 		{
 			getdomainip = resolve_domain_to_ipv4(res_network_p->hostname);
 			if (getdomainip != 0) 
@@ -2657,6 +2657,7 @@
 				res_network_p->ip_addr.ip4.sin_addr.s_addr = inet_addr("1.1.1.1");
 				vpn_log_sendid("(%s): resolve_domain_to_ipv4 failed: %s", __FUNCTION__, res_network_p->hostname);
 			}
+			res_network_p->is_resolved = 1;
 		}
 	}
 }
