| 
					
				 | 
			
			
				@@ -224,36 +224,46 @@ ssl_state_to_string(int ssl_state) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return buf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+tor_tls_log_one_error(tor_tls_t *tls, unsigned long err, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  int severity, int domain, const char *doing) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const char *state = NULL, *addr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const char *msg, *lib, *func; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int st; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  st = (tls && tls->ssl) ? tls->ssl->state : -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  state = (st>=0)?ssl_state_to_string(st):"---"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  addr = tls ? tls->address : NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  msg = (const char*)ERR_reason_error_string(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  lib = (const char*)ERR_lib_error_string(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  func = (const char*)ERR_func_error_string(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!msg) msg = "(null)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!lib) lib = "(null)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!func) func = "(null)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (doing) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        doing, addr?" with ":"", addr?addr:"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg, lib, func, state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        addr?" with ":"", addr?addr:"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg, lib, func, state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Log all pending tls errors at level <b>severity</b>.  Use 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * <b>doing</b> to describe our current activities. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 tls_log_errors(tor_tls_t *tls, int severity, int domain, const char *doing) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char *state = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  int st; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   unsigned long err; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char *msg, *lib, *func, *addr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  addr = tls ? tls->address : NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  st = (tls && tls->ssl) ? tls->ssl->state : -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   while ((err = ERR_get_error()) != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    msg = (const char*)ERR_reason_error_string(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    lib = (const char*)ERR_lib_error_string(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    func = (const char*)ERR_func_error_string(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!state) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      state = (st>=0)?ssl_state_to_string(st):"---"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!msg) msg = "(null)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!lib) lib = "(null)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!func) func = "(null)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (doing) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          doing, addr?" with ":"", addr?addr:"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          msg, lib, func, state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          addr?" with ":"", addr?addr:"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          msg, lib, func, state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tor_tls_log_one_error(tls, err, severity, domain, doing); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |