func GetIndexedPcapHandle()

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
}