| 
					
				 | 
			
			
				@@ -1413,6 +1413,33 @@ parse_short_policy(const char *summary) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** Write <b>policy</b> back out into a string. Used only for unit tests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * currently. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const char * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+write_short_policy(const short_policy_t *policy) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  char *answer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  smartlist_t *sl = smartlist_new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  smartlist_add_asprintf(sl, "%s", policy->is_accept ? "accept " : "reject "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for(i=0; i < policy->n_entries; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const short_policy_entry_t *e = &policy->entries[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (e->min_port == e->max_port) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      smartlist_add_asprintf(sl, "%d", e->min_port); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      smartlist_add_asprintf(sl, "%d-%d", e->min_port, e->max_port); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (i < policy->n_entries-1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      smartlist_add(sl, tor_strdup(",")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  answer = smartlist_join_strings(sl, "", 0, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  SMARTLIST_FOREACH(sl, char *, a, tor_free(a)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  smartlist_free(sl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return answer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Release all storage held in <b>policy</b>. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 short_policy_free(short_policy_t *policy) 
			 |