Commit e5ad0c2f authored by Boris Mühmer's avatar Boris Mühmer
Browse files

added an internal shared library

parent cd2ae776
Loading
Loading
Loading
Loading
+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() {
@@ -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()
@@ -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...
}
+20 −8
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@ import (
	"crypto/x509"
	"log"
	"net"

	"repositories.muehmer.net/bsmrgo/perplex/internal/pkg/perplex"
)

func main() {
@@ -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)
	}
@@ -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 {
@@ -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())
}

@@ -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)
	}
@@ -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 {
@@ -96,7 +98,8 @@ func tlsServer() {
				log.Print(x509.MarshalPKIXPublicKey(v.PublicKey))
			}
		}
		go handleTLSClient(conn)
		//go handleTLSClient(conn)
		go handleClient(conn)
	}
}

@@ -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())
}
+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)
}