You've already forked v2ray-core
simplify port range
This commit is contained in:
68
common/net/port_json.go
Normal file
68
common/net/port_json.go
Normal file
@@ -0,0 +1,68 @@
|
||||
// +build json
|
||||
|
||||
package net
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/v2ray/v2ray-core/common/log"
|
||||
)
|
||||
|
||||
var (
|
||||
InvalidPortRange = errors.New("Invalid port range.")
|
||||
)
|
||||
|
||||
func (this *PortRange) UnmarshalJSON(data []byte) error {
|
||||
var maybeint int
|
||||
err := json.Unmarshal(data, &maybeint)
|
||||
if err == nil {
|
||||
if maybeint <= 0 || maybeint >= 65535 {
|
||||
log.Error("Invalid port [%s]", string(data))
|
||||
return InvalidPortRange
|
||||
}
|
||||
this.From = Port(maybeint)
|
||||
this.To = Port(maybeint)
|
||||
return nil
|
||||
}
|
||||
|
||||
var maybestring string
|
||||
err = json.Unmarshal(data, &maybestring)
|
||||
if err == nil {
|
||||
pair := strings.SplitN(maybestring, "-", 2)
|
||||
if len(pair) == 1 {
|
||||
value, err := strconv.Atoi(pair[0])
|
||||
if err != nil || value <= 0 || value >= 65535 {
|
||||
log.Error("Invalid from port %s", pair[0])
|
||||
return InvalidPortRange
|
||||
}
|
||||
this.From = Port(value)
|
||||
this.To = Port(value)
|
||||
return nil
|
||||
} else if len(pair) == 2 {
|
||||
from, err := strconv.Atoi(pair[0])
|
||||
if err != nil || from <= 0 || from >= 65535 {
|
||||
log.Error("Invalid from port %s", pair[0])
|
||||
return InvalidPortRange
|
||||
}
|
||||
this.From = Port(from)
|
||||
|
||||
to, err := strconv.Atoi(pair[1])
|
||||
if err != nil || to <= 0 || to >= 65535 {
|
||||
log.Error("Invalid to port %s", pair[1])
|
||||
return InvalidPortRange
|
||||
}
|
||||
this.To = Port(to)
|
||||
|
||||
if this.From > this.To {
|
||||
log.Error("Invalid port range %d -> %d", this.From, this.To)
|
||||
return InvalidPortRange
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
return InvalidPortRange
|
||||
}
|
||||
Reference in New Issue
Block a user