package ice
import (
"fmt"
"net/netip"
"strings"
)
const (
udp = "udp"
tcp = "tcp"
udp4 = "udp4"
udp6 = "udp6"
tcp4 = "tcp4"
tcp6 = "tcp6"
)
func supportedNetworkTypes() []NetworkType {
return []NetworkType {
NetworkTypeUDP4 ,
NetworkTypeUDP6 ,
NetworkTypeTCP4 ,
NetworkTypeTCP6 ,
}
}
type NetworkType int
const (
NetworkTypeUDP4 NetworkType = iota + 1
NetworkTypeUDP6
NetworkTypeTCP4
NetworkTypeTCP6
)
func (t NetworkType ) String () string {
switch t {
case NetworkTypeUDP4 :
return udp4
case NetworkTypeUDP6 :
return udp6
case NetworkTypeTCP4 :
return tcp4
case NetworkTypeTCP6 :
return tcp6
default :
return ErrUnknownType .Error()
}
}
func (t NetworkType ) IsUDP () bool {
return t == NetworkTypeUDP4 || t == NetworkTypeUDP6
}
func (t NetworkType ) IsTCP () bool {
return t == NetworkTypeTCP4 || t == NetworkTypeTCP6
}
func (t NetworkType ) NetworkShort () string {
switch t {
case NetworkTypeUDP4 , NetworkTypeUDP6 :
return udp
case NetworkTypeTCP4 , NetworkTypeTCP6 :
return tcp
default :
return ErrUnknownType .Error()
}
}
func (t NetworkType ) IsReliable () bool {
switch t {
case NetworkTypeUDP4 , NetworkTypeUDP6 :
return false
case NetworkTypeTCP4 , NetworkTypeTCP6 :
return true
}
return false
}
func (t NetworkType ) IsIPv4 () bool {
switch t {
case NetworkTypeUDP4 , NetworkTypeTCP4 :
return true
case NetworkTypeUDP6 , NetworkTypeTCP6 :
return false
}
return false
}
func (t NetworkType ) IsIPv6 () bool {
switch t {
case NetworkTypeUDP4 , NetworkTypeTCP4 :
return false
case NetworkTypeUDP6 , NetworkTypeTCP6 :
return true
}
return false
}
func determineNetworkType(network string , ip netip .Addr ) (NetworkType , error ) {
ip = ip .Unmap ()
switch {
case strings .HasPrefix (strings .ToLower (network ), udp ):
if ip .Is4 () {
return NetworkTypeUDP4 , nil
}
return NetworkTypeUDP6 , nil
case strings .HasPrefix (strings .ToLower (network ), tcp ):
if ip .Is4 () {
return NetworkTypeTCP4 , nil
}
return NetworkTypeTCP6 , nil
}
return NetworkType (0 ), fmt .Errorf ("%w from %s %s" , ErrDetermineNetworkType , network , ip )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .