// 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 } }