|  | @@ -4,6 +4,7 @@ import (
 | 
											
												
													
														|  |  	"net"
 |  |  	"net"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	"github.com/v2ray/v2ray-core/common/log"
 |  |  	"github.com/v2ray/v2ray-core/common/log"
 | 
											
												
													
														|  | 
 |  | +	"github.com/v2ray/v2ray-core/common/serial"
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  // Address represents a network address to be communicated with. It may be an IP address or domain
 |  |  // Address represents a network address to be communicated with. It may be an IP address or domain
 | 
											
										
											
												
													
														|  | @@ -28,15 +29,6 @@ func ParseAddress(addr string) Address {
 | 
											
												
													
														|  |  	return DomainAddress(addr)
 |  |  	return DomainAddress(addr)
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -func allZeros(data []byte) bool {
 |  | 
 | 
											
												
													
														|  | -	for _, v := range data {
 |  | 
 | 
											
												
													
														|  | -		if v != 0 {
 |  | 
 | 
											
												
													
														|  | -			return false
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -	return true
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  // IPAddress creates an Address with given IP and port.
 |  |  // IPAddress creates an Address with given IP and port.
 | 
											
												
													
														|  |  func IPAddress(ip []byte) Address {
 |  |  func IPAddress(ip []byte) Address {
 | 
											
												
													
														|  |  	switch len(ip) {
 |  |  	switch len(ip) {
 | 
											
										
											
												
													
														|  | @@ -44,7 +36,7 @@ func IPAddress(ip []byte) Address {
 | 
											
												
													
														|  |  		var addr IPv4Address = [4]byte{ip[0], ip[1], ip[2], ip[3]}
 |  |  		var addr IPv4Address = [4]byte{ip[0], ip[1], ip[2], ip[3]}
 | 
											
												
													
														|  |  		return &addr
 |  |  		return &addr
 | 
											
												
													
														|  |  	case net.IPv6len:
 |  |  	case net.IPv6len:
 | 
											
												
													
														|  | -		if allZeros(ip[0:10]) && ip[10] == 0xff && ip[11] == 0xff {
 |  | 
 | 
											
												
													
														|  | 
 |  | +		if serial.BytesLiteral(ip[0:10]).All(0) && serial.BytesLiteral(ip[10:12]).All(0xff) {
 | 
											
												
													
														|  |  			return IPAddress(ip[12:16])
 |  |  			return IPAddress(ip[12:16])
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  		var addr IPv6Address = [16]byte{
 |  |  		var addr IPv6Address = [16]byte{
 |