in pcap-cli/internal/transformer/translator_worker.go [503:538]
func (w *pcapTranslatorWorker) translate(
ctx context.Context,
index int,
layer gopacket.Layer,
translations chan<- fmt.Stringer,
wg *sync.WaitGroup,
) {
layerType := layer.LayerType()
defer func(index int, layer gopacket.Layer, wg *sync.WaitGroup) {
if r := recover(); r != nil {
translations <- w.translator.translateLayerError(ctx,
layerType, fmt.Errorf("%v: %s", r, string(debug.Stack())))
}
wg.Done()
}(index, layer, wg)
if translator, ok := packetLayerTranslatorsMap[layerType]; ok {
if t := translator(ctx, w, false /* deep */); t == nil {
translations <- w.translator.translateLayerError(ctx,
layerType, fmt.Errorf("unavailable@%d", index))
} else {
translations <- t
}
return
}
// translator does not have an implementation to handle this layer type
switch layer.(type) {
default:
if !skippedLayers.Contains(layerType) {
translations <- w.translator.translateLayerError(ctx,
layerType, fmt.Errorf("unimplemented@%d", index))
}
}
}