mirror of
https://github.com/Icinga/icingabeat.git
synced 2025-08-15 14:58:08 +02:00
40 lines
866 B
Go
40 lines
866 B
Go
package decoder
|
|
|
|
import "github.com/tsg/gopacket"
|
|
|
|
// implement DecodingLayer with support of switching between multiple layers to
|
|
// remember outter layer results
|
|
type multiLayer struct {
|
|
layers []gopacket.DecodingLayer // all layers must have same type
|
|
i int
|
|
cnt int
|
|
}
|
|
|
|
func (m *multiLayer) next() {
|
|
m.i++
|
|
m.cnt++
|
|
if m.i >= len(m.layers) {
|
|
m.i = 0
|
|
}
|
|
}
|
|
|
|
func (m *multiLayer) init(layer ...gopacket.DecodingLayer) {
|
|
m.layers = layer
|
|
}
|
|
|
|
func (m *multiLayer) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
|
|
return m.layers[m.i].DecodeFromBytes(data, df)
|
|
}
|
|
|
|
func (m *multiLayer) CanDecode() gopacket.LayerClass {
|
|
return m.layers[m.i].CanDecode()
|
|
}
|
|
|
|
func (m *multiLayer) NextLayerType() gopacket.LayerType {
|
|
return m.layers[m.i].NextLayerType()
|
|
}
|
|
|
|
func (m *multiLayer) LayerPayload() []byte {
|
|
return m.layers[m.i].LayerPayload()
|
|
}
|