| 
					
				 | 
			
			
				@@ -2273,13 +2273,24 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* leave version, destport, destip zero */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     connection_write_to_buf(buf, SOCKS4_NETWORK_LEN, ENTRY_TO_CONN(conn)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else if (conn->socks_request->socks_version == 5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    buf[0] = 5; /* version 5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    buf[1] = (char)status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    buf[2] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    buf[3] = 1; /* ipv4 addr */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    memset(buf+4,0,6); /* Set external addr/port to 0. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          The spec doesn't seem to say what to do here. -RD */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    connection_write_to_buf(buf,10,ENTRY_TO_CONN(conn)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    size_t buf_len; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    memset(buf,0,sizeof(buf)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (tor_addr_family(&conn->edge_.base_.addr) == AF_INET) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf[0] = 5; /* version 5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf[1] = (char)status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf[2] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf[3] = 1; /* ipv4 addr */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      /* 4 bytes for the header, 2 bytes for the port, 4 for the address. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf_len = 10; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { /* AF_INET6. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf[0] = 5; /* version 5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf[1] = (char)status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf[2] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf[3] = 4; /* ipv6 addr */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      /* 4 bytes for the header, 2 bytes for the port, 16 for the address. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      buf_len = 22; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    connection_write_to_buf(buf,buf_len,ENTRY_TO_CONN(conn)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* If socks_version isn't 4 or 5, don't send anything. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * This can happen in the case of AP bridges. */ 
			 |