mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
Wrap client NAT log
This commit is contained in:
parent
6310ca4381
commit
e4c01f0595
2 changed files with 12 additions and 24 deletions
|
@ -237,7 +237,7 @@ func (conn *SnowflakeConn) Close() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop through all provided STUN servers until we exhaust the list or find
|
// loop through all provided STUN servers until we exhaust the list or find
|
||||||
// one that is compatable with RFC 5780
|
// one that is compatible with RFC 5780
|
||||||
func updateNATType(servers []webrtc.ICEServer, broker *BrokerChannel) {
|
func updateNATType(servers []webrtc.ICEServer, broker *BrokerChannel) {
|
||||||
|
|
||||||
var restrictedNAT bool
|
var restrictedNAT bool
|
||||||
|
@ -245,7 +245,10 @@ func updateNATType(servers []webrtc.ICEServer, broker *BrokerChannel) {
|
||||||
for _, server := range servers {
|
for _, server := range servers {
|
||||||
addr := strings.TrimPrefix(server.URLs[0], "stun:")
|
addr := strings.TrimPrefix(server.URLs[0], "stun:")
|
||||||
restrictedNAT, err = nat.CheckIfRestrictedNAT(addr)
|
restrictedNAT, err = nat.CheckIfRestrictedNAT(addr)
|
||||||
if err == nil {
|
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Warning: NAT checking failed for server at %s: %s", addr, err)
|
||||||
|
} else {
|
||||||
if restrictedNAT {
|
if restrictedNAT {
|
||||||
broker.SetNATType(nat.NATRestricted)
|
broker.SetNATType(nat.NATRestricted)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -49,8 +49,7 @@ func isRestrictedMapping(addrStr string) (bool, error) {
|
||||||
|
|
||||||
mapTestConn, err := connect(addrStr)
|
mapTestConn, err := connect(addrStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error creating STUN connection: %s", err.Error())
|
return false, fmt.Errorf("Error creating STUN connection: %w", err)
|
||||||
return false, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defer mapTestConn.Close()
|
defer mapTestConn.Close()
|
||||||
|
@ -59,48 +58,34 @@ func isRestrictedMapping(addrStr string) (bool, error) {
|
||||||
message := stun.MustBuild(stun.TransactionID, stun.BindingRequest)
|
message := stun.MustBuild(stun.TransactionID, stun.BindingRequest)
|
||||||
|
|
||||||
resp, err := mapTestConn.RoundTrip(message, mapTestConn.PrimaryAddr)
|
resp, err := mapTestConn.RoundTrip(message, mapTestConn.PrimaryAddr)
|
||||||
if err == ErrTimedOut {
|
|
||||||
log.Printf("Error: no response from server")
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error receiving response from server: %s", err.Error())
|
return false, fmt.Errorf("Error completing roundtrip map test: %w", err)
|
||||||
return false, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decoding XOR-MAPPED-ADDRESS attribute from message.
|
// Decoding XOR-MAPPED-ADDRESS attribute from message.
|
||||||
if err = xorAddr1.GetFrom(resp); err != nil {
|
if err = xorAddr1.GetFrom(resp); err != nil {
|
||||||
log.Printf("Error retrieving XOR-MAPPED-ADDRESS resonse: %s", err.Error())
|
return false, fmt.Errorf("Error retrieving XOR-MAPPED-ADDRESS resonse: %w", err)
|
||||||
return false, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decoding OTHER-ADDRESS attribute from message.
|
// Decoding OTHER-ADDRESS attribute from message.
|
||||||
var otherAddr stun.OtherAddress
|
var otherAddr stun.OtherAddress
|
||||||
if err = otherAddr.GetFrom(resp); err != nil {
|
if err = otherAddr.GetFrom(resp); err != nil {
|
||||||
log.Println("NAT discovery feature not supported by this server")
|
return false, fmt.Errorf("NAT discovery feature not supported: %w", err)
|
||||||
return false, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = mapTestConn.AddOtherAddr(otherAddr.String()); err != nil {
|
if err = mapTestConn.AddOtherAddr(otherAddr.String()); err != nil {
|
||||||
log.Printf("Failed to resolve address %s\t", otherAddr.String())
|
return false, fmt.Errorf("Error resolving address %s: %w", otherAddr.String(), err)
|
||||||
return false, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test II: Send binding request to other address
|
// Test II: Send binding request to other address
|
||||||
resp, err = mapTestConn.RoundTrip(message, mapTestConn.OtherAddr)
|
resp, err = mapTestConn.RoundTrip(message, mapTestConn.OtherAddr)
|
||||||
if err == ErrTimedOut {
|
|
||||||
log.Printf("Error: no response from server")
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error retrieving server response: %s", err.Error())
|
return false, fmt.Errorf("Error retrieveing server response: %w", err)
|
||||||
return false, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decoding XOR-MAPPED-ADDRESS attribute from message.
|
// Decoding XOR-MAPPED-ADDRESS attribute from message.
|
||||||
if err = xorAddr2.GetFrom(resp); err != nil {
|
if err = xorAddr2.GetFrom(resp); err != nil {
|
||||||
log.Printf("Error retrieving XOR-MAPPED-ADDRESS resonse: %s", err.Error())
|
return false, fmt.Errorf("Error retrieving XOR-MAPPED-ADDRESS resonse: %w", err)
|
||||||
return false, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return xorAddr1.String() != xorAddr2.String(), nil
|
return xorAddr1.String() != xorAddr2.String(), nil
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue