MCPcopy
hub / github.com/google/gopacket / LayersDecoder

Function LayersDecoder

layers_decoder.go:11–101  ·  view source on GitHub ↗

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.

(dl DecodingLayerContainer, first LayerType, df DecodeFeedback)

Source from the content-addressed store, hash-verified

9// DecodingLayerContainer, LayerType value to start decoding with and
10// some DecodeFeedback.
11func LayersDecoder(dl DecodingLayerContainer, first LayerType, df DecodeFeedback) DecodingLayerFunc {
12 firstDec, ok := dl.Decoder(first)
13 if !ok {
14 return func([]byte, *[]LayerType) (LayerType, error) {
15 return first, nil
16 }
17 }
18 if dlc, ok := dl.(DecodingLayerSparse); ok {
19 return func(data []byte, decoded *[]LayerType) (LayerType, error) {
20 *decoded = (*decoded)[:0] // Truncated decoded layers.
21 typ := first
22 decoder := firstDec
23 for {
24 if err := decoder.DecodeFromBytes(data, df); err != nil {
25 return LayerTypeZero, err
26 }
27 *decoded = append(*decoded, typ)
28 typ = decoder.NextLayerType()
29 if data = decoder.LayerPayload(); len(data) == 0 {
30 break
31 }
32 if decoder, ok = dlc.Decoder(typ); !ok {
33 return typ, nil
34 }
35 }
36 return LayerTypeZero, nil
37 }
38 }
39 if dlc, ok := dl.(DecodingLayerArray); ok {
40 return func(data []byte, decoded *[]LayerType) (LayerType, error) {
41 *decoded = (*decoded)[:0] // Truncated decoded layers.
42 typ := first
43 decoder := firstDec
44 for {
45 if err := decoder.DecodeFromBytes(data, df); err != nil {
46 return LayerTypeZero, err
47 }
48 *decoded = append(*decoded, typ)
49 typ = decoder.NextLayerType()
50 if data = decoder.LayerPayload(); len(data) == 0 {
51 break
52 }
53 if decoder, ok = dlc.Decoder(typ); !ok {
54 return typ, nil
55 }
56 }
57 return LayerTypeZero, nil
58 }
59 }
60 if dlc, ok := dl.(DecodingLayerMap); ok {
61 return func(data []byte, decoded *[]LayerType) (LayerType, error) {
62 *decoded = (*decoded)[:0] // Truncated decoded layers.
63 typ := first
64 decoder := firstDec
65 for {
66 if err := decoder.DecodeFromBytes(data, df); err != nil {
67 return LayerTypeZero, err
68 }

Callers 3

LayersDecoderMethod · 0.85
LayersDecoderMethod · 0.85
LayersDecoderMethod · 0.85

Calls 4

DecoderMethod · 0.65
DecodeFromBytesMethod · 0.65
NextLayerTypeMethod · 0.65
LayerPayloadMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…