frostfs-node/pkg/network/address.go
Leonard Lyubich 900949c648 [#33] network: Implement tool to work with local address
Implement read-only local network address source. Implement function for
check if network address is local.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-02 11:25:35 +03:00

51 lines
1.2 KiB
Go

package network
import (
"github.com/multiformats/go-multiaddr"
manet "github.com/multiformats/go-multiaddr-net"
"github.com/pkg/errors"
)
// Address represents the NeoFS node
// network address.
type Address struct {
ma multiaddr.Multiaddr
}
// LocalAddressSource is an interface of local
// network address container with read access.
type LocalAddressSource interface {
LocalAddress() *Address
}
func (a Address) String() string {
return a.ma.String()
}
// NetAddr returns network endpoint address in string format.
func (a Address) NetAddr() string {
ip, err := manet.ToNetAddr(a.ma)
if err != nil {
panic(errors.Wrap(err, "could not get net addr"))
}
return ip.String()
}
// AddressFromString restores address from a string representation.
func AddressFromString(s string) (*Address, error) {
ma, err := multiaddr.NewMultiaddr(s)
if err != nil {
return nil, err
}
return &Address{
ma: ma,
}, nil
}
// IsLocalAddress returns true if network endpoint from local address
// source is equal to network endpoint of passed address.
func IsLocalAddress(src LocalAddressSource, addr *Address) bool {
return src.LocalAddress().NetAddr() == addr.NetAddr()
}