mirror of
https://github.com/btcsuite/btcd.git
synced 2025-03-15 04:11:37 +01:00
Merge 829dfa822e
into bb52d7d78d
This commit is contained in:
commit
aa7e1fd32b
1 changed files with 30 additions and 15 deletions
|
@ -106,24 +106,39 @@ func TorLookupIP(host, proxy string) ([]net.IP, error) {
|
||||||
}
|
}
|
||||||
return nil, ErrTorInvalidProxyResponse
|
return nil, ErrTorInvalidProxyResponse
|
||||||
}
|
}
|
||||||
if buf[3] != 1 {
|
|
||||||
|
addr := make([]net.IP, 1)
|
||||||
|
|
||||||
|
switch buf[3] {
|
||||||
|
case 1:
|
||||||
|
buf = make([]byte, 4)
|
||||||
|
bytes, err := conn.Read(buf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if bytes != 4 {
|
||||||
|
return nil, ErrTorInvalidAddressResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
r := binary.BigEndian.Uint32(buf)
|
||||||
|
addr[0] = net.IPv4(byte(r>>24), byte(r>>16), byte(r>>8), byte(r))
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
buf = make([]byte, 16)
|
||||||
|
bytes, err := conn.Read(buf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if bytes != 16 {
|
||||||
|
return nil, ErrTorInvalidAddressResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
addr[0] = net.IP(buf)
|
||||||
|
default:
|
||||||
|
// Not IPv4 or IPv6.
|
||||||
err := torStatusErrors[torGeneralError]
|
err := torStatusErrors[torGeneralError]
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
buf = make([]byte, 4)
|
|
||||||
bytes, err := conn.Read(buf)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if bytes != 4 {
|
|
||||||
return nil, ErrTorInvalidAddressResponse
|
|
||||||
}
|
|
||||||
|
|
||||||
r := binary.BigEndian.Uint32(buf)
|
|
||||||
|
|
||||||
addr := make([]net.IP, 1)
|
|
||||||
addr[0] = net.IPv4(byte(r>>24), byte(r>>16), byte(r>>8), byte(r))
|
|
||||||
|
|
||||||
return addr, nil
|
return addr, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue