header.go 628 B

12345678910111213141516171819202122232425262728293031323334
  1. package protocol
  2. import "github.com/calmh/syncthing/xdr"
  3. type header struct {
  4. version int
  5. msgID int
  6. msgType int
  7. }
  8. func (h header) encodeXDR(xw *xdr.Writer) (int, error) {
  9. u := encodeHeader(h)
  10. return xw.WriteUint32(u)
  11. }
  12. func (h *header) decodeXDR(xr *xdr.Reader) error {
  13. u := xr.ReadUint32()
  14. *h = decodeHeader(u)
  15. return xr.Error()
  16. }
  17. func encodeHeader(h header) uint32 {
  18. return uint32(h.version&0xf)<<28 +
  19. uint32(h.msgID&0xfff)<<16 +
  20. uint32(h.msgType&0xff)<<8
  21. }
  22. func decodeHeader(u uint32) header {
  23. return header{
  24. version: int(u>>28) & 0xf,
  25. msgID: int(u>>16) & 0xfff,
  26. msgType: int(u>>8) & 0xff,
  27. }
  28. }