mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-10 12:10:10 +08:00
Remove mirai-debug
This commit is contained in:
parent
9ea6b2899f
commit
6110cf8f4e
@ -1,80 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id("application")
|
|
||||||
id("org.openjfx.javafxplugin") version "0.0.8"
|
|
||||||
kotlin("jvm")
|
|
||||||
java
|
|
||||||
id("kotlinx-serialization")
|
|
||||||
}
|
|
||||||
|
|
||||||
javafx {
|
|
||||||
version = "11"
|
|
||||||
modules = listOf("javafx.controls")
|
|
||||||
//mainClassName = "Application"
|
|
||||||
}
|
|
||||||
|
|
||||||
application {
|
|
||||||
mainClassName = "Application"
|
|
||||||
}
|
|
||||||
|
|
||||||
val kotlinVersion: String by rootProject.ext
|
|
||||||
val atomicFuVersion: String by rootProject.ext
|
|
||||||
val coroutinesVersion: String by rootProject.ext
|
|
||||||
val kotlinXIoVersion: String by rootProject.ext
|
|
||||||
val coroutinesIoVersion: String by rootProject.ext
|
|
||||||
val serializationVersion: String by rootProject.ext
|
|
||||||
|
|
||||||
val klockVersion: String by rootProject.ext
|
|
||||||
val ktorVersion: String by rootProject.ext
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
sourceSets {
|
|
||||||
all {
|
|
||||||
languageSettings.enableLanguageFeature("InlineClasses")
|
|
||||||
|
|
||||||
languageSettings.useExperimentalAnnotation("kotlin.Experimental")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun kotlinx(id: String, version: String) = "org.jetbrains.kotlinx:kotlinx-$id:$version"
|
|
||||||
|
|
||||||
fun ktor(id: String, version: String) = "io.ktor:ktor-$id:$version"
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
|
|
||||||
runtimeOnly(files("../mirai-core/build/classes/kotlin/jvm/main")) // IDE bug
|
|
||||||
runtimeOnly(files("../mirai-core-qqandroid/build/classes/kotlin/jvm/main")) // IDE bug
|
|
||||||
implementation(project(":mirai-core-qqandroid"))
|
|
||||||
// runtimeOnly(files("../mirai-core/build/classes/kotlin/jvm/main")) // classpath is not added correctly by IDE
|
|
||||||
|
|
||||||
implementation("org.bouncycastle:bcprov-jdk15on:1.64")
|
|
||||||
|
|
||||||
implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion")
|
|
||||||
|
|
||||||
implementation("org.pcap4j:pcap4j-distribution:1.8.2")
|
|
||||||
implementation("no.tornado:tornadofx:1.7.17")
|
|
||||||
implementation(group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-javafx", version = "1.3.2")
|
|
||||||
|
|
||||||
implementation(kotlin("stdlib", kotlinVersion))
|
|
||||||
implementation("org.jetbrains.kotlinx:atomicfu:$atomicFuVersion")
|
|
||||||
implementation(kotlinx("io-jvm", kotlinXIoVersion))
|
|
||||||
implementation(kotlinx("io", kotlinXIoVersion))
|
|
||||||
implementation(kotlinx("coroutines-io", coroutinesIoVersion))
|
|
||||||
implementation(kotlinx("coroutines-core", coroutinesVersion))
|
|
||||||
|
|
||||||
implementation(kotlinx("serialization-runtime", serializationVersion))
|
|
||||||
|
|
||||||
|
|
||||||
implementation(ktor("http-cio", ktorVersion))
|
|
||||||
implementation(ktor("http", ktorVersion))
|
|
||||||
implementation(ktor("client-core-jvm", ktorVersion))
|
|
||||||
implementation(ktor("client-cio", ktorVersion))
|
|
||||||
implementation(ktor("client-core", ktorVersion))
|
|
||||||
implementation(ktor("network", ktorVersion))
|
|
||||||
|
|
||||||
testImplementation(kotlin("test-annotations-common"))
|
|
||||||
testImplementation(kotlin("test"))
|
|
||||||
testImplementation(kotlin("test-junit"))
|
|
||||||
testImplementation(kotlin("script-runtime"))
|
|
||||||
|
|
||||||
}
|
|
Binary file not shown.
@ -1,14 +0,0 @@
|
|||||||
package japttest;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public class SuspendTest {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
// TODO: 2019/12/6 Kotlin or IDE bug here
|
|
||||||
// Uncomment the following line.
|
|
||||||
// boolean bool = JaptTestKt.getLoginResult() == LoginResult.YOU_CAN_WRITE_ANY_THING;
|
|
||||||
|
|
||||||
System.out.println("Hello world");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 Mamoe Technologies and contributors.
|
|
||||||
*
|
|
||||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
|
||||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
|
||||||
*
|
|
||||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
@file:Suppress("UNUSED_VARIABLE")
|
|
||||||
|
|
||||||
import net.mamoe.mirai.utils.io.encodeToString
|
|
||||||
import net.mamoe.mirai.utils.io.hexToBytes
|
|
||||||
import net.mamoe.mirai.utils.io.toUHexString
|
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.io.ByteArrayOutputStream
|
|
||||||
import java.util.*
|
|
||||||
import java.util.zip.GZIPInputStream
|
|
||||||
|
|
||||||
|
|
||||||
fun main() {
|
|
||||||
val short: Short = 0x8b1f.toShort()
|
|
||||||
// 7字节相同| |18字节向东
|
|
||||||
val bytes =
|
|
||||||
"AA 02 56 30 01 3A 40 53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00"
|
|
||||||
.hexToBytes()
|
|
||||||
println(bytes.encodeToString())
|
|
||||||
|
|
||||||
val string = bytes.encodeToString()
|
|
||||||
|
|
||||||
// println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64".hexToBytes().encodeToString())
|
|
||||||
println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64"
|
|
||||||
.hexToBytes().unbase64().encodeToString()
|
|
||||||
)
|
|
||||||
println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64"
|
|
||||||
.hexToBytes().unbase64().toUHexString())
|
|
||||||
|
|
||||||
//base64解密结果 48 A2 BF A1 8D C1 F7 F8 55 4C 42 9E 8D 9F 79 10 CC E1 67 FA 09 07 2E 7A 6A 83 D8 DA 74 08 C0 08 3B 19 0D F8 7A B0 8B 02 B3 CA 57 DE 42 BD EE 1D
|
|
||||||
|
|
||||||
|
|
||||||
println()
|
|
||||||
println()
|
|
||||||
|
|
||||||
|
|
||||||
println(Base64.getEncoder().encodeToString(".".repeat(1000).toByteArray()))
|
|
||||||
|
|
||||||
// 01 78
|
|
||||||
val data2 =
|
|
||||||
"9C CD 92 BB 4E C3 30 14 86 77 9E C2 32 23 4A 73 69 D3 76 48 52 25 25 BD 48 84 56 54 15 97 05 85 C4 09 2E B9 A8 4E D2 92 6E DD 10 0C 88 81 0D 84 90 60 40 42 C0 C4 D6 C7 69 E8 63 E0 94 22 46 46 F8 2D 59 F2 B1 7F 9F E3 EF 58 AA 9D FA 1E 18 21 12 E1 30 90 21 5F E0 20 40 81 15 DA 38 70 65 98 C4 0E 53 85 35 65 0D 50 49 7E E4 82 23 82 91 23 C3 C2 3F 17 04 FE A1 83 3D B4 6D FA 48 86 42 45 2F F3 82 58 64 CA A2 2E 32 25 AD 51 66 54 AD 21 32 AA AA AB 1C 5F 15 04 AE 5E F9 76 F4 F0 84 3A 28 05 D3 8A 97 48 46 18 8D 8D C4 8B B1 11 B9 10 38 9E 49 B9 14 21 88 10 19 61 0B B5 37 E9 4A CC CD 04 45 D8 96 E1 38 ED B7 BA 9D 81 53 2F A5 7B A1 A8 B1 29 6E 69 EE C4 68 75 DB FE 46 C7 76 3B 27 BA 67 F4 93 DD 83 DE 7E 33 16 06 CD B2 C6 0F 35 42 D8 52 63 C7 DE 1A 0E 86 1A 04 0A 90 70 8C 7C E0 99 69 98 C4 B4 27 90 46 62 1C 7B 48 01 7F CD F5 37 01 89 5D 55 0A A4 63 A2 48 2C 9D 56 C5 03 2B F4 42 22 C3 F5 2A 97 0F FA A8 EC EE F1 E3 E6 82 CF 6E EF 17 B3 E7 F9 E5 55 F6 7E 96 4D 5F C1 CF 1D 12 9B 83 50 A4 28 4C 88 85 40 B0 6C E6 62 7A 3E 7F 78 5A BC BC CD 67 D7 90 66 F8 DA CC 0F D3 FF A9 7C 02 73 51 C1 65".replace(
|
|
||||||
" ",
|
|
||||||
" "
|
|
||||||
)
|
|
||||||
.hexToBytes()
|
|
||||||
println(data2.size)
|
|
||||||
println(data2.unbase64().toUHexString())
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ByteArray.unbase64() = Base64.getDecoder().decode(this)
|
|
||||||
|
|
||||||
fun ByteArray.ungzip(): ByteArray {
|
|
||||||
val out = ByteArrayOutputStream()
|
|
||||||
val `in` = ByteArrayInputStream(this)
|
|
||||||
val ungzip = GZIPInputStream(`in`)
|
|
||||||
val buffer = ByteArray(256)
|
|
||||||
var n: Int
|
|
||||||
while (ungzip.read(buffer).also { n = it } >= 0) {
|
|
||||||
out.write(buffer, 0, n)
|
|
||||||
}
|
|
||||||
|
|
||||||
return out.toByteArray()
|
|
||||||
}
|
|
@ -1,307 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 Mamoe Technologies and contributors.
|
|
||||||
*
|
|
||||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
|
||||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
|
||||||
*
|
|
||||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
@file:Suppress("EXPERIMENTAL_API_USAGE")
|
|
||||||
|
|
||||||
import javafx.geometry.Pos
|
|
||||||
import javafx.scene.control.TextArea
|
|
||||||
import javafx.scene.control.TextField
|
|
||||||
import javafx.scene.layout.Region
|
|
||||||
import javafx.scene.paint.Color
|
|
||||||
import javafx.scene.text.FontWeight
|
|
||||||
import kotlinx.coroutines.*
|
|
||||||
import kotlinx.io.core.readUByte
|
|
||||||
import kotlinx.io.core.readUInt
|
|
||||||
import kotlinx.io.core.readUShort
|
|
||||||
import net.mamoe.mirai.utils.io.encodeToString
|
|
||||||
import net.mamoe.mirai.utils.io.hexToBytes
|
|
||||||
import net.mamoe.mirai.utils.io.read
|
|
||||||
import net.mamoe.mirai.utils.io.readUVarInt
|
|
||||||
import tornadofx.*
|
|
||||||
import java.awt.Toolkit
|
|
||||||
import java.awt.datatransfer.DataFlavor
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* How to run:
|
|
||||||
*
|
|
||||||
* `gradle :mirai-debug:run`
|
|
||||||
*/
|
|
||||||
class Application : App(HexDebuggerGui::class, Styles::class)
|
|
||||||
|
|
||||||
class Styles : Stylesheet() {
|
|
||||||
companion object {
|
|
||||||
// Define css classes
|
|
||||||
val heading by cssclass()
|
|
||||||
|
|
||||||
// Define colors
|
|
||||||
val mainColor = c("#bdbd22")
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
heading {
|
|
||||||
textFill = mainColor
|
|
||||||
fontSize = 20.px
|
|
||||||
fontWeight = FontWeight.BOLD
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
padding = box(vertical = 5.px, horizontal = 15.px)
|
|
||||||
fontWeight = FontWeight.BOLD
|
|
||||||
fontSize = 16.px
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
padding = box(vertical = 5.px, horizontal = 15.px)
|
|
||||||
fontSize = 16.px
|
|
||||||
}
|
|
||||||
|
|
||||||
textField {
|
|
||||||
padding = box(vertical = 5.px, horizontal = 15.px)
|
|
||||||
}
|
|
||||||
|
|
||||||
textArea {
|
|
||||||
fontSize = 18.px
|
|
||||||
}
|
|
||||||
|
|
||||||
val flat = mixin {
|
|
||||||
backgroundInsets += box(0.px)
|
|
||||||
borderColor += box(Color.DARKGRAY)
|
|
||||||
}
|
|
||||||
|
|
||||||
s(button, textInput) {
|
|
||||||
+flat
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class HexDebuggerGui : View("Mirai Hex Debugger") {
|
|
||||||
private lateinit var input: TextArea
|
|
||||||
private lateinit var outSize: TextField
|
|
||||||
private lateinit var outUVarInt: TextField
|
|
||||||
private lateinit var outShort: TextField
|
|
||||||
private lateinit var outUInt: TextField
|
|
||||||
private lateinit var outString: TextArea
|
|
||||||
private lateinit var outBits: TextField
|
|
||||||
|
|
||||||
|
|
||||||
private val clip = Toolkit.getDefaultToolkit().systemClipboard
|
|
||||||
private val clipboardContent: String?
|
|
||||||
get() {
|
|
||||||
val trans = clip.getContents(null)
|
|
||||||
if (trans?.isDataFlavorSupported(DataFlavor.stringFlavor) == true) {
|
|
||||||
return try {
|
|
||||||
trans.getTransferData(DataFlavor.stringFlavor) as String
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
GlobalScope.launch {
|
|
||||||
var last = clipboardContent
|
|
||||||
while (true) {
|
|
||||||
delay(100)
|
|
||||||
|
|
||||||
val current = try {
|
|
||||||
clipboardContent
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
null
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (current != last) {
|
|
||||||
withContext(Dispatchers.Main) {
|
|
||||||
input.text = current
|
|
||||||
updateOutputs(
|
|
||||||
current?.lineSequence()
|
|
||||||
?.map { it.substringBefore("//") }
|
|
||||||
?.joinToString(" ")
|
|
||||||
.toString()
|
|
||||||
.replace("UVarInt", "", ignoreCase = true)
|
|
||||||
.replace("[", "")
|
|
||||||
.replace("]", "")
|
|
||||||
.replace("(", "")
|
|
||||||
.replace(")", "")
|
|
||||||
.replace(" ", " ")
|
|
||||||
.replace(" ", " ")
|
|
||||||
.replace(" ", " ")
|
|
||||||
.replace("_", "")
|
|
||||||
.replace(",", "")
|
|
||||||
.replace("`", "")
|
|
||||||
.replace("\"", "")
|
|
||||||
.replace("'", "")
|
|
||||||
.replace("*", "")
|
|
||||||
.replace("\\", "")
|
|
||||||
.replace("/", "")
|
|
||||||
.replace("-", "")
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
last = current
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateOutputs(value: String) {
|
|
||||||
outUVarInt.text = runOrNull {
|
|
||||||
value.hexToBytes().read {
|
|
||||||
readUVarInt().toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outShort.text = runOrNull {
|
|
||||||
value.hexToBytes().read {
|
|
||||||
readShort().toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outUInt.text = runOrNull {
|
|
||||||
value.hexToBytes().read {
|
|
||||||
readUInt().toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outSize.text = runOrNull {
|
|
||||||
value.hexToBytes().size.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
outBits.text = runOrNull {
|
|
||||||
value.hexToBytes().read {
|
|
||||||
when (remaining.toInt()) {
|
|
||||||
0 -> null
|
|
||||||
1 -> readUByte().toString(2)
|
|
||||||
2 -> readUShort().toString(2)
|
|
||||||
4 -> readUInt().toString(2)
|
|
||||||
else -> ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outString.text = runOrNull {
|
|
||||||
value.hexToBytes().encodeToString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override val root = hbox {
|
|
||||||
//prefWidth = 735.0
|
|
||||||
minHeight = 300.0
|
|
||||||
prefHeight = minHeight
|
|
||||||
|
|
||||||
input = textarea {
|
|
||||||
promptText = "Input"
|
|
||||||
paddingVertical = 10
|
|
||||||
|
|
||||||
prefWidth = 150.0
|
|
||||||
minWidth = 100.0
|
|
||||||
//maxWidth = 150.0
|
|
||||||
fitToHeight(this@hbox)
|
|
||||||
}
|
|
||||||
|
|
||||||
vbox(10) {
|
|
||||||
label(" => ") {
|
|
||||||
alignment = Pos.CENTER
|
|
||||||
spacing = 10.0
|
|
||||||
}
|
|
||||||
|
|
||||||
button("_") {
|
|
||||||
paddingAll = 0.0
|
|
||||||
setOnMouseClicked {
|
|
||||||
if (primaryStage.isAlwaysOnTop) {
|
|
||||||
primaryStage.isAlwaysOnTop = false
|
|
||||||
text = "_"
|
|
||||||
} else {
|
|
||||||
primaryStage.isAlwaysOnTop = true
|
|
||||||
text = "↑"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
alignment = Pos.CENTER
|
|
||||||
fitToHeight(this@hbox)
|
|
||||||
}
|
|
||||||
|
|
||||||
vbox(10) {
|
|
||||||
paddingTop = 10
|
|
||||||
alignment = Pos.TOP_RIGHT
|
|
||||||
label("size")
|
|
||||||
label("UVarInt")
|
|
||||||
label("short")
|
|
||||||
label("uint")
|
|
||||||
label("bits")
|
|
||||||
label("string")
|
|
||||||
children.filterIsInstance<Region>().forEach {
|
|
||||||
it.fitToParentWidth()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vbox(20) {
|
|
||||||
alignment = Pos.CENTER_RIGHT
|
|
||||||
|
|
||||||
outSize = textfield {
|
|
||||||
promptText = "Size"
|
|
||||||
isEditable = false
|
|
||||||
}
|
|
||||||
|
|
||||||
outUVarInt = textfield {
|
|
||||||
promptText = "UVarInt"
|
|
||||||
isEditable = false
|
|
||||||
}
|
|
||||||
|
|
||||||
outShort = textfield {
|
|
||||||
promptText = "Short"
|
|
||||||
isEditable = false
|
|
||||||
}
|
|
||||||
|
|
||||||
outUInt = textfield {
|
|
||||||
promptText = "UInt"
|
|
||||||
isEditable = false
|
|
||||||
}
|
|
||||||
|
|
||||||
outBits = textfield {
|
|
||||||
promptText = "Bits"
|
|
||||||
isEditable = false
|
|
||||||
}
|
|
||||||
|
|
||||||
outString = textarea {
|
|
||||||
promptText = "String"
|
|
||||||
isEditable = false
|
|
||||||
maxWidth = 100.0
|
|
||||||
minHeight = 30.0
|
|
||||||
}
|
|
||||||
|
|
||||||
children.filterIsInstance<Region>().forEach {
|
|
||||||
it.fitToParentWidth()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
input.textProperty().onChange {
|
|
||||||
if (it == null) {
|
|
||||||
return@onChange
|
|
||||||
}
|
|
||||||
updateOutputs(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private inline fun <T> runOrNull(block: () -> T?): T? {
|
|
||||||
return try {
|
|
||||||
block()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,335 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 Mamoe Technologies and contributors.
|
|
||||||
*
|
|
||||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
|
||||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
|
||||||
*
|
|
||||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
@file:Suppress("ObjectPropertyName", "MayBeConstant", "NonAsciiCharacters", "SpellCheckingInspection", "unused", "EXPERIMENTAL_UNSIGNED_LITERALS")
|
|
||||||
|
|
||||||
package hex
|
|
||||||
|
|
||||||
import kotlinx.io.core.toByteArray
|
|
||||||
import net.mamoe.mirai.utils.MiraiInternalAPI
|
|
||||||
import net.mamoe.mirai.utils.io.hexToBytes
|
|
||||||
import net.mamoe.mirai.utils.io.read
|
|
||||||
import net.mamoe.mirai.utils.io.readUVarInt
|
|
||||||
import net.mamoe.mirai.utils.io.toUHexString
|
|
||||||
import kotlin.math.max
|
|
||||||
import kotlin.reflect.KProperty0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 匹配已知 hex 常量并格式化后打印到控制台.
|
|
||||||
*
|
|
||||||
* 低效率, 仅调试使用.
|
|
||||||
*/
|
|
||||||
internal fun String.printColorize(ignoreUntilFirstConst: Boolean): String = with(HexComparator) { colorize(ignoreUntilFirstConst) }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 比较两个 hex 并格式化后打印到控制台.
|
|
||||||
*
|
|
||||||
* 低效率, 仅调试使用.
|
|
||||||
*/
|
|
||||||
@MiraiInternalAPI
|
|
||||||
fun printCompareHex(hex1s: String, hex2s: String): String = with(HexComparator) {
|
|
||||||
compare(
|
|
||||||
hex1s.toUpperCase(),
|
|
||||||
hex2s.toUpperCase()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
data class NamedHexElement(
|
|
||||||
val name: String,
|
|
||||||
val value: String
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化用于匹配的 Hex 列表
|
|
||||||
*/
|
|
||||||
private fun LinkedHashSet<NamedHexElement>.initConstFileds() {
|
|
||||||
listOf(
|
|
||||||
TestConsts,
|
|
||||||
//TIMProtocol,
|
|
||||||
PacketIds
|
|
||||||
).forEach { obj ->
|
|
||||||
obj::class.members.filterIsInstance<KProperty0<*>>().forEach { property ->
|
|
||||||
property.get()?.let { add(NamedHexElement(property.name, it.toString())) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private object TestConsts {
|
|
||||||
val NIU_BI = "牛逼".toByteArray().toUHexString()
|
|
||||||
val _1994701021 = 1994701021u.toUHexString(" ")
|
|
||||||
val _1040400290 = 1040400290u.toUHexString(" ")
|
|
||||||
val _580266363 = 580266363u.toUHexString(" ")
|
|
||||||
val _761025446 = 761025446u.toUHexString()
|
|
||||||
|
|
||||||
val _1040400290_ = "3E 03 3F A2"
|
|
||||||
val _1994701021_ = "76 E4 B8 DD"
|
|
||||||
val _jiahua_ = "B1 89 BE 09"
|
|
||||||
val _Him188moe_ = "Him188moe".toByteArray().toUHexString()
|
|
||||||
val 发图片2 = "发图片2".toByteArray().toUHexString()
|
|
||||||
val 发图片群 = "发图片群".toByteArray().toUHexString()
|
|
||||||
val 发图片 = "发图片".toByteArray().toUHexString()
|
|
||||||
val 群 = "群".toByteArray().toUHexString()
|
|
||||||
val 你好 = "你好".toByteArray().toUHexString()
|
|
||||||
|
|
||||||
val MESSAGE_TAIL_10404 =
|
|
||||||
"0E 00 07 01 00 04 00 00 00 09 19 00 18 01 00 15 AA 02 12 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00"
|
|
||||||
.replace(" ", " ")
|
|
||||||
|
|
||||||
val FONT_10404 = "E5 BE AE E8 BD AF E9 9B 85 E9 BB 91"
|
|
||||||
|
|
||||||
val varint580266363 = "FB D2 D8 94 02"
|
|
||||||
val varint1040400290 = "A2 FF 8C F0 03"
|
|
||||||
val varint1994701021 = "DD F1 92 B7 07"
|
|
||||||
val varint761025446 = 761025446u.toUHexString().hexToBytes().read { readUVarInt() }.toUHexString()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("SpellCheckingInspection")
|
|
||||||
private object PacketIds {
|
|
||||||
val heartbeat = "00 58"
|
|
||||||
val friendmsgsend = "00 CD"
|
|
||||||
val friendmsgevent = "00 CE"
|
|
||||||
val groupmsg = "00 02"
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hex 比较器, 并着色已知常量
|
|
||||||
*
|
|
||||||
* This could be used to check packet encoding..
|
|
||||||
* but better to run under UNIX
|
|
||||||
*
|
|
||||||
* @author NaturalHG
|
|
||||||
* @author Him188moe
|
|
||||||
*/
|
|
||||||
private object HexComparator {
|
|
||||||
|
|
||||||
private val RED = "\u001b[31m"
|
|
||||||
private val GREEN = "\u001b[33m"
|
|
||||||
private val UNKNOWN_COLOR = "\u001b[30m"
|
|
||||||
private val BLUE = "\u001b[34m"
|
|
||||||
|
|
||||||
@Suppress("unused")
|
|
||||||
private class ConstMatcher constructor(hex: String) {
|
|
||||||
private val matches = linkedSetOf<Match>()
|
|
||||||
|
|
||||||
fun getMatchedConstName(hexNumber: Int): String? {
|
|
||||||
for (match in this.matches) {
|
|
||||||
if (match.range.contains(hexNumber)) {
|
|
||||||
return match.constName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
private class Match internal constructor(val range: IntRange, val constName: String)
|
|
||||||
|
|
||||||
init {
|
|
||||||
CONST_FIELDS.forEach { (name, value) ->
|
|
||||||
for (match in match(hex, value)) {
|
|
||||||
matches.add(Match(match, name))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val CONST_FIELDS: MutableSet<NamedHexElement> = linkedSetOf<NamedHexElement>().apply { initConstFileds() }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun match(hex: String, value: String): Set<IntRange> {
|
|
||||||
val constValue: String
|
|
||||||
try {
|
|
||||||
constValue = value.trim { it <= ' ' }
|
|
||||||
if (constValue.length / 3 <= 3) {//Minimum numbers of const hex bytes
|
|
||||||
return linkedSetOf()
|
|
||||||
}
|
|
||||||
} catch (ignored: ClassCastException) {
|
|
||||||
return linkedSetOf()
|
|
||||||
}
|
|
||||||
|
|
||||||
return mutableSetOf<IntRange>().apply {
|
|
||||||
var index = -1
|
|
||||||
index = hex.indexOf(constValue, index + 1)
|
|
||||||
while (index != -1) {
|
|
||||||
add(IntRange(index / 3, (index + constValue.length) / 3))
|
|
||||||
|
|
||||||
index = hex.indexOf(constValue, index + 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun buildConstNameChain(length: Int, constMatcher: ConstMatcher, constNameBuilder: StringBuilder) {
|
|
||||||
//System.out.println(constMatcher.matches);
|
|
||||||
var i = 0
|
|
||||||
while (i < length) {
|
|
||||||
constNameBuilder.append(" ")
|
|
||||||
val match = constMatcher.getMatchedConstName(i / 4)
|
|
||||||
if (match != null) {
|
|
||||||
var appendedNameLength = match.length
|
|
||||||
constNameBuilder.append(match)
|
|
||||||
while (match == constMatcher.getMatchedConstName(i++ / 4)) {
|
|
||||||
if (appendedNameLength-- < 0) {
|
|
||||||
constNameBuilder.append(" ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
constNameBuilder.append(" ".repeat(match.length % 4))
|
|
||||||
}
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun compare(hex1s: String, hex2s: String): String {
|
|
||||||
val builder = StringBuilder()
|
|
||||||
|
|
||||||
val hex1 = hex1s.trim { it <= ' ' }.replace("\n", "").split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
|
|
||||||
val hex2 = hex2s.trim { it <= ' ' }.replace("\n", "").split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
|
|
||||||
val constMatcher1 = ConstMatcher(hex1s)
|
|
||||||
val constMatcher2 = ConstMatcher(hex2s)
|
|
||||||
|
|
||||||
if (hex1.size == hex2.size) {
|
|
||||||
builder.append(GREEN).append("长度一致:").append(hex1.size)
|
|
||||||
} else {
|
|
||||||
builder.append(RED).append("长度不一致").append(hex1.size).append("/").append(hex2.size)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val numberLine = StringBuilder()
|
|
||||||
val hex1ConstName = StringBuilder()
|
|
||||||
val hex1b = StringBuilder()
|
|
||||||
val hex2b = StringBuilder()
|
|
||||||
val hex2ConstName = StringBuilder()
|
|
||||||
var dif = 0
|
|
||||||
|
|
||||||
val length = max(hex1.size, hex2.size) * 4
|
|
||||||
buildConstNameChain(length, constMatcher1, hex1ConstName)
|
|
||||||
buildConstNameChain(length, constMatcher2, hex2ConstName)
|
|
||||||
|
|
||||||
|
|
||||||
for (i in 0 until max(hex1.size, hex2.size)) {
|
|
||||||
var h1: String? = null
|
|
||||||
var h2: String? = null
|
|
||||||
var isDif = false
|
|
||||||
if (hex1.size <= i) {
|
|
||||||
h1 = RED + "__"
|
|
||||||
isDif = true
|
|
||||||
} else {
|
|
||||||
val matchedConstName = constMatcher1.getMatchedConstName(i)
|
|
||||||
if (matchedConstName != null) {
|
|
||||||
h1 = BLUE + hex1[i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (hex2.size <= i) {
|
|
||||||
h2 = RED + "__"
|
|
||||||
isDif = true
|
|
||||||
} else {
|
|
||||||
val matchedConstName = constMatcher2.getMatchedConstName(i)
|
|
||||||
if (matchedConstName != null) {
|
|
||||||
h2 = BLUE + hex2[i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (h1 == null && h2 == null) {
|
|
||||||
h1 = hex1[i]
|
|
||||||
h2 = hex2[i]
|
|
||||||
if (h1 == h2) {
|
|
||||||
h1 = GREEN + h1
|
|
||||||
h2 = GREEN + h2
|
|
||||||
} else {
|
|
||||||
h1 = RED + h1
|
|
||||||
h2 = RED + h2
|
|
||||||
isDif = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (h1 == null) {
|
|
||||||
h1 = RED + hex1[i]
|
|
||||||
}
|
|
||||||
if (h2 == null) {
|
|
||||||
h2 = RED + hex2[i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
numberLine.append(UNKNOWN_COLOR).append(getFixedNumber(i)).append(" ")
|
|
||||||
hex1b.append(" ").append(h1).append(" ")
|
|
||||||
hex2b.append(" ").append(h2).append(" ")
|
|
||||||
if (isDif) {
|
|
||||||
++dif
|
|
||||||
}
|
|
||||||
|
|
||||||
//doConstReplacement(hex1b);
|
|
||||||
//doConstReplacement(hex2b);
|
|
||||||
}
|
|
||||||
|
|
||||||
return builder.append(" ").append(dif).append(" 个不同").append("\n")
|
|
||||||
.append(numberLine).append("\n")
|
|
||||||
.append(hex1ConstName).append("\n")
|
|
||||||
.append(hex1b).append("\n")
|
|
||||||
.append(hex2b).append("\n")
|
|
||||||
.append(hex2ConstName).append("\n")
|
|
||||||
.toString()
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun String.colorize(ignoreUntilFirstConst: Boolean = false): String {
|
|
||||||
val builder = StringBuilder()
|
|
||||||
|
|
||||||
val hex = trim { it <= ' ' }.replace("\n", "").split(" ").dropLastWhile { it.isEmpty() }.toTypedArray()
|
|
||||||
val constMatcher1 = ConstMatcher(this)
|
|
||||||
|
|
||||||
val numberLine = StringBuilder()
|
|
||||||
val hex1ConstName = StringBuilder()
|
|
||||||
val hex1b = StringBuilder()
|
|
||||||
|
|
||||||
buildConstNameChain(length, constMatcher1, hex1ConstName)
|
|
||||||
|
|
||||||
var firstConst: String? = null
|
|
||||||
var constNameOffset = 0//已经因为还没到第一个const跳过了几个char
|
|
||||||
for (i in hex.indices) {
|
|
||||||
var h1: String? = null
|
|
||||||
|
|
||||||
val matchedConstName = constMatcher1.getMatchedConstName(i)
|
|
||||||
if (matchedConstName != null) {
|
|
||||||
firstConst = firstConst ?: matchedConstName
|
|
||||||
h1 = BLUE + hex[i]
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ignoreUntilFirstConst || firstConst != null) {//有过任意一个 Const
|
|
||||||
if (h1 == null) {
|
|
||||||
h1 = GREEN + hex[i]
|
|
||||||
}
|
|
||||||
numberLine.append(UNKNOWN_COLOR).append(getFixedNumber(i)).append(" ")
|
|
||||||
hex1b.append(" ").append(h1).append(" ")
|
|
||||||
} else {
|
|
||||||
constNameOffset++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return builder.append("\n")
|
|
||||||
.append(numberLine).append("\n")
|
|
||||||
.append(if (firstConst == null) hex1ConstName else {
|
|
||||||
with(hex1ConstName) {
|
|
||||||
val index = indexOf(firstConst)
|
|
||||||
if (index == -1) toString() else " " + substring(index, length)
|
|
||||||
}
|
|
||||||
}).append("\n")
|
|
||||||
.append(hex1b).append("\n")
|
|
||||||
.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun getFixedNumber(number: Int): String {
|
|
||||||
if (number < 10) {
|
|
||||||
return "00$number"
|
|
||||||
}
|
|
||||||
return if (number < 100) {
|
|
||||||
"0$number"
|
|
||||||
} else number.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 Mamoe Technologies and contributors.
|
|
||||||
*
|
|
||||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
|
||||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
|
||||||
*
|
|
||||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
package test
|
|
||||||
|
|
||||||
import kotlin.reflect.KProperty
|
|
||||||
|
|
||||||
|
|
||||||
data class Info(
|
|
||||||
var value: Int
|
|
||||||
) {
|
|
||||||
operator fun getValue(c: C, property: KProperty<*>): Int {
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class C(var info: Info) {
|
|
||||||
val value by info
|
|
||||||
}
|
|
||||||
|
|
||||||
fun main() {
|
|
||||||
val info = Info(1)
|
|
||||||
val c = C(info)
|
|
||||||
println(c.value) //1
|
|
||||||
info.value = 2
|
|
||||||
println(c.value) //2
|
|
||||||
c.info = Info(3)
|
|
||||||
println(c.value) //2
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 Mamoe Technologies and contributors.
|
|
||||||
*
|
|
||||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
|
||||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
|
||||||
*
|
|
||||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
package test
|
|
||||||
|
|
||||||
@Suppress("RedundantSuspendModifier")
|
|
||||||
suspend fun suspendPrintln(arg: String) = println(arg)
|
|
||||||
|
|
||||||
suspend fun main() {
|
|
||||||
suspendPrintln("Hello")
|
|
||||||
suspendPrintln(" World!")
|
|
||||||
}
|
|
@ -1,79 +0,0 @@
|
|||||||
package jce.jce;
|
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
|
|
||||||
public class HexUtil {
|
|
||||||
private static final char[] digits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
|
||||||
public static final byte[] emptybytes = new byte[0];
|
|
||||||
|
|
||||||
public static String byte2HexStr(byte var0) {
|
|
||||||
char var1 = digits[var0 & 15];
|
|
||||||
var0 = (byte) (var0 >>> 4);
|
|
||||||
return new String(new char[]{digits[var0 & 15], var1});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String bytes2HexStr(byte[] var0) {
|
|
||||||
if (var0 != null && var0.length != 0) {
|
|
||||||
char[] var3 = new char[var0.length * 2];
|
|
||||||
|
|
||||||
for (int var1 = 0; var1 < var0.length; ++var1) {
|
|
||||||
byte var2 = var0[var1];
|
|
||||||
var3[var1 * 2 + 1] = digits[var2 & 15];
|
|
||||||
var2 = (byte) (var2 >>> 4);
|
|
||||||
var3[var1 * 2 + 0] = digits[var2 & 15];
|
|
||||||
}
|
|
||||||
|
|
||||||
return new String(var3);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte char2Byte(char var0) {
|
|
||||||
if (var0 >= '0' && var0 <= '9') {
|
|
||||||
return (byte) (var0 - 48);
|
|
||||||
} else if (var0 >= 'a' && var0 <= 'f') {
|
|
||||||
return (byte) (var0 - 97 + 10);
|
|
||||||
} else {
|
|
||||||
return var0 >= 'A' && var0 <= 'F' ? (byte) (var0 - 65 + 10) : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte hexStr2Byte(String var0) {
|
|
||||||
byte var2 = 0;
|
|
||||||
byte var1 = var2;
|
|
||||||
if (var0 != null) {
|
|
||||||
var1 = var2;
|
|
||||||
if (var0.length() == 1) {
|
|
||||||
var1 = char2Byte(var0.charAt(0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] hexStr2Bytes(String var0) {
|
|
||||||
if (var0 != null && !var0.equals("")) {
|
|
||||||
byte[] var4 = new byte[var0.length() / 2];
|
|
||||||
|
|
||||||
for (int var3 = 0; var3 < var4.length; ++var3) {
|
|
||||||
char var1 = var0.charAt(var3 * 2);
|
|
||||||
char var2 = var0.charAt(var3 * 2 + 1);
|
|
||||||
var4[var3] = (byte) (char2Byte(var1) * 16 + char2Byte(var2));
|
|
||||||
}
|
|
||||||
|
|
||||||
return var4;
|
|
||||||
} else {
|
|
||||||
return emptybytes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] var0) {
|
|
||||||
try {
|
|
||||||
byte[] var2 = "Hello WebSocket World?".getBytes("gbk");
|
|
||||||
System.out.println(bytes2HexStr(var2));
|
|
||||||
} catch (UnsupportedEncodingException var1) {
|
|
||||||
var1.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
package jce.jce;
|
|
||||||
|
|
||||||
public class JceDecodeException extends RuntimeException {
|
|
||||||
public JceDecodeException(String var1) {
|
|
||||||
super(var1);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
package jce.jce;
|
|
||||||
|
|
||||||
public class JceEncodeException extends RuntimeException {
|
|
||||||
public JceEncodeException(String var1) {
|
|
||||||
super(var1);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
package jce.jce;
|
|
||||||
|
|
||||||
public class JceInputStream$HeadData {
|
|
||||||
public int tag;
|
|
||||||
public byte type;
|
|
||||||
|
|
||||||
public void clear() {
|
|
||||||
this.type = 0;
|
|
||||||
this.tag = 0;
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,430 +0,0 @@
|
|||||||
package jce.jce;
|
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
public class JceOutputStream {
|
|
||||||
// $FF: renamed from: bs java.nio.ByteBuffer
|
|
||||||
private ByteBuffer field_80728;
|
|
||||||
private OnIllegalArgumentException exceptionHandler;
|
|
||||||
protected String sServerEncoding;
|
|
||||||
|
|
||||||
public JceOutputStream() {
|
|
||||||
this(128);
|
|
||||||
}
|
|
||||||
|
|
||||||
public JceOutputStream(int var1) {
|
|
||||||
this.sServerEncoding = "GBK";
|
|
||||||
this.field_80728 = ByteBuffer.allocate(var1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public JceOutputStream(ByteBuffer var1) {
|
|
||||||
this.sServerEncoding = "GBK";
|
|
||||||
this.field_80728 = var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] var0) {
|
|
||||||
JceOutputStream var2 = new JceOutputStream();
|
|
||||||
var2.write(1311768467283714885L, 0);
|
|
||||||
ByteBuffer var1 = var2.getByteBuffer();
|
|
||||||
System.out.println(HexUtil.bytes2HexStr(var1.array()));
|
|
||||||
System.out.println(Arrays.toString(var2.toByteArray()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writeArray(Object[] var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 9, var2);
|
|
||||||
this.write(var1.length, 0);
|
|
||||||
int var3 = var1.length;
|
|
||||||
|
|
||||||
for (var2 = 0; var2 < var3; ++var2) {
|
|
||||||
this.write(var1[var2], 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public ByteBuffer getByteBuffer() {
|
|
||||||
return this.field_80728;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OnIllegalArgumentException getExceptionHandler() {
|
|
||||||
return this.exceptionHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void reserve(int var1) {
|
|
||||||
if (this.field_80728.remaining() < var1) {
|
|
||||||
int var2 = (this.field_80728.capacity() + var1) * 2;
|
|
||||||
|
|
||||||
ByteBuffer var3;
|
|
||||||
try {
|
|
||||||
var3 = ByteBuffer.allocate(var2);
|
|
||||||
var3.put(this.field_80728.array(), 0, this.field_80728.position());
|
|
||||||
} catch (IllegalArgumentException var4) {
|
|
||||||
if (this.exceptionHandler != null) {
|
|
||||||
this.exceptionHandler.onException(var4, this.field_80728, var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.field_80728 = var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExceptionHandler(OnIllegalArgumentException var1) {
|
|
||||||
this.exceptionHandler = var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int setServerEncoding(String var1) {
|
|
||||||
this.sServerEncoding = var1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] toByteArray() {
|
|
||||||
byte[] var1 = new byte[this.field_80728.position()];
|
|
||||||
System.arraycopy(this.field_80728.array(), 0, var1, 0, this.field_80728.position());
|
|
||||||
return var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(byte var1, int var2) {
|
|
||||||
this.reserve(3);
|
|
||||||
if (var1 == 0) {
|
|
||||||
this.writeHead((byte) 12, var2);
|
|
||||||
} else {
|
|
||||||
this.writeHead((byte) 0, var2);
|
|
||||||
this.field_80728.put(var1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(double var1, int var3) {
|
|
||||||
this.reserve(10);
|
|
||||||
this.writeHead((byte) 5, var3);
|
|
||||||
this.field_80728.putDouble(var1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(float var1, int var2) {
|
|
||||||
this.reserve(6);
|
|
||||||
this.writeHead((byte) 4, var2);
|
|
||||||
this.field_80728.putFloat(var1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(int var1, int var2) {
|
|
||||||
this.reserve(6);
|
|
||||||
if (var1 >= -32768 && var1 <= 32767) {
|
|
||||||
this.write((short) var1, var2);
|
|
||||||
} else {
|
|
||||||
this.writeHead((byte) 2, var2);
|
|
||||||
this.field_80728.putInt(var1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(long var1, int id) {
|
|
||||||
this.reserve(10);
|
|
||||||
if (var1 >= -2147483648L && var1 <= 2147483647L) {
|
|
||||||
this.write((int) var1, id);
|
|
||||||
} else {
|
|
||||||
this.writeHead((byte) 3, id);
|
|
||||||
this.field_80728.putLong(var1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(JceStruct var1, int var2) {
|
|
||||||
this.reserve(2);
|
|
||||||
this.writeHead((byte) 10, var2);
|
|
||||||
var1.writeTo(this);
|
|
||||||
this.reserve(2);
|
|
||||||
this.writeHead((byte) 11, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(Boolean var1, int var2) {
|
|
||||||
this.write((boolean) var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(Byte var1, int var2) {
|
|
||||||
this.write((byte) var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(Double var1, int var2) {
|
|
||||||
this.write((double) var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(Float var1, int var2) {
|
|
||||||
this.write((float) var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(Integer var1, int var2) {
|
|
||||||
this.write((int) var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(Long var1, int var2) {
|
|
||||||
this.write((long) var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(Object var1, int var2) {
|
|
||||||
if (var1 instanceof Byte) {
|
|
||||||
this.write((Byte) var1, var2);
|
|
||||||
} else if (var1 instanceof Boolean) {
|
|
||||||
this.write((Boolean) var1, var2);
|
|
||||||
} else if (var1 instanceof Short) {
|
|
||||||
this.write((Short) var1, var2);
|
|
||||||
} else if (var1 instanceof Integer) {
|
|
||||||
this.write((Integer) var1, var2);
|
|
||||||
} else if (var1 instanceof Long) {
|
|
||||||
this.write((Long) var1, var2);
|
|
||||||
} else if (var1 instanceof Float) {
|
|
||||||
this.write((Float) var1, var2);
|
|
||||||
} else if (var1 instanceof Double) {
|
|
||||||
this.write((Double) var1, var2);
|
|
||||||
} else if (var1 instanceof String) {
|
|
||||||
this.write((String) var1, var2);
|
|
||||||
} else if (var1 instanceof Map) {
|
|
||||||
this.write((Map) var1, var2);
|
|
||||||
} else if (var1 instanceof List) {
|
|
||||||
this.write((List) var1, var2);
|
|
||||||
} else if (var1 instanceof JceStruct) {
|
|
||||||
this.write((JceStruct) var1, var2);
|
|
||||||
} else if (var1 instanceof byte[]) {
|
|
||||||
this.write((byte[]) var1, var2);
|
|
||||||
} else if (var1 instanceof boolean[]) {
|
|
||||||
this.write((boolean[]) var1, var2);
|
|
||||||
} else if (var1 instanceof short[]) {
|
|
||||||
this.write((short[]) var1, var2);
|
|
||||||
} else if (var1 instanceof int[]) {
|
|
||||||
this.write((int[]) var1, var2);
|
|
||||||
} else if (var1 instanceof long[]) {
|
|
||||||
this.write((long[]) var1, var2);
|
|
||||||
} else if (var1 instanceof float[]) {
|
|
||||||
this.write((float[]) var1, var2);
|
|
||||||
} else if (var1 instanceof double[]) {
|
|
||||||
this.write((double[]) var1, var2);
|
|
||||||
} else if (var1.getClass().isArray()) {
|
|
||||||
this.writeArray((Object[]) var1, var2);
|
|
||||||
} else if (var1 instanceof Collection) {
|
|
||||||
this.write((Collection) var1, var2);
|
|
||||||
} else {
|
|
||||||
throw new JceEncodeException("write object error: unsupport type. " + var1.getClass());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(Short var1, int var2) {
|
|
||||||
this.write((short) var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(String var1, int var2) {
|
|
||||||
byte[] var5;
|
|
||||||
label16:
|
|
||||||
{
|
|
||||||
byte[] var3;
|
|
||||||
try {
|
|
||||||
var3 = var1.getBytes(this.sServerEncoding);
|
|
||||||
} catch (UnsupportedEncodingException var4) {
|
|
||||||
var5 = var1.getBytes();
|
|
||||||
break label16;
|
|
||||||
}
|
|
||||||
|
|
||||||
var5 = var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.reserve(var5.length + 10);
|
|
||||||
if (var5.length > 255) {
|
|
||||||
this.writeHead((byte) 7, var2);
|
|
||||||
this.field_80728.putInt(var5.length);
|
|
||||||
} else {
|
|
||||||
this.writeHead((byte) 6, var2);
|
|
||||||
this.field_80728.put((byte) var5.length);
|
|
||||||
}
|
|
||||||
this.field_80728.put(var5);
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> void write(Collection<T> var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 9, var2);
|
|
||||||
if (var1 == null) {
|
|
||||||
var2 = 0;
|
|
||||||
} else {
|
|
||||||
var2 = var1.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.write(var2, 0);
|
|
||||||
if (var1 != null) {
|
|
||||||
|
|
||||||
for (T t : var1) {
|
|
||||||
this.write(t, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public <K, V> void write(Map<K, V> var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 8, var2);
|
|
||||||
if (var1 == null) {
|
|
||||||
var2 = 0;
|
|
||||||
} else {
|
|
||||||
var2 = var1.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.write(var2, 0);
|
|
||||||
if (var1 != null) {
|
|
||||||
|
|
||||||
for (Entry<K, V> kvEntry : var1.entrySet()) {
|
|
||||||
this.write(((Entry) kvEntry).getKey(), 0);
|
|
||||||
this.write(((Entry) kvEntry).getValue(), 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(short var1, int var2) {
|
|
||||||
this.reserve(4);
|
|
||||||
if (var1 >= -128 && var1 <= 127) {
|
|
||||||
this.write((byte) var1, var2);
|
|
||||||
} else {
|
|
||||||
this.writeHead((byte) 1, var2);
|
|
||||||
this.field_80728.putShort(var1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(boolean var1, int var2) {
|
|
||||||
byte var3;
|
|
||||||
if (var1) {
|
|
||||||
var3 = 1;
|
|
||||||
} else {
|
|
||||||
var3 = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.write(var3, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(byte[] var1, int var2) {
|
|
||||||
this.reserve(var1.length + 8);
|
|
||||||
this.writeHead((byte) 13, var2);
|
|
||||||
this.writeHead((byte) 0, 0);
|
|
||||||
this.write(var1.length, 0);
|
|
||||||
this.field_80728.put(var1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(double[] var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 9, var2);
|
|
||||||
this.write(var1.length, 0);
|
|
||||||
int var3 = var1.length;
|
|
||||||
|
|
||||||
for (var2 = 0; var2 < var3; ++var2) {
|
|
||||||
this.write(var1[var2], 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(float[] var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 9, var2);
|
|
||||||
this.write(var1.length, 0);
|
|
||||||
int var3 = var1.length;
|
|
||||||
|
|
||||||
for (var2 = 0; var2 < var3; ++var2) {
|
|
||||||
this.write(var1[var2], 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(int[] var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 9, var2);
|
|
||||||
this.write(var1.length, 0);
|
|
||||||
int var3 = var1.length;
|
|
||||||
|
|
||||||
for (var2 = 0; var2 < var3; ++var2) {
|
|
||||||
this.write(var1[var2], 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(long[] var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 9, var2);
|
|
||||||
this.write(var1.length, 0);
|
|
||||||
int var3 = var1.length;
|
|
||||||
|
|
||||||
for (var2 = 0; var2 < var3; ++var2) {
|
|
||||||
this.write(var1[var2], 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> void write(T[] var1, int var2) {
|
|
||||||
this.writeArray(var1, var2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(short[] var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 9, var2);
|
|
||||||
this.write(var1.length, 0);
|
|
||||||
int var3 = var1.length;
|
|
||||||
|
|
||||||
for (var2 = 0; var2 < var3; ++var2) {
|
|
||||||
this.write(var1[var2], 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(boolean[] var1, int var2) {
|
|
||||||
this.reserve(8);
|
|
||||||
this.writeHead((byte) 9, var2);
|
|
||||||
this.write(var1.length, 0);
|
|
||||||
int var3 = var1.length;
|
|
||||||
|
|
||||||
for (var2 = 0; var2 < var3; ++var2) {
|
|
||||||
this.write(var1[var2], 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeByteString(String var1, int var2) {
|
|
||||||
this.reserve(var1.length() + 10);
|
|
||||||
byte[] var3 = HexUtil.hexStr2Bytes(var1);
|
|
||||||
if (var3.length > 255) {
|
|
||||||
this.writeHead((byte) 7, var2);
|
|
||||||
this.field_80728.putInt(var3.length);
|
|
||||||
this.field_80728.put(var3);
|
|
||||||
} else {
|
|
||||||
this.writeHead((byte) 6, var2);
|
|
||||||
this.field_80728.put((byte) var3.length);
|
|
||||||
this.field_80728.put(var3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeHead(byte var1, int tag) {
|
|
||||||
byte var3;
|
|
||||||
if (tag < 15) {
|
|
||||||
var3 = (byte) (tag << 4 | var1);
|
|
||||||
this.field_80728.put(var3);
|
|
||||||
} else if (tag < 256) {
|
|
||||||
var3 = (byte) (var1 | 240);
|
|
||||||
this.field_80728.put(var3);
|
|
||||||
this.field_80728.put((byte) tag);
|
|
||||||
} else {
|
|
||||||
throw new JceEncodeException("tag is too large: " + tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeStringByte(String var1, int var2) {
|
|
||||||
byte[] var3 = HexUtil.hexStr2Bytes(var1);
|
|
||||||
this.reserve(var3.length + 10);
|
|
||||||
if (var3.length > 255) {
|
|
||||||
this.writeHead((byte) 7, var2);
|
|
||||||
this.field_80728.putInt(var3.length);
|
|
||||||
this.field_80728.put(var3);
|
|
||||||
} else {
|
|
||||||
this.writeHead((byte) 6, var2);
|
|
||||||
this.field_80728.put((byte) var3.length);
|
|
||||||
this.field_80728.put(var3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,78 +0,0 @@
|
|||||||
package jce.jce;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
public abstract class JceStruct implements Serializable {
|
|
||||||
public static final byte BYTE = 0;
|
|
||||||
public static final byte DOUBLE = 5;
|
|
||||||
public static final byte FLOAT = 4;
|
|
||||||
public static final byte INT = 2;
|
|
||||||
public static final int JCE_MAX_STRING_LENGTH = 104857600;
|
|
||||||
public static final byte LIST = 9;
|
|
||||||
public static final byte LONG = 3;
|
|
||||||
public static final byte MAP = 8;
|
|
||||||
public static final byte SHORT = 1;
|
|
||||||
public static final byte SIMPLE_LIST = 13;
|
|
||||||
public static final byte STRING1 = 6;
|
|
||||||
public static final byte STRING4 = 7;
|
|
||||||
public static final byte STRUCT_BEGIN = 10;
|
|
||||||
public static final byte STRUCT_END = 11;
|
|
||||||
public static final byte ZERO_TAG = 12;
|
|
||||||
|
|
||||||
public static String toDisplaySimpleString(JceStruct var0) {
|
|
||||||
if (var0 == null) {
|
|
||||||
return null;
|
|
||||||
} else {
|
|
||||||
StringBuilder var1 = new StringBuilder();
|
|
||||||
var0.displaySimple(var1, 0);
|
|
||||||
return var1.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean containField(String var1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void display(StringBuilder var1, int var2) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void displaySimple(StringBuilder var1, int var2) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getFieldByName(String var1) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JceStruct newInit() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract void readFrom(JceInputStream var1);
|
|
||||||
|
|
||||||
public void recyle() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFieldByName(String var1, Object var2) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] toByteArray() {
|
|
||||||
JceOutputStream var1 = new JceOutputStream();
|
|
||||||
this.writeTo(var1);
|
|
||||||
return var1.toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] toByteArray(String var1) {
|
|
||||||
JceOutputStream var2 = new JceOutputStream();
|
|
||||||
var2.setServerEncoding(var1);
|
|
||||||
this.writeTo(var2);
|
|
||||||
return var2.toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
|
||||||
StringBuilder var1 = new StringBuilder();
|
|
||||||
this.display(var1, 0);
|
|
||||||
return var1.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract void writeTo(JceOutputStream var1);
|
|
||||||
}
|
|
@ -1,594 +0,0 @@
|
|||||||
package jce.jce;
|
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public final class JceUtil {
|
|
||||||
private static final byte[] highDigits;
|
|
||||||
private static final int iConstant = 37;
|
|
||||||
private static final int iTotal = 17;
|
|
||||||
private static final byte[] lowDigits;
|
|
||||||
|
|
||||||
static {
|
|
||||||
byte[] var1 = new byte[]{48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70};
|
|
||||||
byte[] var2 = new byte[256];
|
|
||||||
byte[] var3 = new byte[256];
|
|
||||||
|
|
||||||
for (int var0 = 0; var0 < 256; ++var0) {
|
|
||||||
var2[var0] = var1[var0 >>> 4];
|
|
||||||
var3[var0] = var1[var0 & 15];
|
|
||||||
}
|
|
||||||
|
|
||||||
highDigits = var2;
|
|
||||||
lowDigits = var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(byte var0, byte var1) {
|
|
||||||
if (var0 < var1) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return var0 > var1 ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(char var0, char var1) {
|
|
||||||
if (var0 < var1) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return var0 > var1 ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(double var0, double var2) {
|
|
||||||
if (var0 < var2) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return var0 > var2 ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(float var0, float var1) {
|
|
||||||
if (var0 < var1) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return var0 > var1 ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(int var0, int var1) {
|
|
||||||
if (var0 < var1) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return var0 > var1 ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(long var0, long var2) {
|
|
||||||
if (var0 < var2) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return var0 > var2 ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T extends Comparable<T>> int compareTo(T var0, T var1) {
|
|
||||||
return var0.compareTo(var1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T extends Comparable<T>> int compareTo(List<T> var0, List<T> var1) {
|
|
||||||
Iterator var3 = var0.iterator();
|
|
||||||
Iterator var4 = var1.iterator();
|
|
||||||
|
|
||||||
while (var3.hasNext() && var4.hasNext()) {
|
|
||||||
int var2 = ((Comparable) var3.next()).compareTo(var4.next());
|
|
||||||
if (var2 != 0) {
|
|
||||||
return var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var3.hasNext(), var4.hasNext());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(short var0, short var1) {
|
|
||||||
if (var0 < var1) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return var0 > var1 ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(boolean var0, boolean var1) {
|
|
||||||
byte var3 = 1;
|
|
||||||
byte var2;
|
|
||||||
if (var0) {
|
|
||||||
var2 = 1;
|
|
||||||
} else {
|
|
||||||
var2 = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!var1) {
|
|
||||||
var3 = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return var2 - var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(byte[] var0, byte[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = compareTo(var0[var2], var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(char[] var0, char[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = compareTo(var0[var2], var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(double[] var0, double[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = compareTo(var0[var2], var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(float[] var0, float[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = compareTo(var0[var2], var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(int[] var0, int[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = compareTo(var0[var2], var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(long[] var0, long[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = compareTo(var0[var2], var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T extends Comparable<T>> int compareTo(T[] var0, T[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = var0[var2].compareTo(var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(short[] var0, short[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = compareTo(var0[var2], var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int compareTo(boolean[] var0, boolean[] var1) {
|
|
||||||
int var3 = 0;
|
|
||||||
|
|
||||||
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
|
|
||||||
int var4 = compareTo(var0[var2], var1[var3]);
|
|
||||||
if (var4 != 0) {
|
|
||||||
return var4;
|
|
||||||
}
|
|
||||||
|
|
||||||
++var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return compareTo(var0.length, var1.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(byte var0, byte var1) {
|
|
||||||
return var0 == var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(char var0, char var1) {
|
|
||||||
return var0 == var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(double var0, double var2) {
|
|
||||||
return var0 == var2;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(float var0, float var1) {
|
|
||||||
return var0 == var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(int var0, int var1) {
|
|
||||||
return var0 == var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(long var0, long var2) {
|
|
||||||
return var0 == var2;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(Object var0, Object var1) {
|
|
||||||
return var0.equals(var1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(short var0, short var1) {
|
|
||||||
return var0 == var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean equals(boolean var0, boolean var1) {
|
|
||||||
return var0 == var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getHexdump(ByteBuffer var0) {
|
|
||||||
int var1 = var0.remaining();
|
|
||||||
if (var1 == 0) {
|
|
||||||
return "empty";
|
|
||||||
} else {
|
|
||||||
StringBuffer var4 = new StringBuffer(var0.remaining() * 3 - 1);
|
|
||||||
int var2 = var0.position();
|
|
||||||
int var3 = var0.get() & 255;
|
|
||||||
var4.append((char) highDigits[var3]);
|
|
||||||
var4.append((char) lowDigits[var3]);
|
|
||||||
--var1;
|
|
||||||
|
|
||||||
while (var1 > 0) {
|
|
||||||
var4.append(' ');
|
|
||||||
var3 = var0.get() & 255;
|
|
||||||
var4.append((char) highDigits[var3]);
|
|
||||||
var4.append((char) lowDigits[var3]);
|
|
||||||
--var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
var0.position(var2);
|
|
||||||
return var4.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getHexdump(byte[] var0) {
|
|
||||||
return getHexdump(ByteBuffer.wrap(var0));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] getJceBufArray(ByteBuffer var0) {
|
|
||||||
byte[] var1 = new byte[var0.position()];
|
|
||||||
System.arraycopy(var0.array(), 0, var1, 0, var1.length);
|
|
||||||
return var1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(byte var0) {
|
|
||||||
return var0 + 629;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(char var0) {
|
|
||||||
return var0 + 629;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(double var0) {
|
|
||||||
return hashCode(Double.doubleToLongBits(var0));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(float var0) {
|
|
||||||
return Float.floatToIntBits(var0) + 629;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(int var0) {
|
|
||||||
return var0 + 629;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(long var0) {
|
|
||||||
return (int) (var0 >> 32 ^ var0) + 629;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(Object var0) {
|
|
||||||
if (var0 == null) {
|
|
||||||
return 629;
|
|
||||||
} else if (var0.getClass().isArray()) {
|
|
||||||
if (var0 instanceof long[]) {
|
|
||||||
return hashCode((long[]) ((long[]) var0));
|
|
||||||
} else if (var0 instanceof int[]) {
|
|
||||||
return hashCode((int[]) ((int[]) var0));
|
|
||||||
} else if (var0 instanceof short[]) {
|
|
||||||
return hashCode((short[]) ((short[]) var0));
|
|
||||||
} else if (var0 instanceof char[]) {
|
|
||||||
return hashCode((char[]) ((char[]) var0));
|
|
||||||
} else if (var0 instanceof byte[]) {
|
|
||||||
return hashCode((byte[]) ((byte[]) var0));
|
|
||||||
} else if (var0 instanceof double[]) {
|
|
||||||
return hashCode((double[]) ((double[]) var0));
|
|
||||||
} else if (var0 instanceof float[]) {
|
|
||||||
return hashCode((float[]) ((float[]) var0));
|
|
||||||
} else if (var0 instanceof boolean[]) {
|
|
||||||
return hashCode((boolean[]) ((boolean[]) var0));
|
|
||||||
} else {
|
|
||||||
return var0 instanceof JceStruct[] ? hashCode((JceStruct[]) ((JceStruct[]) var0)) : hashCode((Object) ((Object[]) ((Object[]) var0)));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return var0 instanceof JceStruct ? var0.hashCode() : var0.hashCode() + 629;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(short var0) {
|
|
||||||
return var0 + 629;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(boolean var0) {
|
|
||||||
byte var1;
|
|
||||||
if (var0) {
|
|
||||||
var1 = 0;
|
|
||||||
} else {
|
|
||||||
var1 = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return var1 + 629;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(byte[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var1 * 37 + var0[var2];
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(char[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var1 * 37 + var0[var2];
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(double[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var1 * 37 + (int) (Double.doubleToLongBits(var0[var2]) ^ Double.doubleToLongBits(var0[var2]) >> 32);
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(float[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var1 * 37 + Float.floatToIntBits(var0[var2]);
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(int[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var1 * 37 + var0[var2];
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(long[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var1 * 37 + (int) (var0[var2] ^ var0[var2] >> 32);
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(JceStruct[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var1 * 37 + var0[var2].hashCode();
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(short[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var1 * 37 + var0[var2];
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int hashCode(boolean[] var0) {
|
|
||||||
int var3;
|
|
||||||
if (var0 == null) {
|
|
||||||
var3 = 629;
|
|
||||||
} else {
|
|
||||||
int var1 = 17;
|
|
||||||
int var2 = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var3 = var1;
|
|
||||||
if (var2 >= var0.length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte var4;
|
|
||||||
if (var0[var2]) {
|
|
||||||
var4 = 0;
|
|
||||||
} else {
|
|
||||||
var4 = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
var1 = var4 + var1 * 37;
|
|
||||||
++var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return var3;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
package jce.jce;
|
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
|
|
||||||
public interface OnIllegalArgumentException {
|
|
||||||
void onException(IllegalArgumentException var1, ByteBuffer var2, int var3, int var4);
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user