package privval import ( "net" "time" "github.com/pkg/errors" "github.com/tendermint/tendermint/crypto" tmnet "github.com/tendermint/tendermint/libs/net" p2pconn "github.com/tendermint/tendermint/p2p/conn" ) // Socket errors. var ( ErrDialRetryMax = errors.New("dialed maximum retries") ) // SocketDialer dials a remote address and returns a net.Conn or an error. type SocketDialer func() (net.Conn, error) // DialTCPFn dials the given tcp addr, using the given timeoutReadWrite and // privKey for the authenticated encryption handshake. func DialTCPFn(addr string, timeoutReadWrite time.Duration, privKey crypto.PrivKey) SocketDialer { return func() (net.Conn, error) { conn, err := tmnet.Connect(addr) if err == nil { deadline := time.Now().Add(timeoutReadWrite) err = conn.SetDeadline(deadline) } if err == nil { conn, err = p2pconn.MakeSecretConnection(conn, privKey) } return conn, err } } // DialUnixFn dials the given unix socket. func DialUnixFn(addr string) SocketDialer { return func() (net.Conn, error) { unixAddr := &net.UnixAddr{Name: addr, Net: "unix"} return net.DialUnix("unix", nil, unixAddr) } }