func parseDoubleForm()

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
}