From 0d63dbcd00156beae0a31b8575afdbc35e444a48 Mon Sep 17 00:00:00 2001
From: Him188 <Him188@mamoe.net>
Date: Fri, 24 Jan 2020 15:27:32 +0800
Subject: [PATCH] QQA Debugging update

---
 .../packet/chat/image/ImageDownPacket.kt      | 19 +++++++++++++------
 .../packet/chat/image/ImageUpPacket.kt        | 19 +++++++++++++------
 2 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageDownPacket.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageDownPacket.kt
index 5e4927b9a..bfc3ef4aa 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageDownPacket.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageDownPacket.kt
@@ -1,22 +1,29 @@
 package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image
 
 import kotlinx.io.core.ByteReadPacket
+import kotlinx.io.core.writeFully
 import kotlinx.serialization.protobuf.ProtoBuf
 import net.mamoe.mirai.data.Packet
 import net.mamoe.mirai.qqandroid.QQAndroidBot
 import net.mamoe.mirai.qqandroid.network.QQAndroidClient
 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.buildOutgingPacket
+import net.mamoe.mirai.qqandroid.network.protocol.packet.buildLoginOutgoingPacket
+import net.mamoe.mirai.qqandroid.network.protocol.packet.writeSsoPacket
 
 internal object ImageDownPacket : PacketFactory<ImageDownPacket.ImageDownPacketResponse>("LongConn.OffPicDown") {
 
     operator fun invoke(client: QQAndroidClient, req: GetImgUrlReq): OutgoingPacket {
-        return buildOutgingPacket(client, key = client.wLoginSigInfo.d2Key) {
-            ProtoBuf.dump(
-                Cmd0x352Packet.serializer(),
-                Cmd0x352Packet.createByImageRequest(req)
-            )
+        // TODO: 2020/1/24 测试: bodyType, subAppId
+        return buildLoginOutgoingPacket(client, key = client.wLoginSigInfo.d2Key, bodyType = 1) {
+            writeSsoPacket(client, subAppId = 0, commandName = commandName, sequenceId = it) {
+                val data = ProtoBuf.dump(
+                    Cmd0x352Packet.serializer(),
+                    Cmd0x352Packet.createByImageRequest(req)
+                )
+                writeInt(data.size + 4)
+                writeFully(data)
+            }
         }
     }
 
diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageUpPacket.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageUpPacket.kt
index a64dcb26a..cb0d29259 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageUpPacket.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageUpPacket.kt
@@ -1,22 +1,29 @@
 package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image
 
 import kotlinx.io.core.ByteReadPacket
+import kotlinx.io.core.writeFully
 import kotlinx.serialization.protobuf.ProtoBuf
 import net.mamoe.mirai.data.Packet
 import net.mamoe.mirai.qqandroid.QQAndroidBot
 import net.mamoe.mirai.qqandroid.network.QQAndroidClient
+import net.mamoe.mirai.qqandroid.network.protocol.packet.*
 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.buildOutgingPacket
+import net.mamoe.mirai.qqandroid.network.protocol.packet.buildLoginOutgoingPacket
 
 internal object ImageUpPacket : PacketFactory<ImageUpPacket.ImageUpPacketResponse>("LongConn.OffPicUp") {
 
     operator fun invoke(client: QQAndroidClient, req: UploadImgReq): OutgoingPacket {
-        return buildOutgingPacket(client, key = client.wLoginSigInfo.d2Key) {
-            ProtoBuf.dump(
-                Cmd0x352Packet.serializer(),
-                Cmd0x352Packet.createByImageRequest(req)
-            )
+        // TODO: 2020/1/24 测试: bodyType, subAppId
+        return buildLoginOutgoingPacket(client, key = client.wLoginSigInfo.d2Key, bodyType = 1) {
+            writeSsoPacket(client, subAppId = 0, commandName = ImageDownPacket.commandName, sequenceId = it) {
+                val data = ProtoBuf.dump(
+                    Cmd0x352Packet.serializer(),
+                    Cmd0x352Packet.createByImageRequest(req)
+                )
+                writeInt(data.size + 4)
+                writeFully(data)
+            }
         }
     }