[or-cvs] r9202: Expose a function from eventdns.c to set options without hav (in tor/trunk: . src/or)

nickm at seul.org nickm at seul.org
Thu Dec 28 21:29:33 UTC 2006


Author: nickm
Date: 2006-12-28 16:29:31 -0500 (Thu, 28 Dec 2006)
New Revision: 9202

Modified:
   tor/trunk/
   tor/trunk/src/or/eventdns.c
   tor/trunk/src/or/eventdns.h
Log:
 r11726 at Kushana:  nickm | 2006-12-28 16:24:06 -0500
 Expose a function from eventdns.c to set options without having to make a fake configuration file.  Also, add more settable options



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r11726] on c95137ef-5f19-0410-b913-86e773d04f59

Modified: tor/trunk/src/or/eventdns.c
===================================================================
--- tor/trunk/src/or/eventdns.c	2006-12-28 21:29:26 UTC (rev 9201)
+++ tor/trunk/src/or/eventdns.c	2006-12-28 21:29:31 UTC (rev 9202)
@@ -295,7 +295,7 @@
 static const struct timeval global_nameserver_timeouts[] = {{10, 0}, {60, 0}, {300, 0}, {900, 0}, {3600, 0}};
 static const int global_nameserver_timeouts_length = sizeof(global_nameserver_timeouts)/sizeof(struct timeval);
 
-const char *const evdns_error_strings[] = {"no error", "The name server was unable to interpret the query", "The name server suffered an internal error", "The requested domain name does not exist", "The name server refused to reply to the request"};
+static const char *const evdns_error_strings[] = {"no error", "The name server was unable to interpret the query", "The name server suffered an internal error", "The requested domain name does not exist", "The name server refused to reply to the request"};
 
 static struct nameserver *nameserver_pick(void);
 static void evdns_request_insert(struct request *req, struct request **head);
@@ -2490,6 +2490,64 @@
 	return r;
 }
 
+// helper version of atoi that returns -1 on error and clips to bounds.
+static int
+strtoint_clipped(const char *const str, int min, int max)
+{
+	int r = strtoint(str);
+	if (r == -1)
+		return r;
+	else if (r<min)
+		return min;
+	else if (r>max)
+		return max;
+	else
+		return r;
+}
+
+// exported function
+int
+evdns_set_option(const char *option, const char *val, int flags)
+{
+	if (!strncmp(option, "ndots:", 6)) {
+		const int ndots = strtoint(val);
+		if (ndots == -1) return -1;
+		if (!(flags & DNS_OPTION_SEARCH)) return 0;
+		log(EVDNS_LOG_DEBUG, "Setting ndots to %d", ndots);
+		if (!global_search_state) global_search_state = search_state_new();
+		if (!global_search_state) return -1;
+		global_search_state->ndots = ndots;
+	} else if (!strncmp(option, "timeout:", 8)) {
+		const int timeout = strtoint(val);
+		if (timeout == -1) return -1;
+		if (!(flags & DNS_OPTION_MISC)) return 0;
+		log(EVDNS_LOG_DEBUG, "Setting timeout to %d", timeout);
+		global_timeout.tv_sec = timeout;
+	} else if (!strncmp(option, "max-timeouts:", 12)) {
+		const int maxtimeout = strtoint_clipped(val, 1, 255);
+		if (maxtimeout == -1) return -1;
+		if (!(flags & DNS_OPTION_MISC)) return 0;
+		log(EVDNS_LOG_DEBUG, "Setting maximum allowed timeouts to %d",
+			maxtimeout);
+		global_max_nameserver_timeout = maxtimeout;
+	} else if (!strncmp(option, "max-inflight:", 13)) {
+		const int maxinflight = strtoint_clipped(val, 1, 65000);
+		if (maxinflight == -1) return -1;
+		if (!(flags & DNS_OPTION_MISC)) return 0;
+		log(EVDNS_LOG_DEBUG, "Setting maximum inflight requests to %d",
+			maxinflight);
+		global_max_requests_inflight = maxinflight;
+	} else if (!strncmp(option, "attempts:", 9)) {
+		int retries = strtoint(val);
+		if (retries == -1) return -1;
+		if (retries > 255) retries = 255;
+		if (!(flags & DNS_OPTION_MISC)) return 0;
+		log(EVDNS_LOG_DEBUG, "Setting retries to %d", retries);
+		global_max_retransmits = retries;
+	}
+	return 0;
+}
+
 static void
 resolv_conf_parse_line(char *const start, int flags) {
 	char *strtok_state;
@@ -2523,30 +2581,9 @@
 		search_reverse();
 	} else if (!strcmp(first_token, "options")) {
 		const char *option;
-
 		while ((option = NEXT_TOKEN)) {
-			if (!strncmp(option, "ndots:", 6)) {
-				const int ndots = strtoint(&option[6]);
-				if (ndots == -1) continue;
-				if (!(flags & DNS_OPTION_SEARCH)) continue;
-				log(EVDNS_LOG_DEBUG, "Setting ndots to %d", ndots);
-				if (!global_search_state) global_search_state = search_state_new();
-								if (!global_search_state) return;
-				global_search_state->ndots = ndots;
-			} else if (!strncmp(option, "timeout:", 8)) {
-				const int timeout = strtoint(&option[8]);
-				if (timeout == -1) continue;
-				if (!(flags & DNS_OPTION_MISC)) continue;
-				log(EVDNS_LOG_DEBUG, "Setting timeout to %d", timeout);
-				global_timeout.tv_sec = timeout;
-			} else if (!strncmp(option, "attempts:", 9)) {
-				int retries = strtoint(&option[9]);
-				if (retries == -1) continue;
-				if (retries > 255) retries = 255;
-				if (!(flags & DNS_OPTION_MISC)) continue;
-				log(EVDNS_LOG_DEBUG, "Setting retries to %d", retries);
-				global_max_retransmits = retries;
-			}
+			const char *val = strchr(option, ':');
+            evdns_set_option(option, val ? val+1 : "", flags);
 		}
 	}
 #undef NEXT_TOKEN

Modified: tor/trunk/src/or/eventdns.h
===================================================================
--- tor/trunk/src/or/eventdns.h	2006-12-28 21:29:26 UTC (rev 9201)
+++ tor/trunk/src/or/eventdns.h	2006-12-28 21:29:31 UTC (rev 9202)
@@ -269,6 +269,7 @@
 struct in6_addr;
 int evdns_resolve_reverse(struct in_addr *in, int flags, evdns_callback_type callback, void *ptr);
 int evdns_resolve_reverse_ipv6(struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr);
+int evdns_set_option(const char *option, const char *val, int flags);
 int evdns_resolv_conf_parse(int flags, const char *);
 #ifdef MS_WINDOWS
 int evdns_config_windows_nameservers(void);



More information about the tor-commits mailing list