xlog_types.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package utils
  2. import (
  3. "sync/atomic"
  4. )
  5. type ConnectContext struct {
  6. UUID string
  7. SN string
  8. XlogPackageParser *XlogPackageParser
  9. SendBuffer atomic.Value
  10. DoneChan chan string // 用来回传结果的 channel
  11. }
  12. // Site基本信息
  13. type XlogSiteBaseInfo struct {
  14. SN [48]byte
  15. MAC [20]byte
  16. }
  17. // EncryptData解密后类型
  18. type XlogHandshakePackageData struct {
  19. NewIv [16]byte // 新的IV,用于后续通讯
  20. DevUuid [36]byte // 设备UUID
  21. }
  22. type XlogHandshakePackage struct {
  23. MagicWord uint32 // Magic word
  24. CmdLen uint32 // 数据长度 = XlogPackage总长度 - 8(MagicWord长度)
  25. EncryptData [64]byte //
  26. }
  27. type XlogHandshakeResponsePackage struct {
  28. MagicWord uint32 // Magic word
  29. EncryptData [64]byte //
  30. }
  31. type XlogPackageHeader struct {
  32. MagicWord uint32 // Magic word
  33. CmdLen uint32 // 数据长度 = XlogPackage总长度 - 8(MagicWord长度)
  34. MainCmd uint8 // 命令类型 CmdType - MainCmd
  35. SubCmd uint8 // 命令类型 CmdType - SubCmd
  36. ControlBitData uint16 // 控制位数据
  37. DstServiceName [12]byte // 目标服务名称
  38. ToBeSendLen uint32 // 发送这包之前,已经缓存的数据,这个值通常要是0,表示网络非常好,没有缓存数据
  39. IgnoredLen uint32 // 忽略的字节数
  40. UpTime uint32
  41. }
  42. type XlogPackage struct {
  43. Header XlogPackageHeader
  44. EncryptPayload []byte // 数据
  45. }
  46. // 必须用构造函数NewXlogPackageParser创建
  47. type XlogPackageParser struct {
  48. crypt XlogEncrypt
  49. ctx *ConnectContext
  50. cmdResultStr string
  51. Handshake bool // 连接是否已握手
  52. Buffer []byte // 接收数据缓存buffer,数据可能不完整,需预处理
  53. }