mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +08:00
mostly auto-generated by ``` rf ' ex { var c QQClient var seq uint16 var payload []byte var command string BuildUniPacket(c.Uin, seq, command, 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) -> c.uniPacket(seq, command, payload) } ' ```
41 lines
752 B
Go
41 lines
752 B
Go
package codec
|
|
|
|
import "github.com/Mrs4s/MiraiGo/binary"
|
|
|
|
type Encryptor interface {
|
|
Encrypt([]byte, []byte) []byte
|
|
ID() byte
|
|
}
|
|
|
|
type OICQ struct {
|
|
Uin uint32
|
|
Command uint16
|
|
EncryptMethod Encryptor
|
|
Key []byte
|
|
Body []byte
|
|
}
|
|
|
|
func (m *OICQ) Encode() []byte {
|
|
body := m.EncryptMethod.Encrypt(m.Body, m.Key)
|
|
|
|
p := binary.SelectWriter()
|
|
defer binary.PutWriter(p)
|
|
|
|
p.WriteByte(0x02)
|
|
p.WriteUInt16(27 + 2 + uint16(len(body)))
|
|
p.WriteUInt16(8001)
|
|
p.WriteUInt16(m.Command)
|
|
p.WriteUInt16(1)
|
|
p.WriteUInt32(m.Uin)
|
|
p.WriteByte(3)
|
|
p.WriteByte(m.EncryptMethod.ID())
|
|
p.WriteByte(0)
|
|
p.WriteUInt32(2)
|
|
p.WriteUInt32(0)
|
|
p.WriteUInt32(0)
|
|
p.Write(body)
|
|
p.WriteByte(0x03)
|
|
|
|
return append([]byte(nil), p.Bytes()...)
|
|
}
|