diff --git a/chain/hop.go b/chain/hop.go index dfd58f9..b7200a0 100644 --- a/chain/hop.go +++ b/chain/hop.go @@ -4,6 +4,7 @@ import "context" type SelectOptions struct { Addr string + Host string } type SelectOption func(*SelectOptions) @@ -14,6 +15,12 @@ func AddrSelectOption(addr string) SelectOption { } } +func HostSelectOption(host string) SelectOption { + return func(o *SelectOptions) { + o.Host = host + } +} + type Hop interface { Nodes() []*Node Select(ctx context.Context, opts ...SelectOption) *Node diff --git a/chain/node.go b/chain/node.go index a5ebcb8..c975e2f 100644 --- a/chain/node.go +++ b/chain/node.go @@ -14,6 +14,7 @@ type NodeOptions struct { Resolver resolver.Resolver HostMapper hosts.HostMapper Metadata metadata.Metadata + Host string } type NodeOption func(*NodeOptions) @@ -42,6 +43,12 @@ func HostMapperNodeOption(m hosts.HostMapper) NodeOption { } } +func HostNodeOption(host string) NodeOption { + return func(o *NodeOptions) { + o.Host = host + } +} + func MetadataNodeOption(md metadata.Metadata) NodeOption { return func(o *NodeOptions) { o.Metadata = md diff --git a/chain/router.go b/chain/router.go index 77500d5..95edad6 100644 --- a/chain/router.go +++ b/chain/router.go @@ -182,6 +182,7 @@ func (r *Router) dial(ctx context.Context, network, address string) (conn net.Co InterfaceDialOption(r.options.IfceName), SockOptsDialOption(r.options.SockOpts), LoggerDialOption(r.options.Logger), + TimeoutDialOption(r.options.Timeout), ) if err == nil { break