From 48f9ca0d48c1a3c28ed1c5acbd3c2c0879f814ea Mon Sep 17 00:00:00 2001
From: sandtechnology <20417547+sandtechnology@users.noreply.github.com>
Date: Sat, 19 Jun 2021 00:00:16 +0800
Subject: [PATCH] Fix #1334, update pb and fix private image upload issue
 (#1335)

* Fix #1334, update pb and fix private image upload issue

* Keeping consistent in annotation

* Restore old comment

* Let extendinfo default to null
---
 .../src/commonMain/kotlin/contact/AbstractUser.kt  |  3 ++-
 .../commonMain/kotlin/network/highway/Highway.kt   |  8 +++++---
 .../kotlin/network/protocol/data/proto/Cmd0x352.kt | 14 +++++++-------
 .../kotlin/network/protocol/data/proto/Highway.kt  |  2 +-
 4 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
index 438f86c2c..0514fc86d 100644
--- a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
+++ b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
@@ -64,7 +64,8 @@ internal abstract class AbstractUser(
                     fileMd5 = resource.md5,
                     fileSize = resource.size,
                     fileName = resource.md5.toUHexString("") + "." + resource.formatName,
-                    imgOriginal = 1,
+                    imgOriginal = true,
+                    buildVer = bot.client.buildVer
                 )
             ).sendAndExpect<LongConn.OffPicUp.Response>()
         }
diff --git a/mirai-core/src/commonMain/kotlin/network/highway/Highway.kt b/mirai-core/src/commonMain/kotlin/network/highway/Highway.kt
index f34ceb33e..a823eea93 100644
--- a/mirai-core/src/commonMain/kotlin/network/highway/Highway.kt
+++ b/mirai-core/src/commonMain/kotlin/network/highway/Highway.kt
@@ -57,7 +57,7 @@ internal object Highway {
         resource: ExternalResource,
         kind: ResourceKind,
         commandId: Int,  // group image=2, friend image=1, groupPtt=29
-        extendInfo: ByteArray = EMPTY_BYTE_ARRAY,
+        extendInfo: ByteArray? = null,
         encrypt: Boolean = false,
         initialTicket: ByteArray? = null, // null then use sig session
         tryOnce: Boolean = false,
@@ -99,7 +99,9 @@ internal object Highway {
                 dataFlag = dataFlag,
                 localeId = localeId,
                 fileMd5 = md5,
-                extendInfo = if (encrypt) TEA.encrypt(extendInfo, bdhSession.sessionKey) else extendInfo,
+                extendInfo = extendInfo?.let {
+                    if (encrypt) TEA.encrypt(extendInfo, bdhSession.sessionKey) else extendInfo
+                },
                 callback = callback
             ).sendConcurrently(
                 createConnection = { createConnection(ip, port) },
@@ -366,7 +368,7 @@ internal fun highwayPacketSession(
     data: ExternalResource,
     fileMd5: ByteArray,
     sizePerPacket: Int = ByteArrayPool.BUFFER_SIZE,
-    extendInfo: ByteArray = EMPTY_BYTE_ARRAY,
+    extendInfo: ByteArray? = null,
     callback: Highway.ProgressionCallback? = null,
 ): ChunkedFlowSession<ByteReadPacket> {
     ByteArrayPool.checkBufferSize(sizePerPacket)
diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/data/proto/Cmd0x352.kt b/mirai-core/src/commonMain/kotlin/network/protocol/data/proto/Cmd0x352.kt
index d0dc0ef09..f95c74333 100644
--- a/mirai-core/src/commonMain/kotlin/network/protocol/data/proto/Cmd0x352.kt
+++ b/mirai-core/src/commonMain/kotlin/network/protocol/data/proto/Cmd0x352.kt
@@ -117,17 +117,17 @@ internal class Cmd0x352 : ProtoBuf {
     internal class TryUpImgReq(
         @ProtoNumber(1) @JvmField val srcUin: Long,
         @ProtoNumber(2) @JvmField val dstUin: Long,
-        @ProtoNumber(3) @JvmField val fileId: Int = 0,//从0开始的自增数?貌似有一个连接就要自增1, 但是又会重置回0
+        @ProtoNumber(3) @JvmField val fileId: Long = 0L,//从0开始的自增数?貌似有一个连接就要自增1, 但是又会重置回0
         @ProtoNumber(4) @JvmField val fileMd5: ByteArray,
-        @ProtoNumber(5) @JvmField val fileSize: Long,
-        @ProtoNumber(6) @JvmField val fileName: String,//默认为md5+".jpg"
+        @ProtoNumber(5) @JvmField val fileSize: Long,//默认为md5+".jpg"
+        @ProtoNumber(6) @JvmField val fileName: String,
         @ProtoNumber(7) @JvmField val srcTerm: Int = 5,
         @ProtoNumber(8) @JvmField val platformType: Int = 9,
         @ProtoNumber(9) @JvmField val innerIP: Int = 0,
-        @ProtoNumber(10) @JvmField val addressBook: Int = 0,//chatType == 1006为1 我觉得发0没问题
+        @ProtoNumber(10) @JvmField val addressBook: Boolean = false,//chatType == 1006为true 我觉得发false没问题
         @ProtoNumber(11) @JvmField val retry: Int = 0,//default
         @ProtoNumber(12) @JvmField val buType: Int = 1,//1或96 不确定
-        @ProtoNumber(13) @JvmField val imgOriginal: Int,//是否为原图
+        @ProtoNumber(13) @JvmField val imgOriginal: Boolean = false,//是否为原图
         @ProtoNumber(14) @JvmField val imgWidth: Int = 0,
         @ProtoNumber(15) @JvmField val imgHeight: Int = 0,
         /**
@@ -145,7 +145,7 @@ internal class Cmd0x352 : ProtoBuf {
         @ProtoNumber(18) @JvmField val fileIndex: ByteArray = EMPTY_BYTE_ARRAY,//default
         @ProtoNumber(19) @JvmField val fileStoreDays: Int = 0,//default
         @ProtoNumber(20) @JvmField val stepFlag: Int = 0,//default
-        @ProtoNumber(21) @JvmField val rejectTryFast: Int = 0,//bool
+        @ProtoNumber(21) @JvmField val rejectTryFast: Boolean = false,//bool
         @ProtoNumber(22) @JvmField val srvUpload: Int = 1,//typeHotPic[1/2/3]
         @ProtoNumber(23) @JvmField val transferUrl: ByteArray = EMPTY_BYTE_ARRAY//rawDownloadUrl, 如果没有就是EMPTY_BYTE_ARRAY
     ) : ImgReq
@@ -155,7 +155,7 @@ internal class Cmd0x352 : ProtoBuf {
         @ProtoNumber(1) @JvmField val fileId: Long = 0L,
         @ProtoNumber(2) @JvmField val clientIp: Int = 0,
         @ProtoNumber(3) @JvmField val result: Int = 0,
-        @ProtoNumber(4) @JvmField val failMsg: String? = "",
+        @ProtoNumber(4) @JvmField val failMsg: String = "",
         @ProtoNumber(5) @JvmField val boolFileExit: Boolean = false,
         @ProtoNumber(6) @JvmField val msgImgInfo: ImgInfo? = null,
         @ProtoNumber(7) @JvmField val uint32UpIp: List<Int> = emptyList(),
diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/data/proto/Highway.kt b/mirai-core/src/commonMain/kotlin/network/protocol/data/proto/Highway.kt
index 4f6b5b62f..ee42f31dc 100644
--- a/mirai-core/src/commonMain/kotlin/network/protocol/data/proto/Highway.kt
+++ b/mirai-core/src/commonMain/kotlin/network/protocol/data/proto/Highway.kt
@@ -249,7 +249,7 @@ internal class CSDataHighwayHead : ProtoBuf {
     internal class ReqDataHighwayHead(
         @JvmField @ProtoNumber(1) val msgBasehead: DataHighwayHead? = null,
         @JvmField @ProtoNumber(2) val msgSeghead: SegHead? = null,
-        @JvmField @ProtoNumber(3) val reqExtendinfo: ByteArray, // = EMPTY_BYTE_ARRAY,
+        @JvmField @ProtoNumber(3) val reqExtendinfo: ByteArray? = null, // = EMPTY_BYTE_ARRAY,
         @JvmField @ProtoNumber(4) val timestamp: Long = 0L,
         @JvmField @ProtoNumber(5) val msgLoginSigHead: LoginSigHead? = null
     ) : ProtoBuf