OSDN Git Service

new repo
[bytom/vapor.git] / vendor / golang.org / x / net / icmp / timeexceeded.go
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 }