in daemoncfg/daemon_config.go [106:145]
func parseDoubleForm(addr []string) (*DaemonEndpoints, error) {
addr1 := strings.Split(addr[0], ":") // tcp:127.0.0.1:2000 or udp:127.0.0.1:2000
addr2 := strings.Split(addr[1], ":") // tcp:127.0.0.1:2000 or udp:127.0.0.1:2000
if len(addr1) != 3 || len(addr2) != 3 {
return nil, errors.New("invalid daemon address: " + addr[0] + " " + addr[1])
}
// validate ports
_, pErr1 := strconv.Atoi(addr1[2])
_, pErr2 := strconv.Atoi(addr1[2])
if pErr1 != nil || pErr2 != nil {
return nil, errors.New("invalid daemon address port")
}
addrMap := make(map[string]string)
addrMap[addr1[0]] = addr1[1] + ":" + addr1[2]
addrMap[addr2[0]] = addr2[1] + ":" + addr2[2]
if addrMap[udpKey] == "" || addrMap[tcpKey] == "" { // for double form, tcp and udp keywords should be present
return nil, errors.New("invalid daemon address")
}
udpAddr, uErr := resolveUDPAddr(addrMap[udpKey])
if uErr != nil {
return nil, uErr
}
tcpAddr, tErr := resolveTCPAddr(addrMap[tcpKey])
if tErr != nil {
return nil, tErr
}
return &DaemonEndpoints{
UDPAddr: udpAddr,
TCPAddr: tcpAddr,
}, nil
}