diff --git a/cmd/outline-ss-server/config.go b/cmd/outline-ss-server/config.go index 8d8cd37e..112ba58f 100644 --- a/cmd/outline-ss-server/config.go +++ b/cmd/outline-ss-server/config.go @@ -30,8 +30,12 @@ type Service struct { Keys []Key } +type ListenerType string + +const listenerTypeDirect ListenerType = "direct" + type Listener struct { - Type string + Type ListenerType Address string } @@ -79,8 +83,8 @@ func ReadConfig(filename string) (*Config, error) { for port, keys := range ports { s := Service{ Listeners: []Listener{ - Listener{Type: "direct", Address: fmt.Sprintf("tcp://[::]:%d", port)}, - Listener{Type: "direct", Address: fmt.Sprintf("udp://[::]:%d", port)}, + Listener{Type: listenerTypeDirect, Address: fmt.Sprintf("tcp://[::]:%d", port)}, + Listener{Type: listenerTypeDirect, Address: fmt.Sprintf("udp://[::]:%d", port)}, }, Keys: keys, } @@ -111,7 +115,7 @@ func validateListener(u *url.URL) error { return nil } -func NewListener(addr string) (io.Closer, error) { +func newListener(addr string) (io.Closer, error) { u, err := url.Parse(addr) if err != nil { return nil, err diff --git a/cmd/outline-ss-server/config_test.go b/cmd/outline-ss-server/config_test.go index 329c517f..88660388 100644 --- a/cmd/outline-ss-server/config_test.go +++ b/cmd/outline-ss-server/config_test.go @@ -29,8 +29,8 @@ func TestReadConfig(t *testing.T) { Services: []Service{ Service{ Listeners: []Listener{ - Listener{Type: "direct", Address: "tcp://[::]:9000"}, - Listener{Type: "direct", Address: "udp://[::]:9000"}, + Listener{Type: listenerTypeDirect, Address: "tcp://[::]:9000"}, + Listener{Type: listenerTypeDirect, Address: "udp://[::]:9000"}, }, Keys: []Key{ Key{"user-0", "chacha20-ietf-poly1305", "Secret0"}, @@ -39,8 +39,8 @@ func TestReadConfig(t *testing.T) { }, Service{ Listeners: []Listener{ - Listener{Type: "direct", Address: "tcp://[::]:9001"}, - Listener{Type: "direct", Address: "udp://[::]:9001"}, + Listener{Type: listenerTypeDirect, Address: "tcp://[::]:9001"}, + Listener{Type: listenerTypeDirect, Address: "udp://[::]:9001"}, }, Keys: []Key{ Key{"user-2", "chacha20-ietf-poly1305", "Secret2"}, @@ -59,8 +59,8 @@ func TestReadConfigParsesDeprecatedFormat(t *testing.T) { Services: []Service{ Service{ Listeners: []Listener{ - Listener{Type: "direct", Address: "tcp://[::]:9000"}, - Listener{Type: "direct", Address: "udp://[::]:9000"}, + Listener{Type: listenerTypeDirect, Address: "tcp://[::]:9000"}, + Listener{Type: listenerTypeDirect, Address: "udp://[::]:9000"}, }, Keys: []Key{ Key{"user-0", "chacha20-ietf-poly1305", "Secret0"}, @@ -69,8 +69,8 @@ func TestReadConfigParsesDeprecatedFormat(t *testing.T) { }, Service{ Listeners: []Listener{ - Listener{Type: "direct", Address: "tcp://[::]:9001"}, - Listener{Type: "direct", Address: "udp://[::]:9001"}, + Listener{Type: listenerTypeDirect, Address: "tcp://[::]:9001"}, + Listener{Type: listenerTypeDirect, Address: "udp://[::]:9001"}, }, Keys: []Key{ Key{"user-2", "chacha20-ietf-poly1305", "Secret2"}, diff --git a/cmd/outline-ss-server/main.go b/cmd/outline-ss-server/main.go index 323bcda7..2af841cc 100644 --- a/cmd/outline-ss-server/main.go +++ b/cmd/outline-ss-server/main.go @@ -49,8 +49,6 @@ const tcpReadTimeout time.Duration = 59 * time.Second // A UDP NAT timeout of at least 5 minutes is recommended in RFC 4787 Section 4.3. const defaultNatTimeout time.Duration = 5 * time.Minute -var directListenerType = "direct" - func init() { var prefix = "%{level:.1s}%{time:2006-01-02T15:04:05.000Z07:00} %{pid} %{shortfile}]" if term.IsTerminal(int(os.Stderr.Fd())) { @@ -98,7 +96,7 @@ func (s *SSServer) serve(listener io.Closer, cipherList service.CipherList) erro } func (s *SSServer) start(addr string, cipherList service.CipherList) (io.Closer, error) { - listener, err := NewListener(addr) + listener, err := newListener(addr) if err != nil { //lint:ignore ST1005 Shadowsocks is capitalized. return nil, fmt.Errorf("Shadowsocks service failed to start on address %v: %w", addr, err) @@ -107,7 +105,7 @@ func (s *SSServer) start(addr string, cipherList service.CipherList) (io.Closer, err = s.serve(listener, cipherList) if err != nil { - return nil, fmt.Errorf("failed to serve on listener %w: %w", listener, err) + return nil, fmt.Errorf("failed to serve on listener %v: %w", listener, err) } return listener, nil @@ -168,7 +166,7 @@ func (s *SSServer) loadConfig(filename string) error { for _, listener := range serviceConfig.Listeners { switch t := listener.Type; t { // TODO: Support more listener types. - case directListenerType: + case listenerTypeDirect: addrChanges[listener.Address] = 1 addrCiphers[listener.Address] = ciphers default: