From 9f27cea38fd2ece286496bea6277d329ef14ab1b Mon Sep 17 00:00:00 2001
From: Him188 <Him188@mamoe.net>
Date: Sat, 7 Dec 2019 15:57:01 +0800
Subject: [PATCH] Make checker inline

---
 .../test/packetdebugger/PacketDebugger.kt     | 27 ++++++++++++-------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/mirai-core/src/jvmTest/kotlin/mirai/test/packetdebugger/PacketDebugger.kt b/mirai-core/src/jvmTest/kotlin/mirai/test/packetdebugger/PacketDebugger.kt
index fb75b5476..acb5f967a 100644
--- a/mirai-core/src/jvmTest/kotlin/mirai/test/packetdebugger/PacketDebugger.kt
+++ b/mirai-core/src/jvmTest/kotlin/mirai/test/packetdebugger/PacketDebugger.kt
@@ -12,7 +12,6 @@ import kotlinx.serialization.json.Json
 import mirai.test.packetdebugger.PacketDebugger.dataReceived
 import mirai.test.packetdebugger.PacketDebugger.dataSent
 import mirai.test.packetdebugger.PacketDebugger.qq
-import mirai.test.packetdebugger.PacketDebugger.recorder
 import mirai.test.packetdebugger.PacketDebugger.sessionKey
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.network.BotNetworkHandler
@@ -127,7 +126,7 @@ suspend fun main() {
             listenDevice(localIp, it)
         }
         println("Using sessionKey = ${sessionKey.value.toUHexString()}")
-        println("Filter QQ = ${qq.toLong()}")
+        println("Filter QQ = ${qq?.toLong()}")
         PacketDebugger.recorder?.let { println("Recorder is enabled") }
         Runtime.getRuntime().addShutdownHook(thread(false) {
             PacketDebugger.recorder?.writeTo(File(GMTDate().toString() + ".record"))?.also { println("${PacketDebugger.recorder.list.size} records saved.") }
@@ -135,25 +134,28 @@ suspend fun main() {
         println("Ready perfectly")
     }
 
-    suspend fun decryptRecordedPackets() {
-        File("GMTDate(seconds=12, minutes=20, hours=7, dayOfWeek=SATURDAY, dayOfMonth=7, dayOfYear=341, month=DECEMBER, year=2019, timestamp=1575703212612).record").toRecorder()
+    suspend fun decryptRecordedPackets(filename: String) {
+        File(filename).toRecorder()
             .list.forEach {
             if (it.isSend) {
                 try {
                     dataSent(it.data)
                 } catch (e: Exception) {
+                    e.printStackTrace()
                 }
             } else {
                 try {
                     dataReceived(it.data)
                 } catch (e: Exception) {
+                    e.printStackTrace()
 
                 }
             }
         }
     }
 
-    decryptRecordedPackets()
+    decryptRecordedPackets("GMTDate(seconds=3, minutes=46, hours=7, dayOfWeek=SATURDAY, dayOfMonth=7, dayOfYear=341, month=DECEMBER, year=2019, timestamp=1575704763731).record")
+    //startPacketListening()
 }
 
 /**
@@ -178,10 +180,13 @@ internal object PacketDebugger {
      * 7. 运行完 `mov eax,dword ptr ss:[ebp+10]`
      * 8. 查看内存, `eax` 到 `eax+10` 的 16 字节就是 `sessionKey`
      */
-    val sessionKey: SessionKey = SessionKey("D4 4F 0A 89 E6 A6 10 CE CF F8 AF C0 7E FA F4 32".hexToBytes())
+    val sessionKey: SessionKey = SessionKey("98 4C 42 37 0F 87 BB A2 97 57 A1 77 A9 A9 74 37".hexToBytes())
     // TODO: 2019/12/7 无法访问 internal 是 kotlin bug, KT-34849
 
-    const val qq: UInt = 1040400290u
+    /**
+     * null 则不筛选
+     */
+    val qq: UInt? = null
     /**
      * 打开后则记录每一个包到文件.
      */
@@ -200,7 +205,8 @@ internal object PacketDebugger {
             discardExact(3)
             val id = matchPacketId(readUShort())
             val sequenceId = readUShort()
-            if (id == KnownPacketId.HEARTBEAT || readUInt() != qq)
+            val packetQQ = readUInt()
+            if (id == KnownPacketId.HEARTBEAT || (qq != null && packetQQ != qq))
                 return@read
 
             if (IgnoredPacketIdList.contains(id)) {
@@ -296,7 +302,8 @@ internal object PacketDebugger {
         if (IgnoredPacketIdList.contains(id)) {
             return
         }
-        if (readUInt() != qq) {
+        val packetQQ = readUInt()
+        if (qq != null && packetQQ != qq) {
             return@read
         }
         println("---------------------------")
@@ -382,7 +389,7 @@ internal object DebugNetworkHandler : BotNetworkHandler<DataPacketSocketAdapter>
             get() = bot
 
     }
-    override val bot: Bot = Bot(qq, "", coroutineContext)
+    override val bot: Bot = Bot(qq ?: 0u, "", coroutineContext)
     override val session = BotSession(bot)
 
     override suspend fun login(): LoginResult = LoginResult.SUCCESS