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