packetbundle.go 911 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package packetconn
  2. import (
  3. "encoding/binary"
  4. "io"
  5. )
  6. func NewPacketBundle() PacketBundle {
  7. return &packetBundle{}
  8. }
  9. type packetBundle struct{}
  10. func (p *packetBundle) Overhead() int {
  11. return 2
  12. }
  13. func (p *packetBundle) WriteToBundle(b []byte, writer io.Writer) (err error) {
  14. err = binary.Write(writer, binary.BigEndian, uint16(len(b)))
  15. if err != nil {
  16. return
  17. }
  18. _, err = writer.Write(b)
  19. return
  20. }
  21. func (p *packetBundle) ReadFromBundle(writer io.Reader) (b []byte, err error) {
  22. var length uint16
  23. err = binary.Read(writer, binary.BigEndian, &length)
  24. if err != nil {
  25. return
  26. }
  27. b = make([]byte, length)
  28. n, err := io.ReadFull(writer, b)
  29. if err != nil {
  30. return
  31. }
  32. if n != int(length) {
  33. return nil, io.ErrUnexpectedEOF
  34. }
  35. return
  36. }
  37. type PacketBundle interface {
  38. Overhead() int
  39. WriteToBundle(b []byte, writer io.Writer) (err error)
  40. ReadFromBundle(writer io.Reader) (b []byte, err error)
  41. }