timeexceeded.go 946 B

123456789101112131415161718192021222324252627282930313233343536373839
  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. package icmp
  5. // A TimeExceeded represents an ICMP time exceeded message body.
  6. type TimeExceeded struct {
  7. Data []byte // data
  8. }
  9. // Len implements the Len method of MessageBody interface.
  10. func (p *TimeExceeded) Len() int {
  11. if p == nil {
  12. return 0
  13. }
  14. return 4 + len(p.Data)
  15. }
  16. // Marshal implements the Marshal method of MessageBody interface.
  17. func (p *TimeExceeded) Marshal() ([]byte, error) {
  18. b := make([]byte, 4+len(p.Data))
  19. copy(b[4:], p.Data)
  20. return b, nil
  21. }
  22. // parseTimeExceeded parses b as an ICMP time exceeded message body.
  23. func parseTimeExceeded(b []byte) (MessageBody, error) {
  24. bodyLen := len(b)
  25. if bodyLen < 4 {
  26. return nil, errMessageTooShort
  27. }
  28. p := &TimeExceeded{}
  29. if bodyLen > 4 {
  30. p.Data = make([]byte, bodyLen-4)
  31. copy(p.Data, b[4:])
  32. }
  33. return p, nil
  34. }