@@ -4,13 +4,15 @@ import (
44 "crypto"
55 "crypto/rsa"
66 "crypto/sha256"
7+ "crypto/tls"
78 "crypto/x509"
89 "encoding/pem"
910 "github.com/RoboCup-SSL/ssl-game-controller/pkg/refproto"
1011 "github.com/golang/protobuf/proto"
1112 "io/ioutil"
1213 "log"
1314 "net"
15+ "os"
1416 "strings"
1517)
1618
@@ -53,6 +55,41 @@ func (s *Server) Listen(address string) {
5355 }
5456}
5557
58+ func (s * Server ) ListenTls (address string ) {
59+
60+ if _ , err := os .Stat ("server.crt" ); os .IsNotExist (err ) {
61+ log .Println ("Missing certificate for TLS endpoint. Put a server.crt in the working dir." )
62+ return
63+ }
64+ if _ , err := os .Stat ("server.key" ); os .IsNotExist (err ) {
65+ log .Println ("Missing certificate key for TLS endpoint. Put a server.key in the working dir." )
66+ return
67+ }
68+
69+ cer , err := tls .LoadX509KeyPair ("server.crt" , "server.key" )
70+ if err != nil {
71+ log .Printf ("Could not load X509 key pair: %v" , err )
72+ return
73+ }
74+
75+ config := & tls.Config {Certificates : []tls.Certificate {cer }}
76+ listener , err := tls .Listen ("tcp" , address , config )
77+ if err != nil {
78+ log .Printf ("Failed to listen on %v: %v" , address , err )
79+ return
80+ }
81+ log .Print ("Listening on " , address )
82+
83+ for {
84+ conn , err := listener .Accept ()
85+ if err != nil {
86+ log .Print ("Could not accept connection: " , err )
87+ } else {
88+ go s .ConnectionHandler (conn )
89+ }
90+ }
91+ }
92+
5693func (s * Server ) CloseConnection (conn net.Conn , id string ) {
5794 delete (s .Clients , id )
5895 log .Printf ("Connection to %v closed" , id )
0 commit comments