diff --git a/config/parser.go b/config/parser.go index 922c3f4d..087393e5 100644 --- a/config/parser.go +++ b/config/parser.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "os" - "strings" "github.com/mholt/caddy/middleware" ) @@ -183,15 +182,3 @@ func (p *parser) err(kind, msg string) error { msg = fmt.Sprintf("%s:%d - %s error: %s", p.filename, p.line(), kind, msg) return errors.New(msg) } - -// parseAddress takes a host:port string (val), and returns the host -// and port as separate values. Empty strings can be returned if -// either is missing. -func parseAddress(val string) (string, string) { - parts := strings.SplitN(val, ":", 3) - if len(parts) == 1 { - return parts[0], "" - } else { - return parts[0], parts[1] - } -} diff --git a/config/parsing.go b/config/parsing.go index c10af532..07471453 100644 --- a/config/parsing.go +++ b/config/parsing.go @@ -1,6 +1,9 @@ package config -import "errors" +import ( + "errors" + "net" +) // This file contains the recursive-descent parsing // functions. @@ -24,12 +27,12 @@ func (p *parser) begin() error { // address expects that the current token is a host:port // combination. -func (p *parser) address() error { +func (p *parser) address() (err error) { if p.tkn() == "}" || p.tkn() == "{" { return p.err("Syntax", "'"+p.tkn()+"' is not EOF or address") } - p.cfg.Host, p.cfg.Port = parseAddress(p.tkn()) - return nil + p.cfg.Host, p.cfg.Port, err = net.SplitHostPort(p.tkn()) + return } // addressBlock leads into parsing directives, including diff --git a/config/parsing_test.go b/config/parsing_test.go index d6f31257..d912156b 100644 --- a/config/parsing_test.go +++ b/config/parsing_test.go @@ -1,33 +1 @@ package config - -import "testing" - -func TestParseAddress(t *testing.T) { - type addr struct { - host string - port string - } - testCases := []struct { - input string - expected addr - }{ - {input: "host:port", expected: addr{host: "host", port: "port"}}, - {input: "localhost:1234", expected: addr{host: "localhost", port: "1234"}}, - {input: "127.0.0.1:0", expected: addr{host: "127.0.0.1", port: "0"}}, - {input: "127.0.0.1", expected: addr{host: "127.0.0.1", port: ""}}, - {input: "somedomain.com", expected: addr{host: "somedomain.com", port: ""}}, - {input: "somedomain.com:", expected: addr{host: "somedomain.com", port: ""}}, - {input: ":80", expected: addr{host: "", port: "80"}}, - {input: "localhost:8080", expected: addr{host: "localhost", port: "8080"}}, - {input: "", expected: addr{host: "", port: ""}}, - } - for _, test := range testCases { - actualHost, actualPort := parseAddress(test.input) - if actualHost != test.expected.host { - t.Errorf("For '%s' expected host '%s' but got '%s'", test.input, test.expected.host, actualHost) - } - if actualPort != test.expected.port { - t.Errorf("For '%s' expected port '%s' but got '%s'", test.input, test.expected.port, actualPort) - } - } -}