Remove older TCP transport code
Still unclear about whether tn.Open() is required with new mux.master
parent
f32e71c00f
commit
38b2abca84
@ -1,130 +0,0 @@
|
||||
package tcp
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"crypto/x509"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Transport is the network layer for internode communications.
|
||||
type Transport struct {
|
||||
ln net.Listener
|
||||
|
||||
certFile string // Path to local X.509 cert.
|
||||
certKey string // Path to corresponding X.509 key.
|
||||
caCertFile string // Path to root X.509 certificate.
|
||||
remoteEncrypted bool // Remote nodes use encrypted communication.
|
||||
skipVerify bool // Skip verification of remote node certs.
|
||||
srcIP string // The specified source IP is optional
|
||||
}
|
||||
|
||||
// NewTransport returns an initialized unencrypted Transport.
|
||||
func NewTransport() *Transport {
|
||||
return &Transport{}
|
||||
}
|
||||
|
||||
// NewTLSTransport returns an initialized TLS-encrypted Transport.
|
||||
func NewTLSTransport(certFile, keyPath, caCertFile string, skipVerify bool) *Transport {
|
||||
return &Transport{
|
||||
certFile: certFile,
|
||||
certKey: keyPath,
|
||||
caCertFile: caCertFile,
|
||||
remoteEncrypted: true,
|
||||
skipVerify: skipVerify,
|
||||
}
|
||||
}
|
||||
|
||||
// Open opens the transport, binding to the supplied address.
|
||||
func (t *Transport) Open(addr string) error {
|
||||
ln, err := net.Listen("tcp", addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if t.certFile != "" {
|
||||
config, err := createTLSConfig(t.certFile, t.certKey, t.caCertFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ln = tls.NewListener(ln, config)
|
||||
}
|
||||
|
||||
t.ln = ln
|
||||
return nil
|
||||
}
|
||||
|
||||
// Dial opens a network connection.
|
||||
func (t *Transport) Dial(addr string, timeout time.Duration) (net.Conn, error) {
|
||||
var dialer *net.Dialer
|
||||
dialer = &net.Dialer{Timeout: timeout}
|
||||
if t.srcIP != "" {
|
||||
netAddr := &net.TCPAddr{
|
||||
IP: net.ParseIP(t.srcIP),
|
||||
Port: 0,
|
||||
}
|
||||
dialer = &net.Dialer{Timeout: timeout, LocalAddr: netAddr}
|
||||
}
|
||||
|
||||
var err error
|
||||
var conn net.Conn
|
||||
if t.remoteEncrypted {
|
||||
conf := &tls.Config{
|
||||
InsecureSkipVerify: t.skipVerify,
|
||||
}
|
||||
conn, err = tls.DialWithDialer(dialer, "tcp", addr, conf)
|
||||
} else {
|
||||
conn, err = dialer.Dial("tcp", addr)
|
||||
}
|
||||
|
||||
return conn, err
|
||||
}
|
||||
|
||||
// Accept waits for the next connection.
|
||||
func (t *Transport) Accept() (net.Conn, error) {
|
||||
c, err := t.ln.Accept()
|
||||
if err != nil {
|
||||
fmt.Println("error accepting: ", err.Error())
|
||||
}
|
||||
return c, err
|
||||
}
|
||||
|
||||
// Close closes the transport
|
||||
func (t *Transport) Close() error {
|
||||
if t.ln != nil {
|
||||
return t.ln.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Addr returns the binding address of the transport.
|
||||
func (t *Transport) Addr() net.Addr {
|
||||
return t.ln.Addr()
|
||||
}
|
||||
|
||||
// createTLSConfig returns a TLS config from the given cert, key and optionally
|
||||
// Certificate Authority cert.
|
||||
func createTLSConfig(certFile, keyFile, caCertFile string) (*tls.Config, error) {
|
||||
var err error
|
||||
config := &tls.Config{}
|
||||
config.Certificates = make([]tls.Certificate, 1)
|
||||
config.Certificates[0], err = tls.LoadX509KeyPair(certFile, keyFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if caCertFile != "" {
|
||||
asn1Data, err := ioutil.ReadFile(caCertFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.RootCAs = x509.NewCertPool()
|
||||
ok := config.RootCAs.AppendCertsFromPEM([]byte(asn1Data))
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to parse root certificate(s) in %q", caCertFile)
|
||||
}
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
@ -1,71 +0,0 @@
|
||||
package tcp
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/rqlite/rqlite/testdata/x509"
|
||||
)
|
||||
|
||||
func Test_NewTransport(t *testing.T) {
|
||||
if NewTransport() == nil {
|
||||
t.Fatal("failed to create new Transport")
|
||||
}
|
||||
}
|
||||
|
||||
func Test_TransportOpenClose(t *testing.T) {
|
||||
tn := NewTransport()
|
||||
if err := tn.Open("localhost:0"); err != nil {
|
||||
t.Fatalf("failed to open transport: %s", err.Error())
|
||||
}
|
||||
if tn.Addr().String() == "localhost:0" {
|
||||
t.Fatalf("transport address set incorrectly, got: %s", tn.Addr().String())
|
||||
}
|
||||
if err := tn.Close(); err != nil {
|
||||
t.Fatalf("failed to close transport: %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func Test_TransportDial(t *testing.T) {
|
||||
tn1 := NewTransport()
|
||||
defer tn1.Close()
|
||||
tn1.Open("localhost:0")
|
||||
go tn1.Accept()
|
||||
|
||||
tn2 := NewTransport()
|
||||
defer tn2.Close()
|
||||
_, err := tn2.Dial(tn1.Addr().String(), time.Second)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to connect to first transport: %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func Test_NewTLSTransport(t *testing.T) {
|
||||
c := x509.CertFile("")
|
||||
defer os.Remove(c)
|
||||
k := x509.KeyFile("")
|
||||
defer os.Remove(k)
|
||||
|
||||
if NewTLSTransport(c, k, "", true) == nil {
|
||||
t.Fatal("failed to create new TLS Transport")
|
||||
}
|
||||
}
|
||||
|
||||
func Test_TLSTransportOpenClose(t *testing.T) {
|
||||
c := x509.CertFile("")
|
||||
defer os.Remove(c)
|
||||
k := x509.KeyFile("")
|
||||
defer os.Remove(k)
|
||||
|
||||
tn := NewTLSTransport(c, k, "", true)
|
||||
if err := tn.Open("localhost:0"); err != nil {
|
||||
t.Fatalf("failed to open TLS transport: %s", err.Error())
|
||||
}
|
||||
if tn.Addr().String() == "localhost:0" {
|
||||
t.Fatalf("TLS transport address set incorrectly, got: %s", tn.Addr().String())
|
||||
}
|
||||
if err := tn.Close(); err != nil {
|
||||
t.Fatalf("failed to close TLS transport: %s", err.Error())
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue