| 
														
															@@ -469,6 +469,33 @@ directory_clean_last_hid_serv_requests(void) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } 
														 | 
														
														 | 
														
															   } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+/** Remove all requests related to the hidden service named 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ * <b>onion_address</b> from the history of times of requests to 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ * hidden service directories. */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+static void 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+purge_hid_serv_from_last_hid_serv_requests(const char *onion_address) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+{ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  strmap_iter_t *iter; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  strmap_t *last_hid_serv_requests = get_last_hid_serv_requests(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  /* XXX023 tor_assert(strlen(onion_address) == REND_SERVICE_ID_LEN_BASE32); */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  for (iter = strmap_iter_init(last_hid_serv_requests); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+       !strmap_iter_done(iter); ) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    const char *key; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    void *val; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    strmap_iter_get(iter, &key, &val); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    /* XXX023 tor_assert(strlen(key) == LAST_HID_SERV_REQUEST_KEY_LEN); */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if (tor_memeq(key + LAST_HID_SERV_REQUEST_KEY_LEN - 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                  REND_SERVICE_ID_LEN_BASE32, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                  onion_address, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                  REND_SERVICE_ID_LEN_BASE32)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      iter = strmap_iter_next_rmv(last_hid_serv_requests, iter); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      tor_free(val); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    } else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      iter = strmap_iter_next(last_hid_serv_requests, iter); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 /** Purge the history of request times to hidden service directories, 
														 | 
														
														 | 
														
															 /** Purge the history of request times to hidden service directories, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  * so that future lookups of an HS descriptor will not fail because we 
														 | 
														
														 | 
														
															  * so that future lookups of an HS descriptor will not fail because we 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  * accessed all of the HSDir relays responsible for the descriptor 
														 | 
														
														 | 
														
															  * accessed all of the HSDir relays responsible for the descriptor 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -938,6 +965,9 @@ rend_client_note_connection_attempt_ended(const char *onion_address) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                       rend_intro_point_t *, ip, 
														 | 
														
														 | 
														
															                       rend_intro_point_t *, ip, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                       ip->timed_out = 0; ); 
														 | 
														
														 | 
														
															                       ip->timed_out = 0; ); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } 
														 | 
														
														 | 
														
															   } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  /* Remove the HS's entries in last_hid_serv_requests. */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  purge_hid_serv_from_last_hid_serv_requests(onion_address); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 /** Return a newly allocated extend_info_t* for a randomly chosen introduction 
														 | 
														
														 | 
														
															 /** Return a newly allocated extend_info_t* for a randomly chosen introduction 
														 |