specify public port

This commit is contained in:
Victor Vieux 2013-06-10 13:56:43 +00:00
parent 956491f853
commit 95d66ebc6b
1 changed files with 32 additions and 14 deletions

View File

@ -485,20 +485,38 @@ type Nat struct {
func parseNat(spec string) (*Nat, error) { func parseNat(spec string) (*Nat, error) {
var nat Nat var nat Nat
if strings.Contains(spec, ":") {
specParts := strings.Split(spec, ":")
if len(specParts) != 2 {
return nil, fmt.Errorf("Invalid port format.")
}
// If spec starts with ':', external and internal ports must be the same. // If spec starts with ':', external and internal ports must be the same.
// This might fail if the requested external port is not available. // This might fail if the requested external port is not available.
var sameFrontend bool var sameFrontend bool
if spec[0] == ':' { if len(specParts[0]) == 0 {
sameFrontend = true sameFrontend = true
spec = spec[1:] } else {
front, err := strconv.ParseUint(specParts[0], 10, 16)
if err != nil {
return nil, err
} }
nat.Frontend = int(front)
}
back, err := strconv.ParseUint(specParts[1], 10, 16)
if err != nil {
return nil, err
}
nat.Backend = int(back)
if sameFrontend {
nat.Frontend = nat.Backend
}
} else {
port, err := strconv.ParseUint(spec, 10, 16) port, err := strconv.ParseUint(spec, 10, 16)
if err != nil { if err != nil {
return nil, err return nil, err
} }
nat.Backend = int(port) nat.Backend = int(port)
if sameFrontend {
nat.Frontend = nat.Backend
} }
nat.Proto = "tcp" nat.Proto = "tcp"
return &nat, nil return &nat, nil