packet_lengths.go 780 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package protocol
  2. import "encoding/binary"
  3. type length32Encoder struct {
  4. startOffset int
  5. }
  6. func (l *length32Encoder) saveOffset(in int) {
  7. l.startOffset = in
  8. }
  9. func (l *length32Encoder) reserveLength() int {
  10. return 4
  11. }
  12. func (l *length32Encoder) run(curOffset int, buf []byte) {
  13. binary.BigEndian.PutUint32(buf[l.startOffset:], uint32(curOffset-l.startOffset-4))
  14. }
  15. type length32Decoder struct {
  16. startOffset int
  17. }
  18. func (l *length32Decoder) saveOffset(in int) {
  19. l.startOffset = in
  20. }
  21. func (l *length32Decoder) reserveLength() int {
  22. return 4
  23. }
  24. func (l *length32Decoder) check(curOffset int, buf []byte) error {
  25. if uint32(curOffset-l.startOffset-4) != binary.BigEndian.Uint32(buf[l.startOffset:]) {
  26. return DecodingError("Packet length did not match.")
  27. }
  28. return nil
  29. }