您的位置:首页 > Web前端 > Node.js

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

2018-02-01 14:52 162 查看
这里是读取本地文件的所调用的函数

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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: