github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/net/icmp/messagebody.go (about) 1 // Copyright 2012 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 MessageBody represents an ICMP message body. 8 type MessageBody interface { 9 // Len returns the length of ICMP message body. 10 // Proto must be either the ICMPv4 or ICMPv6 protocol number. 11 Len(proto int) int 12 13 // Marshal returns the binary enconding of ICMP message body. 14 // Proto must be either the ICMPv4 or ICMPv6 protocol number. 15 Marshal(proto int) ([]byte, error) 16 } 17 18 // A DefaultMessageBody represents the default message body. 19 type DefaultMessageBody struct { 20 Data []byte // data 21 } 22 23 // Len implements the Len method of MessageBody interface. 24 func (p *DefaultMessageBody) Len(proto int) int { 25 if p == nil { 26 return 0 27 } 28 return len(p.Data) 29 } 30 31 // Marshal implements the Marshal method of MessageBody interface. 32 func (p *DefaultMessageBody) Marshal(proto int) ([]byte, error) { 33 return p.Data, nil 34 } 35 36 // parseDefaultMessageBody parses b as an ICMP message body. 37 func parseDefaultMessageBody(proto int, b []byte) (MessageBody, error) { 38 p := &DefaultMessageBody{Data: make([]byte, len(b))} 39 copy(p.Data, b) 40 return p, nil 41 }