blob: 344e15848d5175a4c620f7f501afa0cec94ab776 [file] [log] [blame]
David K. Bainbridge215e0242017-09-05 23:18:24 -07001// 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
5package icmp
6
7// A TimeExceeded represents an ICMP time exceeded message body.
8type 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.
14func (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.
23func (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.
28func 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}