diff --git a/app/cmd/client.go b/app/cmd/client.go index 1240980..7277e12 100644 --- a/app/cmd/client.go +++ b/app/cmd/client.go @@ -12,8 +12,6 @@ import ( "sync" "time" - "github.com/apernet/hysteria/extras/transport/udphop" - "github.com/spf13/cobra" "github.com/spf13/viper" "go.uber.org/zap" @@ -26,6 +24,7 @@ import ( "github.com/apernet/hysteria/app/internal/utils" "github.com/apernet/hysteria/core/client" "github.com/apernet/hysteria/extras/obfs" + "github.com/apernet/hysteria/extras/transport/udphop" ) // Client flags diff --git a/extras/transport/udphop/addr.go b/extras/transport/udphop/addr.go index ccbe3cb..3c70472 100644 --- a/extras/transport/udphop/addr.go +++ b/extras/transport/udphop/addr.go @@ -1,13 +1,19 @@ package udphop import ( - "errors" + "fmt" "net" "strconv" "strings" ) -var ErrInvalidPort = errors.New("invalid port") +type InvalidPortError struct { + PortStr string +} + +func (e InvalidPortError) Error() string { + return fmt.Sprintf("%s is not a valid port number or range", e.PortStr) +} // UDPHopAddr contains an IP address and a list of ports. type UDPHopAddr struct { @@ -57,15 +63,15 @@ func ResolveUDPHopAddr(addr string) (*UDPHopAddr, error) { // Port range portRange := strings.Split(portStr, "-") if len(portRange) != 2 { - return nil, ErrInvalidPort + return nil, InvalidPortError{portStr} } start, err := strconv.ParseUint(portRange[0], 10, 16) if err != nil { - return nil, ErrInvalidPort + return nil, InvalidPortError{portStr} } end, err := strconv.ParseUint(portRange[1], 10, 16) if err != nil { - return nil, ErrInvalidPort + return nil, InvalidPortError{portStr} } if start > end { start, end = end, start @@ -77,7 +83,7 @@ func ResolveUDPHopAddr(addr string) (*UDPHopAddr, error) { // Single port port, err := strconv.ParseUint(portStr, 10, 16) if err != nil { - return nil, ErrInvalidPort + return nil, InvalidPortError{portStr} } result.Ports = append(result.Ports, uint16(port)) }