func()

in internal/command/pcap.go [57:98]


func (r *pcapRunner) sendPCAP(path string, out output.Output) error {
	logger := r.logger.With("pcap", path)

	f, err := pcap.OpenOffline(path)
	if err != nil {
		return err
	}
	defer f.Close()

	// Process packets in PCAP and get flow records.
	var totalBytes, totalPackets int
	packetSource := gopacket.NewPacketSource(f, f.LinkType())
	for packet := range packetSource.Packets() {
		if r.cmd.Context().Err() != nil {
			break
		}

		if packet == nil {
			logger.Warnw("Skipping nil packet")
			continue
		}

		tl := packet.TransportLayer()
		if tl == nil {
			logger.Warnw("Skipping packet with no transport layer")
			continue
		}

		payloadData := tl.LayerPayload()

		// TODO: Rate-limit for UDP.
		n, err := out.Write(payloadData)
		if err != nil {
			return err
		}
		totalBytes += n
		totalPackets++
	}

	logger.Infow("Sent PCAP payload data", "total_bytes", totalBytes, "total_packets", totalPackets)
	return nil
}