Changeset 317 in code for trunk/cmd/soju
- Timestamp:
- Jun 4, 2020, 6:16:23 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/cmd/soju/main.go
r178 r317 6 6 "log" 7 7 "net" 8 "net/url" 9 "strings" 8 10 9 11 "git.sr.ht/~emersion/soju" … … 12 14 13 15 func main() { 14 var addr, configPath string16 var listen, configPath string 15 17 var debug bool 16 flag.StringVar(& addr, "listen", "", "listening address")18 flag.StringVar(&listen, "listen", "", "listening address") 17 19 flag.StringVar(&configPath, "config", "", "path to configuration file") 18 20 flag.BoolVar(&debug, "debug", false, "enable debug logging") … … 30 32 } 31 33 32 if addr != "" { 33 cfg.Addr = addr 34 if listen != "" { 35 cfg.Listen = append(cfg.Listen, listen) 36 } 37 if len(cfg.Listen) == 0 { 38 cfg.Listen = []string{":6697"} 34 39 } 35 40 … … 39 44 } 40 45 41 var ln net.Listener46 var tlsCfg *tls.Config 42 47 if cfg.TLS != nil { 43 48 cert, err := tls.LoadX509KeyPair(cfg.TLS.CertPath, cfg.TLS.KeyPath) … … 45 50 log.Fatalf("failed to load TLS certificate and key: %v", err) 46 51 } 47 48 tlsCfg := &tls.Config{Certificates: []tls.Certificate{cert}} 49 ln, err = tls.Listen("tcp", cfg.Addr, tlsCfg) 50 if err != nil { 51 log.Fatalf("failed to start TLS listener: %v", err) 52 } 53 } else { 54 var err error 55 ln, err = net.Listen("tcp", cfg.Addr) 56 if err != nil { 57 log.Fatalf("failed to start listener: %v", err) 58 } 52 tlsCfg = &tls.Config{Certificates: []tls.Certificate{cert}} 59 53 } 60 54 … … 65 59 srv.Debug = debug 66 60 67 log.Printf("server listening on %q", cfg.Addr) 68 go func() { 69 if err := srv.Run(); err != nil { 70 log.Fatal(err) 61 for _, listen := range cfg.Listen { 62 listenURI := listen 63 if !strings.Contains(listenURI, ":/") { 64 // This is a raw domain name, make it an URL with an empty scheme 65 listenURI = "//" + listenURI 71 66 } 72 }() 73 log.Fatal(srv.Serve(ln)) 67 u, err := url.Parse(listenURI) 68 if err != nil { 69 log.Fatalf("failed to parse listen URI %q: %v", listen, err) 70 } 71 72 switch u.Scheme { 73 case "ircs", "": 74 if tlsCfg == nil { 75 log.Fatalf("failed to listen on %q: missing TLS configuration", listen) 76 } 77 host := u.Host 78 if _, _, err := net.SplitHostPort(host); err != nil { 79 host = host + ":6697" 80 } 81 ln, err := tls.Listen("tcp", host, tlsCfg) 82 if err != nil { 83 log.Fatalf("failed to start TLS listener on %q: %v", listen, err) 84 } 85 go func() { 86 log.Fatal(srv.Serve(ln)) 87 }() 88 case "irc+insecure": 89 host := u.Host 90 if _, _, err := net.SplitHostPort(host); err != nil { 91 host = host + ":6667" 92 } 93 ln, err := net.Listen("tcp", host) 94 if err != nil { 95 log.Fatalf("failed to start listener on %q: %v", listen, err) 96 } 97 go func() { 98 log.Fatal(srv.Serve(ln)) 99 }() 100 default: 101 log.Fatalf("failed to listen on %q: unsupported scheme", listen) 102 } 103 104 log.Printf("server listening on %q", listen) 105 } 106 log.Fatal(srv.Run()) 74 107 }
Note:
See TracChangeset
for help on using the changeset viewer.