- package privval
-
- import (
- "fmt"
- "net"
-
- "github.com/tendermint/tendermint/crypto/ed25519"
- cmn "github.com/tendermint/tendermint/libs/common"
- "github.com/tendermint/tendermint/libs/log"
- )
-
- // IsConnTimeout returns a boolean indicating whether the error is known to
- // report that a connection timeout occurred. This detects both fundamental
- // network timeouts, as well as ErrConnTimeout errors.
- func IsConnTimeout(err error) bool {
- if cmnErr, ok := err.(cmn.Error); ok {
- if cmnErr.Data() == ErrListenerTimeout || cmnErr.Data() == ErrDialerTimeout {
- return true
- }
- }
- if _, ok := err.(timeoutError); ok {
- return true
- }
- return false
- }
-
- func NewSignerListener(listenAddr string, logger log.Logger) (*SignerListenerEndpoint, error) {
- var listener net.Listener
-
- protocol, address := cmn.ProtocolAndAddress(listenAddr)
- ln, err := net.Listen(protocol, address)
- if err != nil {
- return nil, err
- }
- switch protocol {
- case "unix":
- listener = NewUnixListener(ln)
- case "tcp":
- // TODO: persist this key so external signer can actually authenticate us
- listener = NewTCPListener(ln, ed25519.GenPrivKey())
- default:
- return nil, fmt.Errorf(
- "wrong listen address: expected either 'tcp' or 'unix' protocols, got %s",
- protocol,
- )
- }
-
- pve := NewSignerListenerEndpoint(logger.With("module", "privval"), listener)
-
- return pve, nil
- }
|