entry_nodes.go 2.71 KiB
package peermanager
import (
"github.com/iotaledger/goshimmer/packages/identity"
"github.com/iotaledger/goshimmer/plugins/autopeering/parameters"
peermanagerTypes "github.com/iotaledger/goshimmer/plugins/autopeering/peermanager/types"
"github.com/iotaledger/goshimmer/plugins/autopeering/protocol/peer"
"github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types"
"net"
"strconv"
"strings"
)
var ENTRY_NODES = parseEntryNodes()
func parseEntryNodes() peermanagerTypes.PeerList {
result := make(peermanagerTypes.PeerList, 0)
for _, entryNodeDefinition := range strings.Fields(*parameters.ENTRY_NODES.Value) {
if entryNodeDefinition == "" {
continue
}
entryNode := &peer.Peer{
Identity: nil,
}
protocolBits := strings.Split(entryNodeDefinition, "://")
if len(protocolBits) != 2 {
panic("invalid entry in list of trusted entry nodes: " + entryNodeDefinition)
}
switch protocolBits[0] {
case "tcp":
entryNode.PeeringProtocolType = types.PROTOCOL_TYPE_TCP
case "udp":
entryNode.PeeringProtocolType = types.PROTOCOL_TYPE_UDP
}
identityBits := strings.Split(protocolBits[1], "@")
if len(identityBits) != 2 {
panic("error while parsing identity of entry node: " + entryNodeDefinition)
}
entryNode.Identity = &identity.Identity{
StringIdentifier: identityBits[0],
}
addressBits := strings.Split(identityBits[1], ":")
switch len(addressBits) {
case 2:
host := addressBits[0]
port, err := strconv.Atoi(addressBits[1])
if err != nil {
panic("error while parsing port of entry in list of entry nodes")
}
ip := net.ParseIP(host)
if ip == nil {
panic("error while parsing ip of entry in list of entry nodes")
}
entryNode.Address = ip
entryNode.PeeringPort = uint16(port)
case 6:
host := strings.Join(addressBits[:5], ":")
port, err := strconv.Atoi(addressBits[5])
if err != nil {
panic("error while parsing port of entry in list of entry nodes")
}
ip := net.ParseIP(host)
if ip == nil {
panic("error while parsing ip of entry in list of entry nodes")
}
entryNode.Address = ip
entryNode.PeeringPort = uint16(port)
default:
panic("invalid entry in list of trusted entry nodes: " + entryNodeDefinition)
}
result = append(result, entryNode)
}
return result
}