102 lines
2.8 KiB
Go
102 lines
2.8 KiB
Go
|
// Copyright 2019 The GoPacket Authors. All rights reserved.
|
||
|
|
||
|
package gopacket
|
||
|
|
||
|
// Created by gen.go, don't edit manually
|
||
|
// Generated at 2019-06-18 11:37:31.308731293 +0600 +06 m=+0.000842599
|
||
|
|
||
|
// LayersDecoder returns DecodingLayerFunc for specified
|
||
|
// DecodingLayerContainer, LayerType value to start decoding with and
|
||
|
// some DecodeFeedback.
|
||
|
func LayersDecoder(dl DecodingLayerContainer, first LayerType, df DecodeFeedback) DecodingLayerFunc {
|
||
|
firstDec, ok := dl.Decoder(first)
|
||
|
if !ok {
|
||
|
return func([]byte, *[]LayerType) (LayerType, error) {
|
||
|
return first, nil
|
||
|
}
|
||
|
}
|
||
|
if dlc, ok := dl.(DecodingLayerSparse); ok {
|
||
|
return func(data []byte, decoded *[]LayerType) (LayerType, error) {
|
||
|
*decoded = (*decoded)[:0] // Truncated decoded layers.
|
||
|
typ := first
|
||
|
decoder := firstDec
|
||
|
for {
|
||
|
if err := decoder.DecodeFromBytes(data, df); err != nil {
|
||
|
return LayerTypeZero, err
|
||
|
}
|
||
|
*decoded = append(*decoded, typ)
|
||
|
typ = decoder.NextLayerType()
|
||
|
if data = decoder.LayerPayload(); len(data) == 0 {
|
||
|
break
|
||
|
}
|
||
|
if decoder, ok = dlc.Decoder(typ); !ok {
|
||
|
return typ, nil
|
||
|
}
|
||
|
}
|
||
|
return LayerTypeZero, nil
|
||
|
}
|
||
|
}
|
||
|
if dlc, ok := dl.(DecodingLayerArray); ok {
|
||
|
return func(data []byte, decoded *[]LayerType) (LayerType, error) {
|
||
|
*decoded = (*decoded)[:0] // Truncated decoded layers.
|
||
|
typ := first
|
||
|
decoder := firstDec
|
||
|
for {
|
||
|
if err := decoder.DecodeFromBytes(data, df); err != nil {
|
||
|
return LayerTypeZero, err
|
||
|
}
|
||
|
*decoded = append(*decoded, typ)
|
||
|
typ = decoder.NextLayerType()
|
||
|
if data = decoder.LayerPayload(); len(data) == 0 {
|
||
|
break
|
||
|
}
|
||
|
if decoder, ok = dlc.Decoder(typ); !ok {
|
||
|
return typ, nil
|
||
|
}
|
||
|
}
|
||
|
return LayerTypeZero, nil
|
||
|
}
|
||
|
}
|
||
|
if dlc, ok := dl.(DecodingLayerMap); ok {
|
||
|
return func(data []byte, decoded *[]LayerType) (LayerType, error) {
|
||
|
*decoded = (*decoded)[:0] // Truncated decoded layers.
|
||
|
typ := first
|
||
|
decoder := firstDec
|
||
|
for {
|
||
|
if err := decoder.DecodeFromBytes(data, df); err != nil {
|
||
|
return LayerTypeZero, err
|
||
|
}
|
||
|
*decoded = append(*decoded, typ)
|
||
|
typ = decoder.NextLayerType()
|
||
|
if data = decoder.LayerPayload(); len(data) == 0 {
|
||
|
break
|
||
|
}
|
||
|
if decoder, ok = dlc.Decoder(typ); !ok {
|
||
|
return typ, nil
|
||
|
}
|
||
|
}
|
||
|
return LayerTypeZero, nil
|
||
|
}
|
||
|
}
|
||
|
dlc := dl
|
||
|
return func(data []byte, decoded *[]LayerType) (LayerType, error) {
|
||
|
*decoded = (*decoded)[:0] // Truncated decoded layers.
|
||
|
typ := first
|
||
|
decoder := firstDec
|
||
|
for {
|
||
|
if err := decoder.DecodeFromBytes(data, df); err != nil {
|
||
|
return LayerTypeZero, err
|
||
|
}
|
||
|
*decoded = append(*decoded, typ)
|
||
|
typ = decoder.NextLayerType()
|
||
|
if data = decoder.LayerPayload(); len(data) == 0 {
|
||
|
break
|
||
|
}
|
||
|
if decoder, ok = dlc.Decoder(typ); !ok {
|
||
|
return typ, nil
|
||
|
}
|
||
|
}
|
||
|
return LayerTypeZero, nil
|
||
|
}
|
||
|
}
|