From dc0df986baa414b09164f8c692dcdaccc6426763 Mon Sep 17 00:00:00 2001 From: Him188 Date: Fri, 31 Jan 2020 01:34:52 +0800 Subject: [PATCH] Fix sync cookie --- .../network/QQAndroidBotNetworkHandler.kt | 2 +- .../mirai/qqandroid/network/QQAndroidClient.kt | 2 +- .../network/protocol/data/proto/SyncCookie.kt | 16 ++++++++++++++++ .../protocol/packet/chat/receive/MessageSvc.kt | 12 ++++++++---- .../protocol/packet/list/FriendListPacket.kt | 8 +++++--- 5 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/SyncCookie.kt diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt index 5b06551ea..dd61c7474 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt @@ -108,7 +108,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler */ val data = FriendList.GetTroopList( bot.client - ).sendAndExpect() + ).sendAndExpect() println(data.contentToString()) } diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt index cd6f0a7d6..fc847868b 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt @@ -111,7 +111,7 @@ internal open class QQAndroidClient( val protocolVersion: Short = 8001 class C2cMessageSyncData { - var syncCookie = EMPTY_BYTE_ARRAY + var syncCookie: ByteArray? = null var pubAccountCookie = EMPTY_BYTE_ARRAY var syncFlag: Int = 0 var msgCtrlBuf: ByteArray = EMPTY_BYTE_ARRAY diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/SyncCookie.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/SyncCookie.kt new file mode 100644 index 000000000..149e1bf62 --- /dev/null +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/SyncCookie.kt @@ -0,0 +1,16 @@ +package net.mamoe.mirai.qqandroid.network.protocol.data.proto + +import kotlinx.serialization.SerialId +import kotlinx.serialization.Serializable +import net.mamoe.mirai.qqandroid.io.ProtoBuf + +@Serializable +class SyncCookie( + @SerialId(2) val time: Long, + @SerialId(3) val unknown1: Long = 2994099792, + @SerialId(4) val unknown2: Long = 3497826378, + @SerialId(5) val const1: Long = 1680172298, + @SerialId(6) val const2: Long = 2424173273, + @SerialId(7) val unknown3: Long = 83, + @SerialId(8) val unknown4: Long = 0 +) : ProtoBuf \ No newline at end of file diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt index 38b96dff7..92e9e17e4 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt @@ -10,6 +10,7 @@ import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.event.ForceOfflineEvent import net.mamoe.mirai.qqandroid.io.serialization.decodeUniPacket import net.mamoe.mirai.qqandroid.io.serialization.readRemainingAsProtoBuf +import net.mamoe.mirai.qqandroid.io.serialization.toByteArray import net.mamoe.mirai.qqandroid.io.serialization.writeProtoBuf import net.mamoe.mirai.qqandroid.network.QQAndroidClient import net.mamoe.mirai.qqandroid.network.protocol.data.jce.RequestPushForceOffline @@ -17,6 +18,7 @@ import net.mamoe.mirai.qqandroid.network.protocol.data.jce.RequestPushNotify import net.mamoe.mirai.qqandroid.network.protocol.data.proto.ImMsgBody import net.mamoe.mirai.qqandroid.network.protocol.data.proto.MsgComm import net.mamoe.mirai.qqandroid.network.protocol.data.proto.MsgSvc +import net.mamoe.mirai.qqandroid.network.protocol.data.proto.SyncCookie import net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket import net.mamoe.mirai.qqandroid.network.protocol.packet.PacketFactory import net.mamoe.mirai.qqandroid.network.protocol.packet.buildOutgoingUniPacket @@ -41,7 +43,7 @@ internal class MessageSvc { override suspend fun QQAndroidBot.handle(packet: RequestPushNotify) { network.run { - PbGetMsg(client, packet).sendAndExpect>() + PbGetMsg(client, packet.stMsgInfo?.uMsgTime ?: 0).sendAndExpect>() } } } @@ -56,7 +58,7 @@ internal class MessageSvc { operator fun invoke( client: QQAndroidClient, - from: RequestPushNotify + msgTime: Long //PbPushMsg.msg.msgHead.msgTime ): OutgoingPacket = buildOutgoingUniPacket( client, extraData = EXTRA_DATA.toReadPacket() @@ -64,14 +66,16 @@ internal class MessageSvc { writeProtoBuf( MsgSvc.PbGetMsgReq.serializer(), MsgSvc.PbGetMsgReq( - msgReqType = from.ctype.toInt(), + msgReqType = 1, // from.ctype.toInt() contextFlag = 1, rambleFlag = 0, latestRambleNumber = 20, otherRambleNumber = 3, onlineSyncFlag = 1, + whisperSessionId = 0, // serverBuf = from.serverBuf ?: EMPTY_BYTE_ARRAY, - syncCookie = client.c2cMessageSync.syncCookie, + syncCookie = client.c2cMessageSync.syncCookie + ?: SyncCookie(msgTime).toByteArray(SyncCookie.serializer()).also { client.c2cMessageSync.syncCookie = it }, syncFlag = 1 // syncFlag = client.c2cMessageSync.syncFlag, //msgCtrlBuf = client.c2cMessageSync.msgCtrlBuf, diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/list/FriendListPacket.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/list/FriendListPacket.kt index c62de6ef3..9414fed14 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/list/FriendListPacket.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/list/FriendListPacket.kt @@ -3,7 +3,10 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.list import kotlinx.io.core.ByteReadPacket import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot -import net.mamoe.mirai.qqandroid.io.serialization.* +import net.mamoe.mirai.qqandroid.io.serialization.decodeUniPacket +import net.mamoe.mirai.qqandroid.io.serialization.jceRequestSBuffer +import net.mamoe.mirai.qqandroid.io.serialization.toByteArray +import net.mamoe.mirai.qqandroid.io.serialization.writeJceStruct import net.mamoe.mirai.qqandroid.network.QQAndroidClient import net.mamoe.mirai.qqandroid.network.protocol.data.jce.GetFriendListReq import net.mamoe.mirai.qqandroid.network.protocol.data.jce.GetFriendListResp @@ -15,7 +18,6 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket import net.mamoe.mirai.qqandroid.network.protocol.packet.PacketFactory import net.mamoe.mirai.qqandroid.network.protocol.packet.buildOutgoingUniPacket import net.mamoe.mirai.utils.cryptor.contentToString -import net.mamoe.mirai.utils.io.debugPrint import net.mamoe.mirai.utils.io.discardExact import net.mamoe.mirai.utils.io.readRemainingBytes import net.mamoe.mirai.utils.io.toUHexString @@ -24,7 +26,7 @@ import net.mamoe.mirai.utils.io.toUHexString internal class FriendList { internal object GetTroopList : PacketFactory("friendlist.GetTroopListReqV2") { - override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): GetTroopList.Response { + override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response { println("获取到了GetTroopList的回信") println(this.readRemainingBytes().toUHexString()) return Response()