in plc4go/tools/plc4xpcapanalyzer/internal/pcaphandler/pcaphandler.go [37:73]
func GetIndexedPcapHandle(file, filterExpression string) (handle *pcap.Handle, numberOfPackages int, timestampToIndexMap map[time.Time]int, err error) {
timestampToIndexMap = make(map[time.Time]int)
// Count absolute packages and set timestamp map
temporaryHandle, err := GetPcapHandle(file, "")
if err != nil {
return nil, 0, nil, err
}
defer temporaryHandle.Close()
packetSource := GetPacketSource(temporaryHandle)
packages := 0
for packet := range packetSource.Packets() {
if packet == nil {
break
}
packages++
timestampToIndexMap[packet.Metadata().Timestamp] = packages
}
// Just count filtered packages
temporaryFilteredHandle, err := GetPcapHandle(file, filterExpression)
if err != nil {
return nil, 0, nil, err
}
defer temporaryFilteredHandle.Close()
filteredPacketSource := GetPacketSource(temporaryFilteredHandle)
packages = 0
for packet := range filteredPacketSource.Packets() {
if packet == nil {
break
}
packages++
}
pcapHandle, err := GetPcapHandle(file, filterExpression)
if err != nil {
return nil, 0, nil, err
}
return pcapHandle, packages, timestampToIndexMap, nil
}