Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
37118c33
Commit
37118c33
authored
Jan 24, 2020
by
jiahua.liu
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
0f230689
1f8617c8
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
174 additions
and
96 deletions
+174
-96
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
...moe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
+19
-13
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/jce/RequestPacket.kt
...moe/mirai/qqandroid/network/protocol/jce/RequestPacket.kt
+5
-0
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt
.../mirai/qqandroid/network/protocol/packet/PacketFactory.kt
+120
-83
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt
...ai/qqandroid/network/protocol/packet/login/LoginPacket.kt
+9
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/ByteArrayUtil.kt
...mmonMain/kotlin/net.mamoe.mirai/utils/io/ByteArrayUtil.kt
+21
-0
No files found.
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
View file @
37118c33
...
@@ -11,6 +11,8 @@ import net.mamoe.mirai.qqandroid.event.PacketReceivedEvent
...
@@ -11,6 +11,8 @@ import net.mamoe.mirai.qqandroid.event.PacketReceivedEvent
import
net.mamoe.mirai.qqandroid.network.protocol.packet.KnownPacketFactories
import
net.mamoe.mirai.qqandroid.network.protocol.packet.KnownPacketFactories
import
net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.LoginPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.LoginPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.LoginPacket.LoginPacketResponse.Captcha
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.LoginPacket.LoginPacketResponse.Success
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.SvcReqRegisterPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.SvcReqRegisterPacket
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.io.*
import
net.mamoe.mirai.utils.io.*
...
@@ -28,15 +30,23 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
...
@@ -28,15 +30,23 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
channel
.
connect
(
"113.96.13.208"
,
8080
)
channel
.
connect
(
"113.96.13.208"
,
8080
)
launch
(
CoroutineName
(
"Incoming Packet Receiver"
))
{
processReceive
()
}
launch
(
CoroutineName
(
"Incoming Packet Receiver"
))
{
processReceive
()
}
println
(
"Sending login"
)
bot
.
logger
.
info
(
"Trying login"
)
LoginPacket
.
SubCommand9
(
bot
.
client
).
sendAndExpect
<
LoginPacket
.
LoginPacketResponse
>()
when
(
val
response
=
LoginPacket
.
SubCommand9
(
bot
.
client
).
sendAndExpect
<
LoginPacket
.
LoginPacketResponse
>())
{
println
(
"SessionTicket=${bot.client.wLoginSigInfo.wtSessionTicket.data.toUHexString()}"
)
is
Captcha
->
when
(
response
)
{
is
Captcha
.
Picture
->
{
bot
.
logger
.
info
(
"需要图片验证码"
)
}
is
Captcha
.
Slider
->
{
bot
.
logger
.
info
(
"需要滑动验证码"
)
}
}
is
Success
->
{
bot
.
logger
.
info
(
"Login successful"
)
}
}
println
(
"d2key=${bot.client.wLoginSigInfo.d2Key.toUHexString()}"
)
println
(
"d2key=${bot.client.wLoginSigInfo.d2Key.toUHexString()}"
)
println
(
"SessionTicketKey=${bot.client.wLoginSigInfo.wtSessionTicketKey.toUHexString()}"
)
println
()
println
()
println
()
println
(
"Sending ReqRegister"
)
SvcReqRegisterPacket
(
bot
.
client
).
sendAndExpect
<
SvcReqRegisterPacket
.
Response
>()
SvcReqRegisterPacket
(
bot
.
client
).
sendAndExpect
<
SvcReqRegisterPacket
.
Response
>()
}
}
...
@@ -118,7 +128,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
...
@@ -118,7 +128,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
* 处理从服务器接收过来的包. 这些包可能是粘在一起的, 也可能是不完整的. 将会自动处理
* 处理从服务器接收过来的包. 这些包可能是粘在一起的, 也可能是不完整的. 将会自动处理
*/
*/
@UseExperimental
(
ExperimentalCoroutinesApi
::
class
)
@UseExperimental
(
ExperimentalCoroutinesApi
::
class
)
internal
suspend
fun
processPacket
(
rawInput
:
ByteReadPacket
):
Unit
=
rawInput
.
debugPrint
(
"Received"
).
let
{
input
:
ByteReadPacket
->
internal
fun
processPacket
(
rawInput
:
ByteReadPacket
):
Unit
=
rawInput
.
debugPrint
(
"Received"
).
let
{
input
:
ByteReadPacket
->
if
(
input
.
remaining
==
0L
)
{
if
(
input
.
remaining
==
0L
)
{
return
return
}
}
...
@@ -168,10 +178,6 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
...
@@ -168,10 +178,6 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
}
}
}
}
}
}
if
(
input
.
remaining
==
0L
)
{
bot
.
logger
.
error
(
"Empty packet received. Consider if bad packet was sent."
)
return
}
}
}
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/jce/RequestPacket.kt
View file @
37118c33
...
@@ -3,6 +3,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.jce
...
@@ -3,6 +3,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.jce
import
net.mamoe.mirai.qqandroid.network.io.JceInput
import
net.mamoe.mirai.qqandroid.network.io.JceInput
import
net.mamoe.mirai.qqandroid.network.io.JceOutput
import
net.mamoe.mirai.qqandroid.network.io.JceOutput
import
net.mamoe.mirai.qqandroid.network.io.JceStruct
import
net.mamoe.mirai.qqandroid.network.io.JceStruct
import
net.mamoe.mirai.utils.cryptor.contentToString
private
val
EMPTY_MAP
=
mapOf
<
String
,
String
>()
private
val
EMPTY_MAP
=
mapOf
<
String
,
String
>()
...
@@ -70,4 +71,8 @@ class RequestPacket() : JceStruct() {
...
@@ -70,4 +71,8 @@ class RequestPacket() : JceStruct() {
builder
.
write
(
this
.
context
,
9
)
builder
.
write
(
this
.
context
,
9
)
builder
.
write
(
this
.
status
,
10
)
builder
.
write
(
this
.
status
,
10
)
}
}
override
fun
toString
():
String
{
return
this
.
contentToString
()
}
}
}
\ No newline at end of file
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt
View file @
37118c33
This diff is collapsed.
Click to expand it.
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt
View file @
37118c33
...
@@ -172,6 +172,15 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
...
@@ -172,6 +172,15 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
sealed
class
LoginPacketResponse
:
Packet
{
sealed
class
LoginPacketResponse
:
Packet
{
object
Success
:
LoginPacketResponse
()
object
Success
:
LoginPacketResponse
()
sealed
class
Captcha
:
LoginPacketResponse
()
{
class
Slider
(
val
data
:
IoBuffer
)
:
Captcha
()
class
Picture
(
val
data
:
IoBuffer
)
:
Captcha
()
}
}
}
@UseExperimental
(
MiraiDebugAPI
::
class
)
@UseExperimental
(
MiraiDebugAPI
::
class
)
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/ByteArrayUtil.kt
View file @
37118c33
...
@@ -11,6 +11,27 @@ import kotlin.contracts.contract
...
@@ -11,6 +11,27 @@ import kotlin.contracts.contract
import
kotlin.jvm.JvmOverloads
import
kotlin.jvm.JvmOverloads
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.JvmSynthetic
@JvmOverloads
@Suppress
(
"DuplicatedCode"
)
// false positive. foreach is not common to UByteArray and ByteArray
@UseExperimental
(
ExperimentalUnsignedTypes
::
class
)
fun
List
<
Byte
>.
toUHexString
(
separator
:
String
=
" "
,
offset
:
Int
=
0
,
length
:
Int
=
this
.
size
-
offset
):
String
{
if
(
length
==
0
)
{
return
""
}
val
lastIndex
=
offset
+
length
return
buildString
(
length
*
2
)
{
this
@
toUHexString
.
forEachIndexed
{
index
,
it
->
if
(
index
in
offset
until
lastIndex
)
{
var
ret
=
it
.
toUByte
().
toString
(
16
).
toUpperCase
()
if
(
ret
.
length
==
1
)
ret
=
"0$ret"
append
(
ret
)
if
(
index
<
lastIndex
-
1
)
append
(
separator
)
}
}
}
}
@JvmOverloads
@JvmOverloads
@Suppress
(
"DuplicatedCode"
)
// false positive. foreach is not common to UByteArray and ByteArray
@Suppress
(
"DuplicatedCode"
)
// false positive. foreach is not common to UByteArray and ByteArray
@UseExperimental
(
ExperimentalUnsignedTypes
::
class
)
@UseExperimental
(
ExperimentalUnsignedTypes
::
class
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment