github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/net/icmp/timeexceeded.go (about)

     1  // Copyright 2014 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package icmp
     6  
     7  // A TimeExceeded represents an ICMP time exceeded message body.
     8  type TimeExceeded struct {
     9  	Data       []byte      // data, known as original datagram field
    10  	Extensions []Extension // extensions
    11  }
    12  
    13  // Len implements the Len method of MessageBody interface.
    14  func (p *TimeExceeded) Len(proto int) int {
    15  	if p == nil {
    16  		return 0
    17  	}
    18  	l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions)
    19  	return 4 + l
    20  }
    21  
    22  // Marshal implements the Marshal method of MessageBody interface.
    23  func (p *TimeExceeded) Marshal(proto int) ([]byte, error) {
    24  	return marshalMultipartMessageBody(proto, p.Data, p.Extensions)
    25  }
    26  
    27  // parseTimeExceeded parses b as an ICMP time exceeded message body.
    28  func parseTimeExceeded(proto int, b []byte) (MessageBody, error) {
    29  	if len(b) < 4 {
    30  		return nil, errMessageTooShort
    31  	}
    32  	p := &TimeExceeded{}
    33  	var err error
    34  	p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b)
    35  	if err != nil {
    36  		return nil, err
    37  	}
    38  	return p, nil
    39  }