From e6a554ae52478b671f399ca1d8c7eb193a9bd11a Mon Sep 17 00:00:00 2001 From: "jiahua.liu" <n@mamoe.net> Date: Thu, 23 Jan 2020 22:14:10 +0800 Subject: [PATCH] Android Protocol - Rebuild Image Protocol --- .../network/protocol/packet/chat/ChatType.kt | 2 +- .../chat/groupimage/GroupImageRequest.kt | 2 + .../{Cmd0x325Packet.kt => Cmd0x352Packet.kt} | 8 ++-- .../packet/chat/image/ImageDownPacket.kt | 4 +- .../packet/chat/image/ImageRequest.kt | 43 ++++++++++++------- .../packet/chat/image/ImageUpPacket.kt | 4 +- 6 files changed, 38 insertions(+), 25 deletions(-) create mode 100644 mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/groupimage/GroupImageRequest.kt rename mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/{Cmd0x325Packet.kt => Cmd0x352Packet.kt} (88%) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/ChatType.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/ChatType.kt index 14a3de7d5..d90acb586 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/ChatType.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/ChatType.kt @@ -9,7 +9,7 @@ enum class ChatType(val internalID: Int) { CONTACT(1006), - //未知,推测为"组" + //推测为"群" TROOP(1), TROOP_HCTOPIC(1026), diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/groupimage/GroupImageRequest.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/groupimage/GroupImageRequest.kt new file mode 100644 index 000000000..2f3bbfd51 --- /dev/null +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/groupimage/GroupImageRequest.kt @@ -0,0 +1,2 @@ +package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.groupimage + diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/Cmd0x325Packet.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/Cmd0x352Packet.kt similarity index 88% rename from mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/Cmd0x325Packet.kt rename to mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/Cmd0x352Packet.kt index f70e0c4e9..ecf966f9a 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/Cmd0x325Packet.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/Cmd0x352Packet.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialId import kotlinx.serialization.Serializable @Serializable -internal class Cmd0x325Packet( +internal class Cmd0x352Packet( @SerialId(1) val subCommand: Int, //2是GetImgUrlReq 1是UploadImgReq @SerialId(2) val uploadImgReq: UploadImgReq? = null,// optional @SerialId(3) val getImgUrlReq: GetImgUrlReq? = null,// optional @@ -12,9 +12,9 @@ internal class Cmd0x325Packet( @SerialId(10) val networkType: Int = 5// 数据网络=5 ) { companion object { - fun createByImageRequest(req: ImgReq, networkType: Int = 5): Cmd0x325Packet { + fun createByImageRequest(req: ImgReq, networkType: Int = 5): Cmd0x352Packet { if (req is UploadImgReq) - return Cmd0x325Packet( + return Cmd0x352Packet( 1, req, null, @@ -22,7 +22,7 @@ internal class Cmd0x325Packet( networkType ) if (req is GetImgUrlReq) - return Cmd0x325Packet( + return Cmd0x352Packet( 2, null, req, 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 82581f54e..9c3bbea6e 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 @@ -19,8 +19,8 @@ internal object ImageDownPacket : PacketFactory<ImageDownPacket.ImageDownPacketR operator fun invoke(client: QQAndroidClient, req: GetImgUrlReq): OutgoingPacket { return buildOutgingPacket(client, this._commandName, this._commandName, client.wLoginSigInfo.d2Key) { ProtoBuf.dump( - Cmd0x325Packet.serializer(), - Cmd0x325Packet.createByImageRequest(req) + Cmd0x352Packet.serializer(), + Cmd0x352Packet.createByImageRequest(req) ) } } diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageRequest.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageRequest.kt index c8313340f..0c6b54710 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageRequest.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImageRequest.kt @@ -2,35 +2,46 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image import kotlinx.serialization.SerialId import kotlinx.serialization.Serializable +import net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY import net.mamoe.mirai.utils.currentTimeSeconds interface ImgReq @Serializable internal class UploadImgReq( - @SerialId(1) val srcUni: Int, - @SerialId(2) val dstUni: Int, - @SerialId(3) val fileId: Int, - @SerialId(4) val fileMd5: ByteArray, + @SerialId(1) val srcUin: Int, + @SerialId(2) val dstUin: Int, + @SerialId(3) val fileId: Int = 0,//从0开始的自增数?貌似有一个连接就要自增1, 但是又会重置回0 + @SerialId(4) val fileMd5: String, @SerialId(5) val fileSize: Int, - @SerialId(6) val fileName: String, - @SerialId(7) val srcTerm: Int, - @SerialId(8) val platformType: Int, + @SerialId(6) val fileName: String,//默认为md5+".jpg" + @SerialId(7) val srcTerm: Int = 5, + @SerialId(8) val platformType: Int = 9, @SerialId(9) val innerIP: Int = 0, @SerialId(10) val addressBook: Int = 0,//chatType == 1006为1 我觉得发0没问题 - @SerialId(11) val retry: Int, - @SerialId(12) val buType: Int, + @SerialId(11) val retry: Int = 0,//default + @SerialId(12) val buType: Int,//1或96 不确定 @SerialId(13) val imgOriginal: Int,//是否为原图 @SerialId(14) val imgWidth: Int, @SerialId(15) val imgHeight: Int, - @SerialId(16) val imgType: Int, + @SerialId(16) val imgType: Int = 1000, + /** + * ImgType: + * JPG: 1000 + * PNG: 1001 + * WEBP: 1002 + * BMP: 1005 + * GIG: 2000 + * APNG: 2001 + * SHARPP: 1004 + * */ @SerialId(17) val buildVer: String = "8.2.0.1296",//版本号 - @SerialId(18) val fileIndex: ByteArray, - @SerialId(19) val fileStoreDays: Int, - @SerialId(20) val stepFlag: Int, - @SerialId(21) val rejectTryFast: Int,//bool - @SerialId(22) val srvUpload: Int, - @SerialId(23) val transferUrl: ByteArray + @SerialId(18) val fileIndex: ByteArray = EMPTY_BYTE_ARRAY,//default + @SerialId(19) val fileStoreDays: Int = 0,//default + @SerialId(20) val stepFlag: Int = 0,//default + @SerialId(21) val rejectTryFast: Int = 0,//bool + @SerialId(22) val srvUpload: Int = 1,//typeHotPic[1/2/3] + @SerialId(23) val transferUrl: ByteArray = EMPTY_BYTE_ARRAY//rawDownloadUrl, 如果没有就是EMPTY_BYTE_ARRAY ) : ImgReq @Serializable 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 36cffad83..f8dd845d0 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 @@ -19,8 +19,8 @@ internal object ImageUpPacket : PacketFactory<ImageUpPacket.ImageUpPacketRespons operator fun invoke(client: QQAndroidClient, req: UploadImgReq): OutgoingPacket { return buildOutgingPacket(client, this._commandName, this._commandName, client.wLoginSigInfo.d2Key) { ProtoBuf.dump( - Cmd0x325Packet.serializer(), - Cmd0x325Packet.createByImageRequest(req) + Cmd0x352Packet.serializer(), + Cmd0x352Packet.createByImageRequest(req) ) } }