MCPcopy
hub / github.com/bettercap/bettercap / startDumpReader

Method startDumpReader

modules/can/can_dump_reader.go:45–114  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

43}
44
45func (mod *CANModule) startDumpReader() error {
46 mod.Info("loading CAN dump from %s ...", mod.dumpName)
47
48 file, err := os.Open(mod.dumpName)
49 if err != nil {
50 return err
51 }
52 defer file.Close()
53
54 entries := make([]dumpEntry, 0)
55
56 scanner := bufio.NewScanner(file)
57 for scanner.Scan() {
58 if line := str.Trim(scanner.Text()); line != "" {
59 if m := dumpLineParser.FindStringSubmatch(line); len(m) != 4 {
60 mod.Warning("unexpected line: '%s' -> %d matches", line, len(m))
61 } else if timeval, err := parseTimeval(m[1]); err != nil {
62 mod.Warning("can't parse (seconds.microseconds) from line: '%s': %v", line, err)
63 } else {
64 entries = append(entries, dumpEntry{
65 Time: timeval,
66 Device: m[2],
67 Frame: m[3],
68 })
69 }
70 }
71 }
72
73 if err = scanner.Err(); err != nil {
74 return err
75 }
76
77 numEntries := len(entries)
78 lastEntry := numEntries - 1
79
80 mod.Info("loaded %d entries from candump log", numEntries)
81
82 go func() {
83 mod.Info("candump reader started ...")
84
85 for i, entry := range entries {
86 frame := can.Frame{}
87 if err := frame.UnmarshalString(entry.Frame); err != nil {
88 mod.Error("could not unmarshal CAN frame: %v", err)
89 continue
90 }
91
92 if mod.dumpInject {
93 if err := mod.send.TransmitFrame(context.Background(), frame); err != nil {
94 mod.Error("could not send CAN frame: %v", err)
95 }
96 } else {
97 mod.onFrame(frame)
98 }
99
100 // compute delay before the next frame
101 if i < lastEntry {
102 next := entries[i+1]

Callers 1

ConfigureMethod · 0.95

Calls 7

onFrameMethod · 0.95
parseTimevalFunction · 0.85
RunningMethod · 0.65
InfoMethod · 0.45
CloseMethod · 0.45
WarningMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected