MCPcopy Create free account
hub / github.com/ethereum/node-crawler / ParseVersionString

Function ParseVersionString

pkg/vparser/vparser.go:44–85  ·  view source on GitHub ↗
(input string)

Source from the content-addressed store, hash-verified

42}
43
44func ParseVersionString(input string) *ParsedInfo {
45 var output ParsedInfo
46
47 // Quick fix to filter out enodes.
48 if strings.Contains(input, "enode://") {
49 return nil
50 }
51
52 // If there exists more than one version, don't count it
53 if strings.Count(input, "/v") > 1 {
54 return nil
55 }
56
57 // version string consists of four components, divided by /
58 s := strings.Split(strings.ToLower(input), "/")
59 l := len(s)
60 output.Name = strings.ToLower(s[0])
61 if output.Name == "" {
62 return nil
63 }
64
65 if l == 5 || l == 7 {
66 output.Label = s[1]
67 output.Version = parseVersion(s[2])
68 output.Os = parseOS(s[3])
69 output.Language = parseLanguage(s[4])
70 } else if l == 4 {
71 output.Version = parseVersion(s[1])
72 output.Os = parseOS(s[2])
73 output.Language = parseLanguage(s[3])
74 } else if (l == 1 || l == 0) && (output.Name == "tmp" || output.Name == "eth2") {
75 // These are usually "tmp" nodes that cannot be parsed.
76 } else {
77 fmt.Printf("Parser Error: Invalid length of '%d' for input: '%s'\n", l, input)
78 }
79
80 if output.Version.Error {
81 fmt.Printf(" -> Error Parsing: '%s', %v\n", input, output)
82 return nil
83 }
84 return &output
85}
86
87func parseLanguage(input string) LanguageInfo {
88 var languageInfo LanguageInfo

Callers 2

InsertCrawledNodesFunction · 0.92
TestParseVersionStringFunction · 0.85

Calls 3

parseOSFunction · 0.85
parseLanguageFunction · 0.85
parseVersionFunction · 0.70

Tested by 1

TestParseVersionStringFunction · 0.68