读取本地文件到读出p.node涉及的函数

这里是读取本地文件的所调用的函数

func ParseNode(rawurl string) (*Node, error) {
     if m := incompleteNodeURL. FindStringSubmatch(rawurl); m != nil {
         id, err := HexID(m[ 1])
         if err != nil {
             return nil, fmt. Errorf( "invalid node ID (%v)", err)
        }
         return NewNode(id, nil, 0, 0), nil
    }
     return parseComplete(rawurl)
}

func parseComplete(rawurl string) (*Node, error) {
     var (
         id NodeID
         ip net.IP
         tcpPort, udpPort uint64
    )
     u, err := url. Parse(rawurl)
     if err != nil {
         return nil, err
    }
     if u.Scheme != "enode" {
         return nil, errors. New( "invalid URL scheme, want \" enode \" ")
    }
     // Parse the Node ID from the user portion.
     if u.User == nil {
         return nil, errors. New( "does not contain node ID")
    }
     if id, err = HexID(u.User. String()); err != nil {
         return nil, fmt. Errorf( "invalid node ID (%v)", err)
    }
     // Parse the IP address.
     host, port, err := net. SplitHostPort(u.Host)
     if err != nil {
         return nil, fmt. Errorf( "invalid host: %v", err)
    }
     if ip = net. ParseIP(host); ip == nil {
         return nil, errors. New( "invalid IP address")
    }
     // Ensure the IP is 4 bytes long for IPv4 addresses.
     if ipv4 := ip. To4(); ipv4 != nil {
         ip = ipv4
    }
     // Parse the port numbers.
     if tcpPort, err = strconv. ParseUint(port, 10, 16); err != nil {
         return nil, errors. New( "invalid port")
    }
     udpPort = tcpPort
     qv := u. Query()
     if qv. Get( "discport") != "" {
         udpPort, err = strconv. ParseUint(qv. Get( "discport"), 10, 16)
         if err != nil {
             return nil, errors. New( "invalid discport in query")
        }
    }
     return NewNode(id, ip, uint16(udpPort), uint16(tcpPort)), nil
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值