| 
					
				 | 
			
			
				@@ -1163,6 +1163,30 @@ options_act_reversible(or_options_t *old_options, char **msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** DOCDOC */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+options_need_geoip_info(or_options_t *options, const char **reason_out) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int bridge_usage = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    options->BridgeRelay && options->BridgeRecordUsageByCountry; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int routerset_usage = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    routerset_needs_geoip(options->EntryNodes) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    routerset_needs_geoip(options->ExitNodes) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    routerset_needs_geoip(options->ExcludeExitNodes) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    routerset_needs_geoip(options->ExcludeNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (routerset_usage && reason_out) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    *reason_out = "We've been configured to use (or avoid) nodes in certain " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "contries, and we need GEOIP information to figure out which ones they " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "are."; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else if (bridge_usage && reason_out) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    *reason_out = "We've been configured to see which countries can access " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "us as a bridge, and we need GEOIP information to tell which countries " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "clients are in."; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return bridge_usage || routerset_usage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Fetch the active option list, and take actions based on it. All of the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * things we do should survive being done repeatedly.  If present, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * <b>old_options</b> contains the previous value of the options. 
			 |