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 }