| 
					
				 | 
			
			
				@@ -875,8 +875,7 @@ int connection_handle_write(connection_t *conn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Append <b>len</b> bytes of <b>string</b> onto <b>conn</b>'s 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * outbuf, and ask it to start writing. If it's an OR conn, and an 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * entire TLS record is ready, then try to flush it now. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * outbuf, and ask it to start writing. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void connection_write_to_buf(const char *string, int len, connection_t *conn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -884,33 +883,20 @@ void connection_write_to_buf(const char *string, int len, connection_t *conn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if(write_to_buf(string, len, conn->outbuf) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    log_fn(LOG_WARN,"write_to_buf failed. Closing connection (fd %d).", conn->s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* XXX should call connection_edge_end() ? */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    connection_mark_for_close(conn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(conn->type == CONN_TYPE_AP || conn->type == CONN_TYPE_EXIT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      /* if it failed, it means we have our package/delivery windows set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         wrong compared to our max outbuf size. close the whole circuit. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      log_fn(LOG_WARN,"write_to_buf failed. Closing circuit (fd %d).", conn->s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      circuit_mark_for_close(circuit_get_by_conn(conn)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      log_fn(LOG_WARN,"write_to_buf failed. Closing connection (fd %d).", conn->s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      connection_mark_for_close(conn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   connection_start_writing(conn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#define MIN_TLS_FLUSHLEN 15872 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/* openssl tls record size is 16383, this is close. The goal here is to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * push data out as soon as we know there's enough for a tls record, so 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * during periods of high load we won't read the entire megabyte from 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * input before pushing any data out. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if(connection_speaks_cells(conn) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     conn->outbuf_flushlen < MIN_TLS_FLUSHLEN && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     conn->outbuf_flushlen+len >= MIN_TLS_FLUSHLEN) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    len -= (MIN_TLS_FLUSHLEN - conn->outbuf_flushlen); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    conn->outbuf_flushlen = MIN_TLS_FLUSHLEN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(connection_handle_write(conn) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      log_fn(LOG_WARN,"flushing failed."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if(len > 0) { /* if there's any left over */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    conn->outbuf_flushlen += len; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    connection_start_writing(conn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* because connection_handle_write() above might have stopped writing */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  conn->outbuf_flushlen += len; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Return the conn to addr/port that has the most recent 
			 |