Changeset 317 in code
- Timestamp:
- Jun 4, 2020, 6:16:23 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/README.md
r290 r317 14 14 15 15 go run ./cmd/sojuctl create-user <username> 16 go run ./cmd/soju 16 go run ./cmd/soju -listen irc+insecure://127.0.0.1:6667 17 17 18 18 Then connect with username `<username>/chat.freenode.net` and join `#soju`. -
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 } -
trunk/config/config.go
r200 r317 15 15 16 16 type Server struct { 17 Addrstring17 Listen []string 18 18 Hostname string 19 19 TLS *TLS … … 29 29 } 30 30 return &Server{ 31 Addr: ":6667",32 31 Hostname: hostname, 33 32 SQLDriver: "sqlite3", … … 69 68 switch d.Name { 70 69 case "listen": 71 if err := d.parseParams(&srv.Addr); err != nil { 70 var uri string 71 if err := d.parseParams(&uri); err != nil { 72 72 return nil, err 73 73 } 74 srv.Listen = append(srv.Listen, uri) 74 75 case "hostname": 75 76 if err := d.parseParams(&srv.Hostname); err != nil { -
trunk/doc/soju.1.scd
r307 r317 57 57 passwords). 58 58 59 *-listen* < address>60 Listening address (default: ":6667").59 *-listen* <uri> 60 Listening URI (default: ":6697"). 61 61 62 62 # CONFIG FILE … … 64 64 The config file has one directive per line. 65 65 66 *listen* <address> 67 Listening address (default: ":6667"). 66 *listen* <uri> 67 Listening URI (default: ":6697"). 68 69 The following URIs are supported: 70 71 - _[ircs://][host][:port]_ listens with TLS over TCP (default port if 72 omitted: 6697) 73 - _irc+insecure://[host][:port]_ listens with plain-text over TCP (default 74 port if omitted: 6667) 75 76 If the scheme is omitted, "ircs" is assumed. If multiple *listen* 77 directives are specified, soju will listen on each of them. 68 78 69 79 *hostname* <name> … … 98 108 99 109 _addr_ supports several connection types: 110 100 111 - _[ircs://]host[:port]_ connects with TLS over TCP 101 112 - _irc+insecure://host[:port]_ connects with plain-text TCP
Note:
See TracChangeset
for help on using the changeset viewer.