mirror of
https://github.com/golang/net.git
synced 2026-04-01 02:47:08 +09:00
This change adds simple validation for multipart messages to avoid generating incorrect messages and introduces RawBody and RawExtension to control message validation. RawBody and RawExtension are excluded from normal message processing and can be used to construct crafted messages for applications such as wire format testing. Fixes golang/go#28686. Change-Id: I56f51d6566142f5e1dcc75cfce5250801e583d6d Reviewed-on: https://go-review.googlesource.com/c/net/+/155859 Run-TryBot: Mikio Hara <mikioh.public.networking@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
// Copyright 2012 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package icmp
|
|
|
|
// A MessageBody represents an ICMP message body.
|
|
type MessageBody interface {
|
|
// Len returns the length of ICMP message body.
|
|
// The provided proto must be either the ICMPv4 or ICMPv6
|
|
// protocol number.
|
|
Len(proto int) int
|
|
|
|
// Marshal returns the binary encoding of ICMP message body.
|
|
// The provided proto must be either the ICMPv4 or ICMPv6
|
|
// protocol number.
|
|
Marshal(proto int) ([]byte, error)
|
|
}
|
|
|
|
// A RawBody represents a raw message body.
|
|
//
|
|
// A raw message body is excluded from message processing and can be
|
|
// used to construct applications such as protocol conformance
|
|
// testing.
|
|
type RawBody struct {
|
|
Data []byte // data
|
|
}
|
|
|
|
// Len implements the Len method of MessageBody interface.
|
|
func (p *RawBody) Len(proto int) int {
|
|
if p == nil {
|
|
return 0
|
|
}
|
|
return len(p.Data)
|
|
}
|
|
|
|
// Marshal implements the Marshal method of MessageBody interface.
|
|
func (p *RawBody) Marshal(proto int) ([]byte, error) {
|
|
return p.Data, nil
|
|
}
|
|
|
|
// parseRawBody parses b as an ICMP message body.
|
|
func parseRawBody(proto int, b []byte) (MessageBody, error) {
|
|
p := &RawBody{Data: make([]byte, len(b))}
|
|
copy(p.Data, b)
|
|
return p, nil
|
|
}
|
|
|
|
// A DefaultMessageBody represents the default message body.
|
|
//
|
|
// Deprecated: Use RawBody instead.
|
|
type DefaultMessageBody = RawBody
|