|
@@ -2,6 +2,7 @@ package irc
|
2
|
2
|
|
3
|
3
|
import (
|
4
|
4
|
"crypto/rand"
|
|
5
|
+ "crypto/tls"
|
5
|
6
|
"encoding/binary"
|
6
|
7
|
"fmt"
|
7
|
8
|
"log"
|
|
@@ -37,7 +38,11 @@ func NewServer(config *Config) *Server {
|
37
|
38
|
}
|
38
|
39
|
|
39
|
40
|
go server.receiveCommands(commands)
|
40
|
|
- go server.listen(config.Listen)
|
|
41
|
+
|
|
42
|
+ for _, listenerConf := range config.Listeners {
|
|
43
|
+ go server.listen(listenerConf)
|
|
44
|
+ }
|
|
45
|
+
|
41
|
46
|
return server
|
42
|
47
|
}
|
43
|
48
|
|
|
@@ -63,14 +68,30 @@ func (server *Server) receiveCommands(commands <-chan Command) {
|
63
|
68
|
}
|
64
|
69
|
}
|
65
|
70
|
|
66
|
|
-func (s *Server) listen(addr string) {
|
67
|
|
- listener, err := net.Listen("tcp", addr)
|
|
71
|
+func newListener(config ListenerConfig) (net.Listener, error) {
|
|
72
|
+ if config.IsTLS() {
|
|
73
|
+ certificate, err := tls.LoadX509KeyPair(config.Certificate, config.Key)
|
|
74
|
+ if err != nil {
|
|
75
|
+ return nil, err
|
|
76
|
+ }
|
|
77
|
+ return tls.Listen("tcp", config.Address, &tls.Config{
|
|
78
|
+ Certificates: []tls.Certificate{certificate},
|
|
79
|
+ PreferServerCipherSuites: true,
|
|
80
|
+ MinVersion: tls.VersionTLS12,
|
|
81
|
+ })
|
|
82
|
+ }
|
|
83
|
+
|
|
84
|
+ return net.Listen("tcp", config.Address)
|
|
85
|
+}
|
|
86
|
+
|
|
87
|
+func (s *Server) listen(config ListenerConfig) {
|
|
88
|
+ listener, err := newListener(config)
|
68
|
89
|
if err != nil {
|
69
|
90
|
log.Fatal("Server.Listen: ", err)
|
70
|
91
|
}
|
71
|
92
|
|
72
|
93
|
s.hostname = LookupHostname(listener.Addr())
|
73
|
|
- log.Print("Server.Listen: listening on ", addr)
|
|
94
|
+ log.Print("Server.Listen: listening on ", config.Address)
|
74
|
95
|
|
75
|
96
|
for {
|
76
|
97
|
conn, err := listener.Accept()
|