Loading cmd/perplex-client/main.go +15 −29 Original line number Diff line number Diff line package main import ( "bufio" "crypto/tls" "crypto/x509" "fmt" "io" "log" "net" "repositories.muehmer.net/bsmrgo/perplex/internal/pkg/perplex" ) func main() { Loading @@ -15,45 +15,35 @@ func main() { //tcpClient() tlsClient() log.Printf("Terminating perplex client...") } func tcpClient() { conn, err := net.Dial("tcp", "localhost:4321") conn, err := net.Dial("tcp", perplex.ServernameTCP("localhost")) if err != nil { log.Panic(err) } defer disconnect(conn) defer conn.Close() log.Printf("Connected to: %v->%v", conn.LocalAddr(), conn.RemoteAddr()) reader := bufio.NewReader(conn) //writer := bufio.NewWriter(conn) line, prefix, err := reader.ReadLine() if err != nil { log.Panic(err) } text := string(line) log.Printf("isPrefix: %v - line: %s", prefix, text) handleServer(conn) conn.Write([]byte("quit\n")) } func disconnect(conn net.Conn) { defer conn.Close() log.Printf("Disconnecting from: %v->%v", conn.LocalAddr(), conn.RemoteAddr()) } func tlsClient() { cert, err := tls.LoadX509KeyPair("../../scripts/certs/client.pem", "../../scripts/certs/client.key") if err != nil { log.Fatalf("server: loadkeys: %s", err) log.Fatalf("client: loadkeys: %s", err) } config := tls.Config{Certificates: []tls.Certificate{cert}, InsecureSkipVerify: true} conn, err := tls.Dial("tcp", "localhost:4322", &config) conn, err := tls.Dial("tcp", perplex.ServernameTLS("localhost"), &config) if err != nil { log.Fatalf("client: dial: %s", err) } defer conn.Close() log.Println("client: connected to: ", conn.RemoteAddr()) state := conn.ConnectionState() Loading @@ -64,15 +54,11 @@ func tlsClient() { log.Println("client: handshake: ", state.HandshakeComplete) log.Println("client: mutual: ", state.NegotiatedProtocolIsMutual) message := "Hello\n" n, err := io.WriteString(conn, message) if err != nil { log.Fatalf("client: write: %s", err) } log.Printf("client: wrote %q (%d bytes)", message, n) handleServer(conn) reply := make([]byte, 256) n, err = conn.Read(reply) log.Printf("client: read %q (%d bytes)", string(reply[:n]), n) log.Print("client: exiting") } func handleServer(conn net.Conn) { // we should do something... } cmd/perplex-server/main.go +20 −8 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ import ( "crypto/x509" "log" "net" "repositories.muehmer.net/bsmrgo/perplex/internal/pkg/perplex" ) func main() { Loading @@ -17,7 +19,7 @@ func main() { } func tcpServer() { ln, err := net.Listen("tcp", ":4321") ln, err := net.Listen("tcp", perplex.ServernameTCP("")) if err != nil { log.Fatal(err) } Loading @@ -27,13 +29,15 @@ func tcpServer() { if err != nil { log.Printf("Accept() failed with: %v", err) } go handleTCPClient(conn) //go handleTCPClient(conn) go handleClient(conn) } } func handleTCPClient(conn net.Conn) { defer disconnect(conn) defer conn.Close() log.Printf("Connected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr()) banner := "Welcome to perplex!\n" _, err := conn.Write([]byte(banner)) if err != nil { Loading Loading @@ -61,10 +65,7 @@ The perplex server currently understands: } } } } func disconnect(conn net.Conn) { defer conn.Close() log.Printf("Disconnected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr()) } Loading @@ -75,7 +76,7 @@ func tlsServer() { } config := tls.Config{Certificates: []tls.Certificate{cert}} config.Rand = rand.Reader listener, err := tls.Listen("tcp", ":4322", &config) listener, err := tls.Listen("tcp", perplex.ServernameTLS(""), &config) if err != nil { log.Fatal(err) } Loading @@ -87,6 +88,7 @@ func tlsServer() { break } defer conn.Close() log.Printf("server: accepted from %s", conn.RemoteAddr()) tlscon, ok := conn.(*tls.Conn) if ok { Loading @@ -96,7 +98,8 @@ func tlsServer() { log.Print(x509.MarshalPKIXPublicKey(v.PublicKey)) } } go handleTLSClient(conn) //go handleTLSClient(conn) go handleClient(conn) } } Loading Loading @@ -125,3 +128,12 @@ func handleTLSClient(conn net.Conn) { } log.Println("server: conn: closed") } func handleClient(conn net.Conn) { defer conn.Close() log.Printf("Connected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr()) // read and write stuff over connection log.Printf("Disconnected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr()) } internal/pkg/perplex/globals.go 0 → 100644 +23 −0 Original line number Diff line number Diff line package perplex import "fmt" // Global constants. const ( portTCP = "4321" portTLS = "4322" ) func servernameCommon(sn string, port string) string { return fmt.Sprintf("%s:%s", sn, port) } // ServernameTCP returns the name and port for the TCP connection. func ServernameTCP(sn string) string { return servernameCommon(sn, portTCP) } // ServernameTLS returns the name and port for the TLS connection. func ServernameTLS(sn string) string { return servernameCommon(sn, portTLS) } Loading
cmd/perplex-client/main.go +15 −29 Original line number Diff line number Diff line package main import ( "bufio" "crypto/tls" "crypto/x509" "fmt" "io" "log" "net" "repositories.muehmer.net/bsmrgo/perplex/internal/pkg/perplex" ) func main() { Loading @@ -15,45 +15,35 @@ func main() { //tcpClient() tlsClient() log.Printf("Terminating perplex client...") } func tcpClient() { conn, err := net.Dial("tcp", "localhost:4321") conn, err := net.Dial("tcp", perplex.ServernameTCP("localhost")) if err != nil { log.Panic(err) } defer disconnect(conn) defer conn.Close() log.Printf("Connected to: %v->%v", conn.LocalAddr(), conn.RemoteAddr()) reader := bufio.NewReader(conn) //writer := bufio.NewWriter(conn) line, prefix, err := reader.ReadLine() if err != nil { log.Panic(err) } text := string(line) log.Printf("isPrefix: %v - line: %s", prefix, text) handleServer(conn) conn.Write([]byte("quit\n")) } func disconnect(conn net.Conn) { defer conn.Close() log.Printf("Disconnecting from: %v->%v", conn.LocalAddr(), conn.RemoteAddr()) } func tlsClient() { cert, err := tls.LoadX509KeyPair("../../scripts/certs/client.pem", "../../scripts/certs/client.key") if err != nil { log.Fatalf("server: loadkeys: %s", err) log.Fatalf("client: loadkeys: %s", err) } config := tls.Config{Certificates: []tls.Certificate{cert}, InsecureSkipVerify: true} conn, err := tls.Dial("tcp", "localhost:4322", &config) conn, err := tls.Dial("tcp", perplex.ServernameTLS("localhost"), &config) if err != nil { log.Fatalf("client: dial: %s", err) } defer conn.Close() log.Println("client: connected to: ", conn.RemoteAddr()) state := conn.ConnectionState() Loading @@ -64,15 +54,11 @@ func tlsClient() { log.Println("client: handshake: ", state.HandshakeComplete) log.Println("client: mutual: ", state.NegotiatedProtocolIsMutual) message := "Hello\n" n, err := io.WriteString(conn, message) if err != nil { log.Fatalf("client: write: %s", err) } log.Printf("client: wrote %q (%d bytes)", message, n) handleServer(conn) reply := make([]byte, 256) n, err = conn.Read(reply) log.Printf("client: read %q (%d bytes)", string(reply[:n]), n) log.Print("client: exiting") } func handleServer(conn net.Conn) { // we should do something... }
cmd/perplex-server/main.go +20 −8 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ import ( "crypto/x509" "log" "net" "repositories.muehmer.net/bsmrgo/perplex/internal/pkg/perplex" ) func main() { Loading @@ -17,7 +19,7 @@ func main() { } func tcpServer() { ln, err := net.Listen("tcp", ":4321") ln, err := net.Listen("tcp", perplex.ServernameTCP("")) if err != nil { log.Fatal(err) } Loading @@ -27,13 +29,15 @@ func tcpServer() { if err != nil { log.Printf("Accept() failed with: %v", err) } go handleTCPClient(conn) //go handleTCPClient(conn) go handleClient(conn) } } func handleTCPClient(conn net.Conn) { defer disconnect(conn) defer conn.Close() log.Printf("Connected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr()) banner := "Welcome to perplex!\n" _, err := conn.Write([]byte(banner)) if err != nil { Loading Loading @@ -61,10 +65,7 @@ The perplex server currently understands: } } } } func disconnect(conn net.Conn) { defer conn.Close() log.Printf("Disconnected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr()) } Loading @@ -75,7 +76,7 @@ func tlsServer() { } config := tls.Config{Certificates: []tls.Certificate{cert}} config.Rand = rand.Reader listener, err := tls.Listen("tcp", ":4322", &config) listener, err := tls.Listen("tcp", perplex.ServernameTLS(""), &config) if err != nil { log.Fatal(err) } Loading @@ -87,6 +88,7 @@ func tlsServer() { break } defer conn.Close() log.Printf("server: accepted from %s", conn.RemoteAddr()) tlscon, ok := conn.(*tls.Conn) if ok { Loading @@ -96,7 +98,8 @@ func tlsServer() { log.Print(x509.MarshalPKIXPublicKey(v.PublicKey)) } } go handleTLSClient(conn) //go handleTLSClient(conn) go handleClient(conn) } } Loading Loading @@ -125,3 +128,12 @@ func handleTLSClient(conn net.Conn) { } log.Println("server: conn: closed") } func handleClient(conn net.Conn) { defer conn.Close() log.Printf("Connected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr()) // read and write stuff over connection log.Printf("Disconnected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr()) }
internal/pkg/perplex/globals.go 0 → 100644 +23 −0 Original line number Diff line number Diff line package perplex import "fmt" // Global constants. const ( portTCP = "4321" portTLS = "4322" ) func servernameCommon(sn string, port string) string { return fmt.Sprintf("%s:%s", sn, port) } // ServernameTCP returns the name and port for the TCP connection. func ServernameTCP(sn string) string { return servernameCommon(sn, portTCP) } // ServernameTLS returns the name and port for the TLS connection. func ServernameTLS(sn string) string { return servernameCommon(sn, portTLS) }